2012-05-22 2 views
3

서브 프로세스를 사용하여 파이썬 스크립트 내에서 외부 프로그램을 호출 중입니다. 외부 프로그램은 많은 양의 출력을 생성합니다. 이 프로그램의 출력을 캡처해야합니다.통신을 사용하여 서브 프로세스를 통한 출력 캡처

process = subprocess.Popen('cmd.exe', shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=None) 
process.stdin.write('gams "indus89.gms"\r\n') 
while process.poll() != None: 
    line = process.stdout.readline() 
    print line 

이 코드로 무엇입니까 오류가 프로세스가 존재하지 않는 파이프에 쓰기를 시도

입니다 : 현재 코드는 다음과 같은 것입니다.

나는 다음과 같은 코드를 사용하는 경우 :

process = subprocess.Popen('cmd.exe', shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=None) 
process.stdin.write('gams "indus89.gms"\r\n') 
o, e = process.communicate() 
print o 

다음 프로그램의 출력이 캡처되지 않습니다.

타사 프로그램의 실행 결과를 캡처 할 수 있도록 코드를 어떻게 변경해야합니까?

+2

왜'cmd.exe'와'shell = False'를 사용합니까?''gams "indus89.gms" ''shell = True'로 왜 안되나요? –

답변

3

Popen은 과용입니다.

시도 :

output = subprocess.check_output('gams "indus89.gms"\r\n', shell=True) 

희망 환경에서 작동합니다.

+0

그래도 시도했지만 캡처해야하는 출력을 캡처하지 못했습니다. –

+0

@AdityaGore가 명령에 의해 반환되는 것은 무엇입니까? – jtmoulia

+0

죄송합니다. 이전 코드를 실행하고있었습니다. 모든 것이 이제는 잘되고 있습니다. 당신의 도움을 주셔서 감사합니다.. –