我有一个运行两个大进程的python脚本,当我运行它们时,它们都被触发并在同一个标准输出中生成输出。我想要的是,我想在不同的stdout中打印它们(可能是screen1中的process1和screen2中的prrocess2)
#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应该在另一个屏幕上运行以查看正在运行的日志,易于理解和调试。有可能??
答案 0 :(得分:2)
如果你不能改变打印输出的位置,并且它必须是stdout,那么这是不可能的,因为流将以交错的方式在stdout缓冲区中排队,并且无法区分哪个文本来自哪个流。
如果你真的希望在不同屏幕上实时看到两个不同流的输出,你可以在文件上写下第二个输出(或两个不同的文件),比如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
或者,如果您一次只选择两个活动屏幕,则可以将第一个线程输出输出到标准输出。
P.S。:实际上你没有两个进程,而是两个线程。这是两件不同的事情,不要混淆起来。