2013-08-02 3 views
2

코드에 이상한 문자가 나타나는 이유를 모르겠습니다. IOError [Errno 4] Interrupted system call.IOError 방지 : [Errno 4] 시스템 호출이 끊어졌습니다.

아래의 예는 더미 하나이지만, 그것은 오류 재현 (적어도 내 리눅스 노트북에) 수 :

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()이라고 부르는 경우 그냥 작동합니다. I 같은 루프를 호출하지만 경우

:

<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 

: 코드 중지 몇 번 반복 후

for i in range(1000): 
    dummyfun3() 

다음 오류 메시지를 디스플레이 (일반적 i 5와 15 사이) 왜 그런 오류가 있으며 어떻게 방지 할 수 있습니까?

+0

Works for me':-(Linux (32 또는 64), Python 2.7, 115 개 파일이있는 디렉토리에 있습니다.)'print l '행에 오류가 발생했는지 확인하십시오. ipython 버그와 비슷합니다. . 명령 줄에서 작동합니까? –

+0

당신은 맞습니다 .. ipython 대신 python2.7로 작업하면 문제가 없으므로 내 코드가 정확하다는 의미입니다. – lucacerone

+0

예, 코드는 괜찮습니다. 나쁜 ipython, 또는 다른 가짜 상호 작용에 보이는 몇 가지 버그 때문에 ipython의 최신 개발 버전을 시도해야하며, 여전히 실패하면, 버그로보고, 나는 말하고 싶지만. –

답변

1

print l, 라인에서 오류가 발생합니다. ipython 버그와 유사합니다. 이미 코멘트에서 말했듯이, 그것은 명령 행에서 작동합니다. ipython의 최신 개발 버전을 사용해보고, 여전히 실패한 경우 버그로보고하십시오.

0

여기 IPython 개발자가 있습니다. IPython 버그 일 가능성은 희박합니다. 최소한 마스터 나 0.13.2 (64 비트 Debian/sid)에서 재현 할 수는 없습니다. 루카는 이것을 issue #3884으로 신고 했으므로 거기에서 어디로가는 지 볼 수 있습니다.

+0

감사합니다. 버그 추적 시스템에서 대답 할 때 조언을 따라 --pylab 옵션을 사용하여 실행될 때만 문제가 발생한다는 것을 알았습니다. – lucacerone