是否有可能在python shebang中包含命令行选项?

Mit*_*ops 9 python linux command-line

我在我的python脚本的顶部有规范的shebang.

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

但是,我仍然经常想在运行脚本时将无缓冲的输出导出到日志文件中,所以我最终调用:

$ python -u myscript.py &> myscript.out &
Run Code Online (Sandbox Code Playgroud)

我可以像这样在shebang中嵌入-u选项吗?

#!/usr/bin/env python -u
Run Code Online (Sandbox Code Playgroud)

并且只打电话:

$ ./myscript.py &> myscript.out &
Run Code Online (Sandbox Code Playgroud)

......仍然没有缓解?我怀疑这不起作用,并希望在尝试之前检查.有什么东西可以实现这一目标吗?

Bar*_*mar 12

你可以在shebang行上有参数,但大多数操作系统对参数的数量有一个非常小的限制.POSIX只需要支持一个参数,这很常见,包括Linux.

由于您正在使用该/usr/bin/env命令,因此您已经使用了该参数python,因此无法添加其他参数-u.如果你想使用python -u,你需要硬编码绝对路径python而不是使用/usr/bin/env,例如

#!/usr/bin/python -u
Run Code Online (Sandbox Code Playgroud)

看到这个相关的问题:如何使用shebang多个参数(即#!)?

  • 可能不是。这就是它一直以来的工作方式,而 POSIX 只是简单地标准化了现有的行为。即使他们更改了 POSIX,您也必须等待数年才能重新设计足够的实现,以便您可以便携地使用它。 (2认同)

use*_*194 9

自 coreutils 8.30 以来的新版本中,env-S此选项。引用自man env

\n
\n
   The -S option allows specifing multiple parameters in a script.  Running a script named 1.pl containing the follow\xe2\x80\x90\n  ing first line:\n\n         #!/usr/bin/env -S perl -w -T\n\n  Will execute perl -w -T 1.pl .\n\n  Without the '-S' parameter the script will likely fail with:\n\n         /usr/bin/env: 'perl -w -T': No such file or directory\n
Run Code Online (Sandbox Code Playgroud)\n
\n