我無法弄清楚爲什麼在我的代碼中我得到一個奇怪的IOError [Errno 4] Interrupted system call
。防止IOError:[Errno 4]中斷系統調用
下面這個例子是一個虛擬的,但它可以(至少在我的Linux筆記本電腦),以重現錯誤:
import subprocess as sp
def dummyfun():
p1 = sp.Popen(['ls','-lah'], stderr=sp.STDOUT, stdout=sp.PIPE, close_fds=True)
p2 = sp.Popen(['grep','.'],stdin=p1.stdout, stdout=sp.PIPE, close_fds=True)
p1.stdout.close()
return p2.stdout
def dummyfun2(fo):
for l in fo:
print l,
def dummyfun3():
fo = dummyfun()
dummyfun2(fo)
fo.close()
調用dummyfun3
基本上在屏幕上只打印所有文件蒙山列表一個點在他們的名字(在我的情況下,我在一個文件夾中有大約100個文件,並且它們都有一些擴展名,因此也是一個點)。
如果我將該函數稱爲dummyfun3()
,它就可以工作。
但是,如果我把它在像一個循環:
for i in range(1000):
dummyfun3()
幾次迭代的代碼停止後(通常i
是在5和15之間)顯示以下錯誤消息:
<ipython-input-213-a47ea086386d> in <module>()
1 for i in range(1000):
----> 2 dummyfun3()
3
<ipython-input-205-21366f183162> in dummyfun3()
1 def dummyfun3():
2 fo = dummyfun()
----> 3 dummyfun2(fo)
4 fo.close()
5
<ipython-input-204-1c08d906020b> in dummyfun2(fo)
1 def dummyfun2(fo):
2 for l in fo:
----> 3 print l,
4
IOError: [Errno 4] Interrupted system call
爲什麼會出現這樣的錯誤,我怎樣才能防止它呢?
適合我':-('Linux(32或64),Python 2.7,在一個包含115個文件的目錄中。你確定錯誤發生在'print l'行嗎?看起來更像是一個ipython bug 。它是否在命令行工作? –
你是正確的..使用python2.7而不是ipython它工作正常...所以這意味着我的代碼是正確的,對吧? – lucacerone
是的,你的代碼是好的。不好,因爲它看起來像ipython中的一些錯誤,或者一些其他虛假的交互。你應該嘗試ipython的最新開發版本,如果它仍然失敗,報告它作爲一個錯誤,我會說。 –