如何运行Python脚本而不输入'python ...

51 投票
5 回答
69129 浏览
提问于 2025-04-16 11:48

我想在我的命令行中运行一个Python脚本,而不需要每次都手动输入“python”。我试过在脚本开头加上“#!/path/to/python”,但好像没什么用。有没有人知道有什么解决办法?非常感谢。

5 个回答

3
  1. 在你的脚本最上面加一行:

    #! /usr/bin/env python
    
  2. 把你的脚本名字从 script_name.py 改成 script_name
  3. 让这个脚本可以执行:chmod +x script_name

最上面那一行的作用是选择你在命令行输入 python 时所用的同一个 python。你也可以指定一个直接的路径:

#!/opt/python/3.6/bin/python
7

这段话其实跟你个人的脚本关系不大,但因为你提到了 beets,我想告诉你,实际上在发布你的软件包时,可以通过一些工具来自动化这个过程。这个工具叫做 setuptools 的 entry_point 选项。
举个例子,如果你要发布一个叫 myModule 的软件包,并希望用户在控制台输入 mymodulescript 就能直接使用 main_function() 这个函数,你可能需要在你的 setup.py 文件里加上类似下面的内容:

setup(
    # your other arguments ..
    entry_points={
        'console_scripts': [
            'mymodulescript = myModule:main_function'
        ]
    }
)
115

你需要在脚本的开头加上一个特殊的标记,叫做shebang:

#!/usr/bin/env python

接着,要把这个脚本设置为可执行的,也就是让它可以被运行:

chmod +x foo

然后你就可以像运行其他可执行文件一样来运行它了:

./foo

还有一点要注意:如果你是在Windows上编辑这个文件,然后在Linux上运行它,可能会遇到一个很奇怪的错误,提示“没有这样的文件或目录”。这个问题是因为文件的行结束符不对,Windows用的是CRLF,而Linux用的是LF。如果你把它们转换成LF格式,脚本就能正常运行了。你可以在Notepad++中通过选择 > 查看 > 显示符号 > 显示行结束符来查看这些行结束符。然后通过Notepad++ > 编辑 > 行结束符转换 > Unix格式来把所有的行结束符转换成LF格式。或者,你也可以使用一个叫做 dos2unix 的工具(例如 dos2unix foo.py),这个工具在大多数Linux系统上都可以找到。

撰写回答