我能做到:
python script.py > logfile 2>&1
一旦我使用ctrl c杀了它,我可以看到日志文件的更改。但是,当我这样做时:
python script.py > logfile 2>&1 &
我无法看到对日志文件的任何更改。如何设置我的脚本并仍然将其写入日志文件?
答案 0 :(得分:9)
你的写作不会进入以太 - 他们正在缓冲。在正常关闭(SIGTERM,而不是SIGKILL)之后,您应该看到文件中的内容。
或者,您可以明确刷新:
sys.stdout.flush()
...或告诉Python以无缓冲模式运行:
python -u yourscript.py
或使用
启动脚本#!/usr/bin/python -u
...确保内容被写入。当然,这会导致性能下降,因为您的脚本会尝试更频繁地执行IO。
(另外,#!/usr/bin/env python -u
不能保证工作:只保证命令名和单个参数从shebang行传递到运行的命令;您的操作系统可能会或可能不会获得更多的荣誉)。