當前位置:股票大全官網 - 股票行情 - Python有破管錯誤?

Python有破管錯誤?

今天寫Python2程序遇到了壹個問題。為了說明這個問題,我用下面的代碼寫了壹個演示程序:

導入系統

對於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命令是寫完管道後關閉管道,所以不會有這個問題。