2013-12-13 32 views
2

我正在調用忍者c/C++構建系統的包裝腳本,腳本是在Python中,它應該做的一件事是記錄來自忍者和底層編譯器的輸出但沒有壓制標準輸出。從Python子進程複製終端輸出

給我麻煩的部分是Ninja似乎檢測到它正在寫入終端或不是,所以簡單地捕捉輸出並將其發送到標準輸出最終會改變它(最顯着的是,忍者不填充屏幕上顯示警告和錯誤構建文件列表,但刪除最後一個成功構建的翻譯單元的行,作爲新的一個)。有沒有辦法讓Ninja寫入終端,同時仍然捕獲輸出?寫入終端應該在忍者子進程運行時發生,但是捕獲所述輸出可能會等到子進程完成。

回答

3

pty.spawn()讓你的輸出記錄到文件中,而矇騙忍者子,以爲它的工作原理與終端(TTY):

import os 
import pty 

logfile = open('logfile', 'wb') 

def read(fd): 
    data = os.read(fd, 1024) 
    logfile.write(data) 
    return data 

pty.spawn("ninja", read)