2012-03-08 121 views
4

我有一個簡單的腳本,它打印一些信息到控制檯,怪異的行爲

#!/usr/bin/python 
import sys 
print >>sys.stdout, "1 stdout" 
print >>sys.stderr, "2 stderr" 

正常順序,

[[email protected]:codes]$ ./x.py 
1 stdout 
2 stderr 

[[email protected]:codes]$ ./x.py 2>&1 
1 stdout 
2 stderr 

錯誤的順序輸出,

[[email protected]:codes]$ ./x.py &>x.txt 
[[email protected]:codes]$ cat x.txt 
2 stderr 
1 stdout 
[[email protected]:codes]$ ./x.py 2>&1 | tee x.log 
2 stderr 
1 stdout 

看來加入sys.stdout.flush()可以解決問題,有沒有辦法強制消息序列(要紅色直接輸出/錯誤到一個文件)而不改變腳本?

回答

4

您可以使用-u標誌運行python以強制stdin,stdout和stderr無緩衝。這樣做會有性能損失。最好在任何時候進行明確的.flush()操作,因爲它更有效率,並且因爲它使你的意圖顯而易見(「這應該立即可見!」)。

+0

很酷,我永遠不知道有這樣的選擇。謝謝! – 2012-03-08 15:01:53