2014-05-22 4 views
1

subprocess.check_output의 종료 코드는 어떻게받을 수 있습니까?
반환 코드가 내 패턴과 일치하는 파일이 발견되면 0이어야하며 패턴과 일치하는 파일이없는 경우 0이 아닌 것으로 가정합니다.
예외가있는 경우 예상대로 0이 아닌 리턴 코드를 수신합니다.subprocess.check_output에서 종료 코드 받기

try: 
     output = subprocess.check_output(["staf", "server.com", "PROCESS", "START", "SHELL", "COMMAND", "ls *heapdump*", "WAIT", "RETURNSTDOUT", "STDERRTOSTDOUT"]) 
     print result 
except CalledProcessError as e: 
     print(e.returncode) 
     sys.exit(e.returncode) 

답변

2

그냥 documentation가 말한대로 : 리턴 코드가 아닌 제로라면

그것은 CalledProcessError를 발생시킵니다. CalledProcessError 객체는 반환 코드 의 반환 코드와 출력 특성의 모든 출력을 갖습니다.

따라서 except 블록에 도달하지 않으면 0이 반환 된 것으로 간주 할 수 있습니다. 0이 아닌 반환 코드를 처리하는 데 이미 올바른 일을하고 있습니다.

+0

은'subprocess.check_output' 대신에 파일이 없다면'non-zero'를 반환하고 파일이 발견되면'0'을 반환합니까? bash가 작동하는 방식과 비슷합니다. – bobbyrne01

+0

하위 프로세스의 출력에 관심이 있습니까? 그렇지 않다면'subprocess.call'을 사용할 수 있습니다. 그렇게한다면,'p = subprocess.Popen (..., stdout = subprocess.PIPE)'를 사용하고 프로세스가 끝나면'p.returncode'를 체크 할 필요가 있습니다. – dano