【发布时间】:2020-07-09 18:53:48
【问题描述】:
我有一个脚本,它使用 tqdm 为冗长的处理工作流程制作多个进度条。由于这个过程很长,我在 Linux 中使用“screen”命令将它作为一个分离的进程运行。我通过类似于以下的命令将输出保存到日志文件:
screen -dm -L sh -c 'python3 myscript.py'
因为输出还会包含一些对事后分析很有价值的报告。
但问题是屏幕上的输出日志文件被许多增量重新打印的加载条严重污染。但我确实喜欢能够在终端中重新附加该进程,以便我可以间歇性地监控它的进度。所以我不想完全放弃 tqdm。
有没有办法在事后抑制日志文件中的 tqdm 输出,同时在运行时仍然显示“实时”?
【问题讨论】:
-
您可以将主要输出写入标准输出,并让 tqdm 写入标准错误。然后仅将标准输出重定向到文件(参见例如
tee)。添加为评论,因为我不知道如何让 tqdm 使用标准错误。顺便说一句,我认为您可以从您的问题中删除screen并且它不会改变本质。 -
@Norrius 你是对的,我发现 tqdm 默认使用标准错误,可能正是这种情况。因此,只需在屏幕上运行
tee中的命令即可获得所需的效果(例如screen -dm -L sh -c 'python3 myscript.py | tee out.log | less')。如果您想发布此提示作为答案,我会接受。 -
我很高兴听到它成功了!随意发布答案(并接受它),这完全可以。也许它会在未来对其他人有所帮助。
标签: python gnu-screen tqdm