2016-10-16 1 views
0

서브 프로세스를 사용하여 화면에서 출력을 캡처하려고했지만 다음과 같은 코드를 시도했습니다.서브 프로세스가 stdout의 출력을 파이썬의 변수에 저장하는 중입니다.

#!/tools/bin/python 

import subprocess 

result = subprocess.check_output("echo $USERNAME", shell=True) 
print result 

예상 출력된다 :

vimo 
vimo 

즉, 에코 진행 하나, 그 결과 출력을 인쇄하기위한 하나. 하지만 내가 볼 것은

vimo 

입니다하지만 결과 출력을 인쇄 할 때, 그 항상 빈.

위의 퍼즐에는 무엇이 있습니까? 도와주세요 !!

+0

부모 프로세스가 자식의 stdout을 캡처합니다. 결과는 꽤 기대됩니다. – user3159253

+1

달성하려는 것은 무엇입니까? – user3159253

+0

오! 죄송합니다 .. 혼란스러워하고 두 출력을 인쇄 할 줄 알았지 만 그 변수에 저장된 값이 출력된다는 것을 알았습니다. – Vimo

답변

0

더미 외부 스크립트 출력에서 ​​stdin과 stdout을 모두 가져 와서 코드 조각을 크게 벗겨 냈습니다 (개인 정보 보호를 위해 변경되었습니다).

from subprocess import Popen, PIPE 

cmd = ['echo', 'foo'] 

proc = Popen(cmd, stdout=PIPE, stderr=PIPE) 
comm = proc.communicate() 

if proc.returncode != 0: 
    # code to handle/parse stderr (comm[1]) 
    raise RuntimeError(
     '\'%s\': command has failed (%d):\n%s' 
     % ('some value', proc.returncode, comm[1])) 

for line in comm[0].split('\n'): 
    if line.find('Wrote:') == 0: 
     # some code to parse stdout 
     pass 
관련 문제