私のコードで奇妙なIOError [Errno 4] Interrupted system call
.
以下の例はダミーですが、(少なくとも私の 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
このようなエラーが発生する理由と、それを防ぐ方法を教えてください。