如何直接运行 Python 程序?

如何直接运行 Python 程序?

如何直接运行 Python 程序?

我已经创建了一个.py文件(例如,mnik.py) 在 gedit 中。它在终端中运行顺利。

命令执行

python3 mnik.py

但每当我单击该文件时,它都会使用 gedit 打开。我无法通过单击直接运行它。

该怎么办?

答案1

需要两样东西。

  1. 脚本必须有#!一行告诉操作系统要使用哪个解释器。在你的情况下,你的第一的代码中的行必须是#!/usr/bin/env python3
  2. 您需要打开文件管理器,转到编辑->首选项->行为,然后选择如何处理可执行文件

    在此处输入图片描述

    1. 最后,确保您的文件本身确实设置了可执行权限。您可以在终端中执行此操作,chmod +x /path/to/script.py在 GUI 中,右键单击文件并更改其属性 -> 权限

    在此处输入图片描述

    在此处输入图片描述

关于 shebang 行的说明

第一行称为 shebang 行,必须以 开头#!;接下来的内容是读取代码的解释器的名称。如果您正在使用,python3则可以使用#!/usr/bin/python3#!/usr/bin/env python3以实现可移植性。如果您不使用特定于 python 版本的代码 - 只需使用#!/usr/bin/env python

注意脚本输出:

如果您的脚本将输出打印到控制台,则需要有终端窗口,或者使用 GUI 对话框,例如zenityRun 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.pymnik,这是在 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

这主要是从.desktoppython 解释器本身的文件中复制而来。不同之处在于,当您打开它时,它会使用命令运行终端行的新实例:python3 %f;echo "$(tput setaf 1)Program terminated.\nPress enter to exit...$(tput sgr 0)"; read',该命令运行脚本(%f显然是文件的路径),然后在退出时暂停。

然后进入 nautilus,右键单击脚本,进入属性 → 打开方式并选择运行 Python 脚本,我们刚刚创建的“应用程序”。现在,当您双击时,它应该从终端运行脚本。

这是一个非常好的解决方法,但我发现它有两个问题:

  1. 它不适用于名称中带有空格的脚本。
  2. 它会打开一个单独的终端窗口,这很烦人。出于某种原因,我无法通过设置来让它工作Exec=python3 %f,每当程序尝试获取输入时,它都会给我一个文件结束异常。不知道为什么。

相关内容