从命令行调用Python脚本而无需先输入“python”

13

问题:在命令行中,如何在不在脚本名称前面输入“python”命令的情况下调用Python脚本?这是否可能?


信息:

我编写了一个方便的脚本来从命令行访问 SQLite 数据库,但我不太喜欢必须要输入“python SQLsap args”这样的命令,我更希望只需输入“SQLsap args”。我不知道这是否可能,但最好知道是否可以做到。这不仅适用于此程序。


你使用的是哪个操作系统? - Tim McNamara
嗯,就这个而言,我基本上只使用Unix。在Windows中实现同样的功能会很不错,但拥有世界和平也是不错的。Michael Dillon提供了在Windows中运行它的最佳可能答案。efritz的答案我已经成功实现了。我也把它放在了/usr/bin中,所以现在我可以随时通过键入SQLsap来使用它。非常好用。 - Narcolapser
6个回答

33

你可以在脚本的第一行加上一个shebang:

#!/usr/bin/env python

这会告诉您当前的Shell将命令馈送到脚本中。


14
请记得将文件标记为可执行文件。(在POSIX操作系统上,使用“chmod +x SQLsap”。) - Mike DeSimone
啊,原来是这样。我以前见过但从未知道。谢谢! - Narcolapser
1
另外,我想指出 /usr/bin/env 本身就是一个程序。它用于确定特定可执行文件的位置。如果您知道您的 Python 解释器在哪里(例如 /usr/bin/python),您可以简单地替换 shebang 以读取:#! /usr/bin/python。这同样适用于任何可执行命令 - Perl、Python、Bash 等。 - efritz
即使使用 #!/usr/bin/env python 和可执行权限,如果 Python 脚本出现错误会发生什么?在命令行中,我仍然需要在命令行开头提供 python - Thomas Matthew

5
你需要一个 shebang。将 #!/path/to/python 放在你的 Python 脚本的第一行。 #! 实际上是一个魔数,告诉操作系统将文件解释为指定程序的脚本。 你可以提供 /usr/bin/python 或者更具通用性的 /usr/bin/env python,它调用 /usr/bin/env 程序并告诉它你想要使用系统安装的 Python 解释器。
此外,你还需要将你的脚本放在路径中,否则你需要输入 ./SQLsap args

4

假设这是在Unix系统上,您可以在文件顶部添加一个"shebang",如下所示:
#!/usr/bin/env python

然后像这样设置可执行标志:
chmod +x SQLsap


3
另一种方法是将你的Python脚本打包。然后你只需要运行$ pip install package-name,然后在任何目录下简单地运行$ package-name就可以执行你的Python脚本了。
我建议使用这种方法,因为它使你能够快速共享/安装/使用/删除你的Python脚本。
我写了一个简单的脚本QuickPackage,只需输入Python脚本的路径即可立即创建和上传Python包。
举个例子:
$ pip install quickpackage

使用方法

使用方法非常简单,只需运行quickpackage并输入Python脚本的路径。

例如:

 quickpackage                                                    
Enter name: quickpackage
Enter version: 1.1
Enter description: Instantly create and upload python package for your script
Enter github url: https://github.com/yask123/quick-package
enter author: Yask Srivastava
Enter email: yask123@gmail.com
Path of python script file: run.py
running register
....
running upload
Submitting dist/quickpackage-1.1.tar.gz to https://pypi.python.org/pypi
Server response (200): OK

现在只需运行$ quickpackage(在这种情况下)即可执行您的脚本。


2
在Windows或DOS系统上,您可以通过将Python代码放入类似于以下方式的.BAT文件中来实现相似的效果。
rem = ''' this line interpreted by BAT and PYTHON
@REM BAT-ONLY code begins now inside PYTHON comment
@echo off
python "%~dpnx0" %*
goto :eof
@REM CMD-ONLY code ends
'''

import sys
print sys.path

很遗憾,我不能消除输出中的第一行消息,但您可以始终更改'''后面的文本,使其成为应用程序名称之类的内容,这样人们就不会注意到。

理想情况下,您不会在.BAT文件中放置大量Python代码,而是会导入一个.py文件,然后运行它的.__main__方法。


不错的技巧,但我认为官方解决方案是将Python脚本的扩展名与Python解释器关联起来。 - Piotr Dobrogost

1
在Unix中,您需要在脚本开头使用shebang行:
#!/usr/bin/env python

使文件可执行:
chmod +x arbitraryname

并将其放入您的PATH目录中(可以是符号链接):

cd ~/bin/
ln -s ~/some/path/to/myscript/arbitraryname

在Windows中,像*.py这样的文件默认情况下已经设置为使用python.exe打开。(如果没有,则可以手动设置。)因此,您可以直接在控制台中运行*.py文件。
请注意:
在Windows中,文本换行代码是"\r\n",但在Unix中是"\n"。如果您的Python脚本是Windows格式,则在Unix中执行会报告"找不到文件或目录"错误。 要修复此问题,只需在Unix中将所有"\r\n"替换为"\n"即可。

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