我有一个运行两个大进程的python脚本,当我运行它们时,它们都被触发并在同一个stdout中产生输出。我要找的是,我想在不同的标准输出中打印它们(可能是screen1中的process1和screen2中的process2)
#main.py
def proc1():
#do something
def proc2():
#do something
p1 = threading.Thread(target=proc1)
p2 = threading.Thread(target=proc2)
p1.start()
p2.start()
我需要的是p1应该在一个屏幕上运行,p2应该在另一个屏幕上运行,以查看运行日志,易于理解和调试。这可能吗?
如果你不能改变输出的位置,而它必须是标准输出,那么这是不可能的,因为流将以交错的方式在标准输出缓冲区中排队,并且没有办法区分哪个文本来自哪个流。
如果你真的想在不同的屏幕上看到两个不同流的实时输出,你可以在一个文件上写第二个输出(或者两个都在不同的文件上),比如output2.txt
,然后在另一个终端上,使用tail -f
从那个文件进行实时读取。
从手册页:
因此,假设您将两个输出写入两个不同的文件-f选项导致tail在到达文件末尾时不停止,而是等待附加到输入的其他数据。-f选项如果标准输入是管道,则忽略,但如果是FIFO则不忽略。
output1.txt
和output2.txt
,您可以以以下方式运行脚本:
屏幕1:python script.py
屏幕2(用于查看线程1的输出):
tail -f output1.txt
屏幕3(用于查看线程2的输出):
tail -f output2.txt
或者,如果您希望一次只有两个活动屏幕,您可以只将第一个线程输出输出到标准输出中。
注:实际上,你不是有两个进程,而是有两个线程。这是两码事,不要混淆。