넌
terminate
D 프로세스
, 결코 플러시/그것으로 입력 닫혀 있으므로 모든 데이터가 버퍼에 부착하고, 처리가 강제로 사망 할 때 버렸다. 프로세스가 완료 될 때까지 당신은 입력을 전달 stdin
을 종료 한 후 대기 결합 communicate
를 사용할 수 있습니다
import subprocess
with open('outfile.out', 'w') as out:
pp=subprocess.Popen(['/bin/cat'],stdin=subprocess.PIPE,stdout=out)
pp.communicate('Line I want into out file\n')
을이 경우 (단지 세 가지 표준 핸들 중 하나는 파이프가), 당신은 또한 안전이 작업을 수행 할 수 있습니다 :
만
PIPE
으로 하나의 표준 핸들을 사용하는 경우에만 수행해야
import subprocess
with open('outfile.out', 'w') as out:
pp=subprocess.Popen(['/bin/cat'],stdin=subprocess.PIPE,stdout=out)
pp.stdin.write('Line I want into out file\n')
pp.stdin.close()
pp.wait() # Optionally with a timeout, calling terminate if it doesn't join quickly
; 두 개 이상이 PIPE
인 경우 데드락 (자식이 stdout에 쓰고 버퍼를 지우려면 읽기를 기다리고 버퍼를 지우려면 자식이 기다리는 동안 stdin에 쓰는 중입니다) 이 해결합니다. 스레드 또는 선택 모듈을 사용하면 교착 상태를 피하기 위해 해당 디자인을 모방해야합니다.
'pp.join()'대신'pp.wait()'('multiprocessing'가 아닌'subprocess')를 사용하십시오. ('subprocess32' 모듈을 사용하지 않는 한) Python 2.7에는'timeout' 매개 변수가 없습니다. – jfs
@ J.F.Sebastian :'wait' 대'join' 비트를 수정했습니다; 'timeout'이 사용 가능할 때 주석이 명확해질 수 있습니다. – ShadowRanger