2013-11-27 11 views
1

我編寫了一個python腳本,其中有幾個print語句。打印的信息可以幫助我監視腳本的進度。但是,當我將包含python my_script &> output的bash腳本qsub添加到計算節點時,即使腳本正在運行並打印某些內容,輸出文件也不會包含任何內容。輸出文件將在腳本完成時包含輸出。所以當腳本運行時,如何通過輸出文件實時獲取輸出。輸出文件在腳本完成前不包含任何內容

+0

http://mywiki.wooledge.org/BashFAQ/009 – tripleee

回答

4

實際上寫入文件而不是在每次寫入之後或每次寫入後調用管道和刷新sys.stdout.flush()但您最好使用記錄器功能並用日誌替換打印件。

從評論: 記錄程序的功能是一個你打電話,而不是打印,將輸出到某個地方的文本,可能時間戳和其他信息,他們通常讓你輸出的各種大量的信息,以各種目的地,包括標準輸出和文件。請參閱python 23文檔以獲取有關構建在日誌記錄功能中的python的信息。

+0

嗨,史蒂夫,謝謝你的回覆。但我不明白記錄器功能的一部分。什麼是記錄器功能? – Negelis

+1

記錄器功能是您調用的而不是打印的功能,它可以輸出到文本的某個地方,可能是時間戳和其他信息,它們通常允許您將各種數量的信息輸出到各種目標,包括標準輸出和文件。請參閱http://docs.python.org/2/library/logging.html或http://docs.python.org/3.3/library/logging.html以獲取有關在日誌中構建的pythons的信息。 –

0

我喜歡將數據寫入sys.stderr,有時候會出現這種情況。它避免了沖洗這麼多的需要。但是如果你有時候會爲管道生成輸出,那麼使用sys.stdout會更好。