본문 바로가기
파이썬

파이썬 하위 프로세스 호출에서 종료 코드 및 stderr 가져 오기

by º기록 2021. 1. 19.
반응형

call, check_call, check_output과 같은 하위 프로세스에서 제공하는 함수를 읽고 각 기능이 어떻게 작동하고 서로 다른지 이해합니다. 현재 check_output을 사용하고 있으므로 다음과 같이 stdout에 액세스하고 "try block"을 사용하여 예외를 잡을 수 있습니다.

# "cmnd" is a string that contains the command along with it's arguments. 
try:
    cmnd_output = check_output(cmnd, stderr=STDOUT, shell=True, timeout=3, universal_newlines=True);                         
except CalledProcessError:                                                                                                   
    print("Status : FAIL")                                                                                                   
print("Output: \n{}\n".format(cmnd_output))                                                                                  

내가 겪고있는 문제는 예외가 발생하고 "cmnd_output"이 초기화되지 않았고 stderr에 액세스 할 수없는 경우이며 다음과 같은 오류 메시지가 표시됩니다.

print("Output: \n{}\n".format(cmnd_output))
UnboundLocalError: local variable 'cmnd_output' referenced before assignment

그 이유는 예외로 인해 "check_output"이 추가 처리없이 즉각 "cmnd_output"에 할당되지 않고 즉시 중단되기 때문이라고 생각합니다. try 블록에서. 내가 틀렸다면 나를 바로 잡으십시오.

stderr에 대한 액세스 권한을 얻고 (stout에 전송해도 괜찮습니다) 종료 코드에 액세스 할 수있는 방법이 있습니까? 예외가 발생하지 않고 종료 코드를 기반으로 통과 / 실패를 수동으로 확인할 수 있습니다.

감사합니다, 아흐메드.

 

해결 방법

 

이 버전을 사용해보십시오 :

import subprocess
try:
    output = subprocess.check_output(
        cmnd, stderr=subprocess.STDOUT, shell=True, timeout=3,
        universal_newlines=True)
except subprocess.CalledProcessError as exc:
    print("Status : FAIL", exc.returncode, exc.output)
else:
    print("Output: \n{}\n".format(output))

이렇게하면 호출이 성공한 경우에만 출력이 인쇄됩니다.


 

참조 페이지 https://stackoverflow.com/questions/16198546

 

 

반응형

댓글