[python] Python 하위 프로세스 통신 방법을 사용할 때 종료 코드를 얻는 방법은 무엇입니까?

파이썬 subprocess모듈과 communicate()메소드를 사용할 때 종료 코드를 어떻게 검색 합니까?

관련 코드 :

import subprocess as sp
data = sp.Popen(openRTSP + opts.split(), stdout=sp.PIPE).communicate()[0]

다른 방법으로해야합니까?



답변

Popen.communicatereturncode완료되면 속성 을 설정합니다 (*). 관련 문서 섹션은 다음과 같습니다.

Popen.returncode
  The child return code, set by poll() and wait() (and indirectly by communicate()).
  A None value indicates that the process hasnt 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


답변