문제

의사소통으로 인해 내 프로세스가 종료되는 이유는 무엇입니까?나는 대화형 프로세스를 원하지만 의사소통은 내 프로세스에서 더 이상 raw_input을 사용할 수 없도록 뭔가를 합니다.

from sys import stdin 
from threading import Thread
from time import sleep

if __name__ == '__main__':
    print("Still Running\n")
    x = raw_input()    
    i = 0
    while ('n' not in x ) :
        print("Still Running " + str(i) + " \r\n")
        x = raw_input()
        i += 1

    print("quit")



print(aSubProc.theProcess.communicate('y'))
print(aSubProc.theProcess.communicate('y'))

예외!

self.stdin.write(input)
ValueError: I/O operation on closed file
도움이 되었습니까?

해결책

communicate 그리고 wait 방법 Popen 개체, 닫기 PIPE 프로세스가 반환된 후.프로세스와의 통신을 유지하려면 다음과 같이 시도하십시오.

import subprocess
proc = subprocess.Popen("some_process", stdout=subprocess.PIPE, stdin=subprocess.PIPE)
proc.stdin.write("input")
proc.stdout.readline()

다른 팁

왜 통신이 내 과정을 죽이는가?

Popen.communicate(input=None, timeout=None) :

프로세스와 상호 작용 : stdin으로 데이터를 보냅니다. stdout 및


에서 데이터를 읽으십시오 stderr, 파일 끝까지 도달 할 때까지. 프로세스가 종료 될 때까지 기다리십시오. 광산을 강조

.communicate()를 한 번만 호출 할 수 있습니다. 즉, 모든 입력을 한 번에 제공해야합니다.

#!/usr/bin/env python
import os
import sys
from subprocess import Popen, PIPE

p = Popen([sys.executable, 'child.py'], stdin=PIPE, stdout=PIPE)
print p.communicate(os.linesep.join('yyn'))[0]
.

출력

Still Running

Still Running 0 

Still Running 1 

quit
.

두 배로 된 개발량은 다음과 같습니다. '\r\n'에서 하나는 자식 프로세스를위한 스크립트에서 Per print 문장에서 하나입니다.

출력은 하위 프로세스가 3 개의 입력 라인을 성공적으로 수신했음을 보여줍니다 ('y', 'y''n').

여기에 subprocess.check_output() input 매개 변수를 사용하여 유사한 코드가 있습니다. Python3.4에서 :

#!/usr/bin/env python3.4
import os
import sys
from subprocess import check_output

output = check_output(['python2', 'child.py'], universal_newlines=True,
                      input='\n'.join('yyn'))
print(output, end='')
.

동일한 출력을 생성합니다.


하위 프로세스의 응답에 따라 다른 입력을 제공하려면 pexpect 모듈 또는 해당 아날로그를 사용하여 파이프 (Popen ()) 만 사용하지 않는 이유는 무엇입니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top