为什么我的Python脚本在Linux中背景时不写入文件?

时间:2015-04-03 15:16:18

标签: python linux bash

我能做到:

python script.py > logfile 2>&1

一旦我使用ctrl c杀了它,我可以看到日志文件的更改。但是,当我这样做时:

python script.py > logfile 2>&1 &

我无法看到对日志文件的任何更改。如何设置我的脚本并仍然将其写入日志文件?

1 个答案:

答案 0 :(得分:9)

你的写作不会进入以太 - 他们正在缓冲。在正常关闭(SIGTERM,而不是SIGKILL)之后,您应该看到文件中的内容。

或者,您可以明确刷新:

sys.stdout.flush()

...或告诉Python以无缓冲模式运行:

python -u yourscript.py

或使用

启动脚本
#!/usr/bin/python -u

...确保内容被写入。当然,这会导致性能下降,因为您的脚本会尝试更频繁地执行IO。


(另外,#!/usr/bin/env python -u 不能保证工作:只保证命令名和单个参数从shebang行传递到运行的命令;您的操作系统可能会或可能不会获得更多的荣誉)。