无法通过 "#!/usr/bin/env python" 传递参数

95 投票
9 回答
30554 浏览
提问于 2025-04-16 01:40

我需要一个可以直接执行的Python脚本,所以我在文件开头加了 #!/usr/bin/env python。但是,我还需要输出不经过缓冲,所以我试着用 #!/usr/bin/env python -u,结果出现了 python -u: no such file or directory 的错误。

我发现 #/usr/bin/python -u 可以用,但我需要让 pythonPATH 中,这样才能支持虚拟 env 环境。

我还有哪些选择呢?

9 个回答

38

这可能有点过时,但env(1)的手册上说可以用'-S'来处理这种情况。

#!/usr/bin/env -S python -u

在FreeBSD上似乎效果很好。

45

在某些环境中,env 不会把参数分开。所以你的 env 正在路径中寻找 python -u。我们可以用 sh 来解决这个问题。把你的 shebang 替换成下面的代码,其他的就没问题了。

#!/bin/sh
''''exec python -u -- "$0" ${1+"$@"} # '''
# vi: syntax=python

补充一下,我们不需要担心 sh 的路径,对吧?

31

最好使用环境变量来启用这个功能。可以查看Python的文档了解更多信息:http://docs.python.org/2/using/cmdline.html

针对你的情况:

export PYTHONUNBUFFERED=1
script.py

撰写回答