我无法弄清楚为什么在我的代码中我得到一个奇怪的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的最新开发版本,如果它仍然失败,报告它作为一个错误,我会说。 –