使用python的多个屏幕

时间:2014-03-25 01:56:25

标签: python python-multithreading

我有一个运行两个大进程的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应该在另一个屏幕上运行以查看正在运行的日志,易于理解和调试。有可能??

1 个答案:

答案 0 :(得分:2)

如果你不能改变打印输出的位置,并且它必须是stdout,那么这是不可能的,因为流将以交错的方式在stdout缓冲区中排队,并且无法区分哪个文本来自哪个流。

如果你真的希望在不同屏幕上实时看到两个不同流的输出,你可以在文件上写下第二个输出(或两个不同的文件),比如output2.txt,然后在另一个文件上终端,使用tail -f从该文件中进行实时读取。

从手册页:

  

-f选项导致tail在到达文件结尾时不停止,而是等待将其他数据附加到输入。 -f选项                如果标准输入是管道,则忽略,但如果它是FIFO,则忽略。

因此,假设您将两个流出写入两个不同的文件output1.txtoutput2.txt,您可以按以下方式运行脚本:

屏幕1:

python script.py

屏幕2(用于查看线程1的输出):

tail -f output1.txt

屏幕3(用于查看线程2的输出):

tail -f output2.txt

或者,如果您一次只选择两个活动屏幕,则可以将第一个线程输出输出到标准输出。

P.S。:实际上你没有两个进程,而是两个线程。这是两件不同的事情,不要混淆起来。