Python 하위 프로세스 통신으로 인해 내 프로세스가 종료됩니다.
-
21-12-2019 - |
문제
의사소통으로 인해 내 프로세스가 종료되는 이유는 무엇입니까?나는 대화형 프로세스를 원하지만 의사소통은 내 프로세스에서 더 이상 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 ()) 만 사용하지 않는 이유는 무엇입니까?
제휴하지 않습니다 StackOverflow