Я не могу понять, почему в моем коде я получаю странное 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
Почему такая ошибка и как ее предотвратить?
:-(
Linux (32 или 64), Python 2.7, в каталоге 115 файлов. Вы уверены, что ошибка возникает в строкеprint l,
? Это больше похоже на ошибку ipython. Это работает в командной строке? - person Armin Rigo   schedule 02.08.2013