从命令行直接运行Python脚本

11
#!/usr/bin/env python

我将那段代码放在脚本的开头。我发现这样可以使得脚本无需使用python programname.py命令也能够在命令行中运行。除非我理解错了,只要在脚本开头加上上述代码,我应该就能够使用programname.py命令运行程序。这是正确的吗?

对于我来说它没有起作用,我只是收到一个错误提示,指出我必须在“调用”之前使用python

3个回答

25

Python脚本的通用运行方式

您可以使用以下方法在几乎所有情况下运行Python脚本,而无需shebang (#!):

python myscript.py

或者近似等效地(它将当前目录添加到您的路径中并执行名为myscript的模块)(最好这样做!)

python -m myscript

只要您在命令行上安装了Python并将其添加到环境变量的路径中(即设置为使用python运行,如果已安装,则通常是这种情况),就可以运行此命令。

Shebangs (#!) 是Unix系统的东西。

根据您正在使用的shebang,它通常用于在Unix平台上运行(通常是苹果或Linux)。 Windows通常需要cygwin才能使用shebang。

您可以使用以下命令来默认使用系统路径中可用的任何Python:

#!/usr/bin/env python

假设你正在使用Unix系统,你可以尝试其他位置来设置Python,比如:

#!/usr/bin/python

胡乱应付

您可以使用Unix的which命令查看您当前正在使用的Python版本,因此,如果您想查看Python的来源,请使用此命令:

which python

或者在Windows上(cygwin可能可以运行shebang):

where python

在Linux/Unix系统中,你需要执行权限才能以这种方式运行该文件。使用 chmod 命令。

Translated:

在Linux/Unix系统中,你需要执行权限才能以这种方式运行该文件。使用 chmod 命令。

chmod +x myscript.py

(chmod也适用于Windows中的Cygwin)

如果您没有以root身份运行,您可能需要使用sudo,那样就会是:

sudo chmod +x myscript.py

然后尝试在相同的目录下运行以下命令:

./myscript.py 

Python的shebang不再是Unix的专属。Python已经实现了“虚拟shebang”,可以在Unix和Windows上有效地工作。请参见https://docs.python.org/3/using/windows.html#shebang-lines。 - cowlinator

6

使文件可执行

sudo chmod +x /path/to/file.py

然后从与file.py相同的目录中:

./file.py

0
我遇到了同样的问题:我无法运行任何可执行文件。原因是我在/etc/fstab中添加了一个分区(我的硬盘),但没有给予exec权限。解决办法是修改如下:
UUID=asdfasfasdfa /mnt/fee auto rw 0 1

UUID=asdfasfasdfa /mnt/fee auto defaults 0 1

因为exec包含在defaults = rw, suid, dev, exec, auto, nouser, and async.中。在NTFS或其他文件系统上,您无法更改分区��文件或文件夹的权限,但这不是OP的问题,因为文件的权限已经正确设置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接