如何直接运行 Python 程序?
我已经创建了一个.py文件(例如,mnik.py) 在 gedit 中。它在终端中运行顺利。
命令执行
python3 mnik.py
但每当我单击该文件时,它都会使用 gedit 打开。我无法通过单击直接运行它。
该怎么办?
答案1
需要两样东西。
- 脚本必须有
#!
一行告诉操作系统要使用哪个解释器。在你的情况下,你的第一的代码中的行必须是#!/usr/bin/env python3
您需要打开文件管理器,转到编辑->首选项->行为,然后选择如何处理可执行文件
- 最后,确保您的文件本身确实设置了可执行权限。您可以在终端中执行此操作,
chmod +x /path/to/script.py
在 GUI 中,右键单击文件并更改其属性 -> 权限
- 最后,确保您的文件本身确实设置了可执行权限。您可以在终端中执行此操作,
第一行称为 shebang 行,必须以 开头#!
;接下来的内容是读取代码的解释器的名称。如果您正在使用,python3
则可以使用#!/usr/bin/python3
或 #!/usr/bin/env python3
以实现可移植性。如果您不使用特定于 python 版本的代码 - 只需使用#!/usr/bin/env python
注意脚本输出:
如果您的脚本将输出打印到控制台,则需要有终端窗口,或者使用 GUI 对话框,例如zenity
。Run in Terminal
如果您想查看代码,最好使用选项。如果您希望脚本在不查看控制台输出的情况下执行某些操作 - 使用Run
选项。
此外,如果您有命令行参数(例如sys.argv[1]
在脚本中),则除非打开终端窗口,否则您无法设置它们。
答案2
您需要将要执行代码的程序的位置放在第一行,然后需要通过更改其权限将脚本设置为作为可执行文件运行。这假设您从终端或其他脚本启动应用程序。
查找 Python 安装
$ which python
/usr/bin/python
将程序位置添加到程序的顶行,并#!
在前面添加
#!/usr/bin/python
# Python code goes here....
设置Python脚本具有执行权限
$ chmod 700 test.py
现在你可以直接运行脚本
$ ./test.py
test.py 的代码清单
#!/usr/bin/python
print "test"
答案3
如果您想在不输入任何内容的情况下运行该程序,python3 mnik.py
您必须使该脚本可执行并确保该python3
脚本可以运行。
你可以通过运行
chmod +x mnik.py
第二种方法是在脚本的第一行添加一个 shebang 行调用 python3。在我使用过的所有带有 python3 的 Ubuntu 系统上,你可以通过在其顶部添加此行来获取 python3:
#!/usr/bin/env python3
完成上述两项更改后,您可以输入/path/to/mnik.py
,./mnik.py
或者仅输入mnik.py
(后者要求脚本位于您的 PATH 中)。
如果您进行了这些更改,您可能还需要考虑重命名mnik.py
为mnik
,这是在 PyPI 上发布的带有命令的 Python 包的常见做法。
答案4
如果您不想费心将脚本设置为可执行文件、在代码中添加注释或每次运行时选择从终端运行,我找到了一种解决方法。
转到~/.local/share/applications
,在那里创建一个新.desktop
文件。将其命名为python-run.desktop
。将以下内容粘贴到其中:
[Desktop Entry]
Name=Run Python Script
Comment=Python Interpreter
Exec=gnome-terminal -- /bin/bash -c 'python3 %f;echo "$(tput setaf 1)Program terminated.\nPress enter to exit...$(tput sgr 0)"; read'
Icon=/usr/share/pixmaps/python3.6.xpm
Terminal=true
Type=Application
Categories=Development;
StartupNotify=true
NoDisplay=true
这主要是从.desktop
python 解释器本身的文件中复制而来。不同之处在于,当您打开它时,它会使用命令运行终端行的新实例:python3 %f;echo "$(tput setaf 1)Program terminated.\nPress enter to exit...$(tput sgr 0)"; read'
,该命令运行脚本(%f
显然是文件的路径),然后在退出时暂停。
然后进入 nautilus,右键单击脚本,进入属性 → 打开方式并选择运行 Python 脚本,我们刚刚创建的“应用程序”。现在,当您双击时,它应该从终端运行脚本。
这是一个非常好的解决方法,但我发现它有两个问题:
- 它不适用于名称中带有空格的脚本。
- 它会打开一个单独的终端窗口,这很烦人。出于某种原因,我无法通过设置来让它工作
Exec=python3 %f
,每当程序尝试获取输入时,它都会给我一个文件结束异常。不知道为什么。