복붙노트

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

PYTHON

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

파이썬의 서브 프로세스 모듈과 통신 () 메소드를 사용할 때 종료 코드를 검색하려면 어떻게해야합니까?

관련 코드 :

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

내가 다른 방식으로해야할까요?

해결법

  1. ==============================

    1.Popen.communicate가 완료되면 returncode 속성을 설정합니다 (*). 다음은 관련 문서 섹션입니다.

    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를 호출합니다.

  2. ==============================

    2.먼저 프로세스가 실행을 완료하고 .wait 메소드를 사용하여 리턴 코드를 읽었는지 확인해야합니다. 이렇게하면 코드가 반환됩니다. 나중에 액세스하려는 경우 Popen 객체에 .returncode로 저장됩니다.

    먼저 프로세스가 실행을 완료하고 .wait 메소드를 사용하여 리턴 코드를 읽었는지 확인해야합니다. 이렇게하면 코드가 반환됩니다. 나중에 액세스하려는 경우 Popen 객체에 .returncode로 저장됩니다.

  3. ==============================

    3.exitcode = data.wait (). 하위 프로세스가 차단됩니다. 표준 출력 / 오류에 쓰거나 표준 입력에서 읽는 경우 피어가 없습니다.

    exitcode = data.wait (). 하위 프로세스가 차단됩니다. 표준 출력 / 오류에 쓰거나 표준 입력에서 읽는 경우 피어가 없습니다.

  4. ==============================

    4..poll ()은 리턴 코드를 갱신합니다.

    .poll ()은 리턴 코드를 갱신합니다.

    시험

    child = sp.Popen(openRTSP + opts.split(), stdout=sp.PIPE)
    returnCode = child.poll()
    

    또한 .poll ()이 호출 된 후 객체에서 반환 코드를 child.returncode로 사용할 수 있습니다.

  5. from https://stackoverflow.com/questions/5631624/how-to-get-exit-code-when-using-python-subprocess-communicate-method by cc-by-sa and MIT license