2013-03-19 2 views
0

할당 프로세스를 시작하고 stdoutstderr을 검색하려고합니다. 실시간으로 처리하는 데 정말로 신경 쓰지 않습니다.stderr의 첫 번째 행만 얻을 수 있습니다

subprocess.check_ouput(), 그러나을 사용하고 싶었지만 프로세스가 실패 할 수 있습니다. 에 StackOverflow 및 파이썬 문서를 읽은 후 나는 try .. catch 블록 추가 :

def execute(cmd,timeinsec=60): 
    print("execute ",cmd, " with time out ",timeinsec) 
    try: 
    output = subprocess.check_output(cmd, stderr=subprocess.STDOUT, timeout=timeinsec,universal_newlines=True) 
    except subprocess.TimeoutExpired: 
    print("timeout expired") 
    return "",2 
    except subprocess.CalledProcessError: 
    print("called process failed") 
    return "",1 
    print ('The command returned the following back to python:'+output) 
    return output,0 

을하지만 output.decode('utf-8') 로 출력을 인쇄 할 때 난 그냥 출력의 첫 번째 라인을 얻을.

참고 : Windows의 Msysgit 1.8과 함께 배포되는 MSys 환경에서이 프로그램을 실행하고 있습니다.

무엇이 잘못 될 수 있는지 알고 계십니까? 이 작업을 수행하는 더 좋은 방법을 알고 계십니까?

+0

[SSCCE] (http://SSCCE.org) –

답변

0

솔루션 문제는 하위 프로세스에서 실행 창에서 응용 프로그램 (비주얼 사용하여 내장) 콘솔 프로세스의 표준 출력을 할당 한 것은 이미 외부 리디렉션되고, 하나의 인쇄가 이루어졌다이었다

이 리다이렉션 이전의 원본 cout

+0

아. 이전 리디렉션 문제. 다행스럽게 생각 했어. – crayzeewulf

2

을 사용해야합니다. 그에 따라 질문을 태그하십시오. 또한 read() 메서드를 output으로 호출하는 이유를 모르겠습니다. outputbyte string이며 read() 메서드는 없습니다. 다음 코드는 나를 위해 작동 :

#! /usr/bin/env python3 
import subprocess 

try : 
    retcode = 0 
    cmd = ["/bin/ls", "/usr/local"] 
    output = subprocess.check_output(cmd, stderr=subprocess.STDOUT) 
except subprocess.CalledProcessError as e: 
    output = e.output 
    retcode = e.returncode 

print(output.decode('utf-8')) 
print(retcode) 

출력은 다음과 같습니다

bin 
etc 
games 
include 
lib 
man 
sbin 
share 
src 

0 

내가 (존재하지 않는) /usr/localfoo으로 /usr/local를 대체하여 오류를 트리거하는 경우, 출력은 다음과 같습니다

/bin/ls: cannot access /usr/localfoo: No such file or directory 

2 

마지막으로 check_output() 호출에 universal_newlines=True을 추가 할 수 있으며 decode()을 출력에 대해 걱정할 필요가 없습니다.

... 
output = subprocess.check_output(cmd, stderr=subprocess.STDOUT,universal_newlines=True) 
... 
... 
print(output) 

위의 예를보고 문제를 재현 할 수 있는지 확인하십시오. 문제를 재현 할 수 있으면 코드, 출력 및 모든 오류 메시지 (복사, 붙여 넣기 및 다시 형식 지정)를 게시하십시오.

+0

안녕하세요,이 작품은, 나는 창문에 힘내 배쉬에있어 언급 깜빡. – dzada

+0

문제는 내 문제를 해결하지 못한다는 것입니다. 내 게시물에 전체 기능 코드를 넣었습니다. 도와 주셔서 감사합니다 – dzada

관련 문제