在后台运行程序并实时将其输出重定向到文件

Dou*_* Su 13 python bash redirect background-process

我想在一个bash会话中同时运行几个python脚本,并分别实时检查它们的输出.为了完成这个任务,我写了一个简单的bash脚本,如下所示:

#!/bin/bash
python 1.py > 1.output &
python 2.py > 2.output &
python 3.py > 3.output &
Run Code Online (Sandbox Code Playgroud)

但是,当我使用cat 1.output命令检查在执行过程中打印的内容时,看不到任何内容.

经过一段时间的思考,我意识到1.output必须在1.py完成执行时填写.换句话说,我在这里使用的方法不是real time时尚.

您可能会建议等待这些python脚本完成.不幸的是,事实上所有python脚本实际上都是长期运行的程序,它们可能在几天或几个月后完成,这就是我想要实时检查它们的输出的原因.

此外,您可能建议我修改python脚本以直接将消息打印到文件而不是stdout.对不起,这里的脚本太复杂了,无法修改,其中有很多print功能.

我现在能做什么?

Rob*_*obᵩ 32

-u开关和等效PYTHONUNBUFFERED环境变量的力量标准输出进行缓冲.试试这个:

#!/bin/bash
python -u 1.py > 1.output &
python -u 2.py > 2.output &
python -u 3.py > 3.output &
Run Code Online (Sandbox Code Playgroud)

要么

#!/bin/bash
export PYTHONUNBUFFERED=yes
python 1.py > 1.output &
python 2.py > 2.output &
python 3.py > 3.output &
Run Code Online (Sandbox Code Playgroud)

请注意,-u有副作用:阅读文档以了解更多信息.

参考: