2013-06-18 61 views
4

我運行在Linux服務器上一個python腳本nohup的那樣:nohup和python沒有錯誤信息?

nohup python3 ./myscript.py > ./mylog.log & 

它的工作原理和腳本寫入日誌文件,但問題是,蟒蛇錯誤消息/似乎拋出的異常並沒有得到書面到日誌文件中。我怎麼能做到這一點?

這與stderr有什麼關係? (但它說:「nohup:當我啓動腳本時將stderr重定向到標準輸出」)。

這是一個長時間運行的腳本,經過一段時間,有時腳本會因爲某些問題而停止工作,並且缺少錯誤消息不知道爲什麼。這些問題總是在幾天後發生,所以這實際上是一個調試的痛苦。

編輯: 它可能與沖洗有關嗎?由於我自己的打印文件使用flush,但是可能python錯誤不會在腳本中止後不會顯示在文件中?

回答

7

我找到了原因。這真的是緩衝問題(請參閱我上面的編輯)。 :)

nohup python3 -u ./myscript.py > ./mylog.log & 

使用python -u參數它的工作原理。它禁用緩衝。

現在我可以去缺陷尋找...

+0

我使用http://unix.stackexchange.com/questions/45913/is-there-a-way-to-redirect-nohup-output-to-a-- log-file-other-than-nohup-out來分割標準輸出和stderr,但我想這是行不通的,因爲你的同樣的問題與無緩衝的標誌https://docs.python.org/2/using/cmdline.html#cmdoption-u – Cyrille

+0

這種解決方案並不總是工作, [見這裏](http://stackoverflow.com/questions/34753765/nohup-and-python-u-it-still-doesnt-log-data-in-realtime)。 – Basj

1

你只是重定向標準輸出。錯誤消息在stderr上給出。重新運行你的腳本是這樣的:

nohup python3 ./myscript.py &> ./mylog.log & 

&>重定向所有的輸出(stdout和stderr)到你的日誌文件。

+0

現在它說:「nohup的:追加輸出‘的nohup.out’」和mylog.log並不習慣。錯誤仍然不顯示。 – horace