我的python脚本顶部有规范的shebang。
#!/usr/bin/env python
但是,我仍然经常想在运行脚本时将无缓冲的输出导出到日志文件中,所以我最终调用:
$ python -u myscript.py &> myscript.out &
我可以像这样在shebang中嵌入-u选项......
#!/usr/bin/env python -u
并且只打电话:
$ ./myscript.py &> myscript.out &
......仍然没有缓解?我怀疑这不起作用,并希望在尝试之前检查。有什么能够实现这个目标吗?
答案 0 :(得分:11)
你可以在shebang行上有参数,但大多数操作系统对参数的数量有一个非常小的限制。 POSIX只要求支持一个参数,这很常见,包括Linux。
由于您正在使用/usr/bin/env
命令,因此您已经在使用python
的那个参数,因此您无法添加另一个参数-u
。如果您想使用python -u
,则需要将绝对路径硬编码为python
,而不是使用/usr/bin/env
,例如。
#!/usr/bin/python -u
请参阅此相关问题:How to use multiple arguments with a shebang (i.e. #!)?
答案 1 :(得分:3)
执行此操作的便携方法是创建另一个体现您选项的可执行文件。
例如,将此文件放在路径上并将其命名为upython
,并使其可执行:
#!/usr/bin/env bash
python -u -and -other -options "$@"
...使用您需要的任何选项。然后你的myscript.py
脚本就像这样:
#!/usr/bin/env upython
(... your normal Python code ...)
Torxed建议通过shell别名来做这件事。如果在任何版本的unix中都有效,我会感到非常惊讶。它在我刚测试的少数发行版中不起作用。我的方法适用于任何unix。
答案 2 :(得分:2)
在从 coreutils 8.30 开始的新版 [Unit]
Description=discord bots
After=multi-user.target
Conflicts=getty@tty1.service
[Service]
Type=simple
ExecStart=/usr/bin/python3.8 /home/myusername/bot/%i/%i.py
StandardInput=tty-force
[Install]
WantedBy=multi-user.target`enter code here`
中,有用于此的选项 env
。来自 -S
的引用:
man env