導入系統
對於sys.stdin中的行:
print line.strip('\n ')
這個演示程序的功能是從標準輸入中讀取內容,並將其輸出到標準輸出。當以下列方式使用它時,程序將報告壹個錯誤:
ps -elf | python測試_pipe.py | head -n 10
錯誤內容如下:
回溯(最近壹次呼叫):
文件“test_pipe.py ”,第6行,在& lt模塊& gt
print line.strip('\n ')
IOError: [Errno 32]管道破裂
將head命令更改為tail命令不會產生錯誤。
我在網上搜了壹下,找到了解決辦法。解決方案如下:
導入系統
從信號導入信號,SIGPIPE,SIG_DFL
#告訴python忽略SIGPIPE信號,不拋出異常。
信號(信號管道,信號DFL)
對於sys.stdin中的行:
print line.strip('\n ')
之所以會出現這個問題,是因為當head程序從管道的壹端讀取到足夠的數據時,就會關閉管道,而python程序在管道的另壹端正在寫,所以python程序會收到SIGPIPE信號,使程序異常退出。tail命令是寫完管道後關閉管道,所以不會有這個問題。