【问题标题】:Write background command output (stdout) to file during execution在执行期间将后台命令输出(stdout)写入文件
【发布时间】:2019-07-20 09:49:22
【问题描述】:

我有一个需要很长时间的命令,我喜欢像这样在后台运行:

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

这非常有效,因为该命令确实在后台,我可以稍后检查输出和潜在错误。

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

所以目前日志是空的,然后在 08:30 突然出现两行:

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

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

【问题讨论】:

  • thisthis 帖子。我猜在 mac 管道中不做缓冲,因为我得到了实时输出。所以无法测试。
  • 你能告诉我们你是如何从 python 打印的吗?如果我记得有些电话被缓冲了,你可能不得不打电话给sys.stdout.flush()
  • 我使用常规的print() 语句。缓冲确实是问题所在,您的解决方案也可能有效。

标签: python linux bash stdout


【解决方案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

【讨论】:

  • 简单有效的答案,谢谢。在我的系统上适用于 Python 3.5 和 3.7。
猜你喜欢
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 2016-04-11
  • 2017-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多