2014-09-09 2 views
0

Sysinternals PSExec를 통해 원격 컴퓨터에서 일부 명령을 실행하기 위해 subprocess.check_output()을 사용하고 있습니다. 내가 가진 문제는 check_output()이 명령이 0이 아닌 반환 코드를 제공하면 CalledProcessError를 발생시키는 것입니다.subprocess.check_ouput() return code

PSExec은 생성 된 프로세스의 PID를 반환 코드로 제공하므로 매번 오류가 발생합니다. 이 오류를 무시하고 여전히 psexec 호출의 출력을 검사 할 수있는 방법이 있습니까? 기본적으로 반환 코드가 0이 아니더라도 출력을 확인하면됩니다.

감사합니다. the docs

+0

당신은 당신이 표준 출력/표준 에러 배관하지 않는 가정'subprocess.call'를 사용할 수 있습니다. 명령을 실행하면 완료 될 때까지 차단 한 다음 리턴 코드를 리턴합니다. –

+0

고마워, 실제로는 반환 코드가 아니라 문자열로 출력해야합니다. 나는 결과가 성공적으로 실행되었는지 확인하기 위해 키워드를 검색하고있다. – DJMcCarthy12

답변

3

: 종료 코드 제로가 아닌라면

IT는 CalledProcessError를 발생시킵니다. CalledProcessError 객체는 반환 코드 에 반환 코드를 포함하고 출력 속성에 출력됩니다.


try: 
    output = subprocess.check_output([...], stderr=subprocess.STDOUT) 
except subprocess.CalledProcessError as err: 
    return_code = err.returncode 
    output = err.output 
+0

그래, 나는 이것을 시도했다 ... 불행히도 err.returncode는 잘 작동하지만 err.ouput은 분명히 비어있다. (콘솔에 출력 할 때 빈 줄만 출력한다.) – DJMcCarthy12

+1

아마도 프로세스가 stdout 대신 stderr에 쓰는 것일 수 있습니다. 이 경우'stderr = subprocess.STDOUT'을 사용하여 출력을 캡처하십시오. – unutbu

+1

stdout과 stderr를 별도로 유지해야한다면'subprocess.Popen'과'subprocess.check_output' 대신에'communicate()'메소드를 사용할 수 있습니다 ... – unutbu