2010-08-18 77 views
11

我在python中打印語句。我執行我的腳本如下所示:Python打印語句被緩衝>輸出重定向

python script.py > out.log nohup & 

打印語句並不都是沒有顯示在out.log但該計劃被整理好。

這行代碼是在.sh文件 我做./script.sh

更新執行:日誌確實讓所有但直到行的某些#的打印數據。它似乎在緩衝輸出。

回答

23

當stdout發送到tty時,它會被行緩衝,並且每一行都會被刷新,但是當重定向到一個文件或管道時,它將被完全緩衝,並且只會在您溢出緩衝區時被週期性刷新。

如果您希望輸出立即可見,或者完全禁用緩衝,則必須在每行之後添加sys.stdout.flush()調用。見Disable output buffering的方式做後者:

  1. 使用-u命令行開關
  2. sys.stdout在刷新後,每寫一個對象
  3. 設置PYTHONUNBUFFERED的環境變量
  4. sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
1

你嘗試:

  1. 沒有重定向運行,並確保一切都如預期
  2. 運行它不是通過shell腳本被打印出來,而只是從一個命令行

這些步驟可能會幫助您「迴歸」問題。

+0

感謝您的支持 – user420814 2010-08-18 19:18:10

+0

#1和#2都按預期工作 – user420814 2010-08-18 19:24:38