파이썬 subprocess
모듈과 communicate()
메소드를 사용할 때 종료 코드를 어떻게 검색 합니까?
관련 코드 :
import subprocess as sp
data = sp.Popen(openRTSP + opts.split(), stdout=sp.PIPE).communicate()[0]
다른 방법으로해야합니까?
답변
Popen.communicate
returncode
완료되면 속성 을 설정합니다 (*). 관련 문서 섹션은 다음과 같습니다.
Popen.returncode
The child return code, set by poll() and wait() (and indirectly by communicate()).
A None value indicates that the process hasn’t terminated yet.
A negative value -N indicates that the child was terminated by signal N (Unix only).
그래서 당신은 할 수 있습니다 (테스트하지는 않았지만 작동해야합니다).
import subprocess as sp
child = sp.Popen(openRTSP + opts.split(), stdout=sp.PIPE)
streamdata = child.communicate()[0]
rc = child.returncode
(*) 이것은 구현 방식으로 인해 발생합니다. 자식 스트림을 읽기 위해 스레드를 설정 한 후을 호출합니다 wait
.
답변
먼저 프로세스 실행이 완료되었고 .wait
메소드를 사용하여 리턴 코드를 읽었는지 확인해야합니다 . 코드가 반환됩니다. 나중에 액세스 .returncode
하려면 Popen
객체 와 같이 저장됩니다 .
답변
.poll()
리턴 코드를 업데이트합니다.
시험
child = sp.Popen(openRTSP + opts.split(), stdout=sp.PIPE)
returnCode = child.poll()
또한 after .poll()
를 호출하면 객체에서로 코드를 사용할 수 있습니다 child.returncode
.
답변
exitcode = data.wait()
. 하위 프로세스가 표준 출력 / 오류에 쓰거나 표준 입력에서 읽거나 피어가없는 경우 차단됩니다.
답변
이것은 나를 위해 일했습니다. 또한 자식 프로세스가 반환 한 출력을 인쇄합니다
child = subprocess.Popen(serial_script_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
retValRunJobsSerialScript = 0
for line in child.stdout.readlines():
child.wait()
print line
retValRunJobsSerialScript= child.returncode