2014-03-25 24 views
0

我有一個運行兩個大進程的Python腳本,當我運行它們都被觸發並在相同的標準輸出產生輸出。我所尋找的是,我想打印出來什麼需要我爲P1應該在一個屏幕和P2運行應該在另一個屏幕上運行不同的標準輸出(可能是處理1在屏幕2屏幕截圖1和prrocess2)使用Python的多個屏幕

#main.py 
def proc1(): 
    #do something 
def proc2(): 
    #do something 
p1 = threading.Thread(target=proc1) 
p2 = threading.Thread(target=proc2) 
p1.start() 
p2.start() 

用於查看運行日誌,便於理解和調試。可能嗎??

回答

2

如果您不能更改打印輸出的位置,並且它必須是stdout,那麼這是不可能的,因爲流將以交織方式在stdout緩衝區中排隊,並且無法區分哪些文本來自哪個流。

如果你真的想要在不同屏幕上看到兩個不同流的實時輸出,你可以在一個文件上寫第二個輸出(或者在不同的文件中),比如output2.txt,然後在另一個終端上使用tail -f從該文件進行實時讀取。

從手冊頁:

-f選項使尾部到達文件的末端時,沒有停止,而是要等待更多的數據添加到輸入。如果標準輸入是管道,則忽略-f選項 ,但如果它是FIFO,則不會被忽略。

因此,假設你寫兩個outstreams成兩個不同的文件,output1.txtoutput2.txt,您可以通過以下方式運行該腳本:

畫面1:

python script.py 

屏幕2(用於查看線程1的輸出):

tail -f output1.txt 

屏幕3(用於查看線程2的輸出):或者,如果您一次只選擇兩個活動屏幕,則只需將第一個線程輸出輸出到標準輸出中即可。

P.S .:實際上你沒有兩個進程,而是兩個線程。這是兩件不同的事情,不要混淆。

+0

是否有可能通過python進程?此外,這個尾巴-f是否有可能使其自動化? – rajpython

+0

你是什麼意思「通過Python進程」?通過自動化,你真的明白你的意思嗎?這意味着當你運行這個腳本時,你機器上的另一個隨機終端會突然顯示出一連串的輸出。在運行腳本之前,需要首先在另一個屏幕上運行'tail -f'命令(首先創建一個具有相同名稱的空文件)。 – justhalf