반응형
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
반응형
'파이썬' 카테고리의 다른 글
파이썬 가져올 수 있도록 내 파이썬 모듈을 어디에 두어야합니까? (0) | 2021.01.19 |
---|---|
파이썬 Django의 ImageField 이미지가 템플릿에로드되지 않습니다. (0) | 2021.01.19 |
파이썬 간단한 스레딩 이벤트 예제 (0) | 2021.01.19 |
파이썬 numpy 행 합계로 행 나누기 (0) | 2021.01.19 |
파이썬 Map의 키 배열 가져 오기 (0) | 2021.01.19 |
댓글