我想在一个bash会话中同时运行多个python脚本,并分别实时检查其输出。为了完成此任务,我编写了一个简单的bash脚本,如下所示:
#!/bin/bash
python 1.py > 1.output &
python 2.py > 2.output &
python 3.py > 3.output &
但是,当我使用cat 1.output
命令检查执行过程中已打印的内容时,什么也看不到。
经过一会儿的思考,我意识到1.output
必须在1.py
执行完成时填充。换句话说,我在这里使用的方法不是real time
时尚。
您可能会建议等待这些python脚本完成。不幸的是,事实是那里所有的python脚本实际上都是长期运行的程序,它们可能会在几天或几个月后完成,这就是为什么我要实时检查它们的输出。
另外,您可能建议我修改python脚本以将消息直接打印到文件而不是stdout
。抱歉,这里的脚本太复杂而无法修改,其中包含很多print
功能。
我现在能做什么?
该-u
开关和等效PYTHONUNBUFFERED
环境变量的力量标准输出是缓冲。试试这个:
#!/bin/bash
python -u 1.py > 1.output &
python -u 2.py > 2.output &
python -u 3.py > 3.output &
要么
#!/bin/bash
export PYTHONUNBUFFERED=yes
python 1.py > 1.output &
python 2.py > 2.output &
python 3.py > 3.output &
请注意-u
有副作用:请阅读文档以了解更多信息。
参考:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句