在执行期间将后台命令输出(stdout)写入文件

时间:2019-07-20 09:49:22

标签: python linux bash stdout

我有一个需要很长时间才能在后台运行的命令,如下所示:

python3 script.py -f input.key -o output >> logs/script.log 2>&1 &

在命令确实在后台的意义上,这可以很好地工作,以后我可以检查输出和潜在的错误。

主要问题是仅在命令完全完成后才附加输出,而我希望拥有最新的日志消息,因此我要检查进度。

因此,当前日志将为空,然后突然在08:30出现两行:

[08:00] Script starting...
[08:30] Script finished!

相反,我想在命令完全完成之前将输出保存到文件中。

1 个答案:

答案 0 :(得分:1)

由于您正在调用Python脚本,因此需要使用-u选项,该选项将强制stdoutstderr流不被缓冲。

$ python3 -u script.py -f input.key -o output >> logs/script.log 2>&1 &

您可以定期使用cat或结合watch实时查看日志:

$ watch cat logs/script.log

https://docs.python.org/3.7/using/cmdline.html#cmdoption-u