2017-11-18 9 views
-1

기본적으로 coursera-dl과 같은 명령 줄 실행 파일로 생성 된 출력을 텍스트 컨트롤로 가져오고 싶습니다. 그러나 명령 행 실행 파일은 logging.info를 사용하여 출력을 인쇄합니다. 그러면 하위 프로세스가 logging.info 인쇄물을 읽을 수없는 것 같습니다. 그러나 logging.info 함수가 인쇄로 변경되면 wxpython이 출력을 읽을 수 있습니다. cmd를 textctrl에 넣습니다. 나는 python27을 사용한다. 코드의 무리에서 내 코드는 인터넷에서 함께 넣어 : 그것은 나타납니다wxpython 텍스트 컨트롤에서 logging.info에 의해 생성 된 출력물

self.courses_list = "" 
def execute(self,command,textctrl): 
     #clear the textctrl 
     #try: 
     textctrl.SetValue("") 
     si=subprocess.STARTUPINFO() 
     si.dwFlags |= subprocess.STARTF_USESHOWWINDOW 
     process = subprocess.Popen(command,stdout=subprocess.PIPE,**self.subprocess_args(False)) 
     output = '' 
     self.out=[] 
    # Poll process for new output until finished 
    for line in iter(process.stdout.readline, ""): 
     textctrl.AppendText(line) 
     output += line#.strip().decode('utf-8') 
     self.courses_list+=line 
     print(line) 
     self.out.append(line) 

    process.wait() 
    exitCode = process.returncode 

    if (exitCode == 0): 
     return output 
    else: 
     raise Exception(command, exitCode, output) 

def subprocess_args(self,include_stdout=True): 
    if hasattr(subprocess, 'STARTUPINFO'): 
     si=subprocess.STARTUPINFO() 
     si.dwFlags |= subprocess.STARTF_USESHOWWINDOW 
     env = os.environ 
    else: 
     si=None 
     env=None 

    if include_stdout: 
     ret={'stdout:':subprocess.PIPE} 
    else: 
     ret={} 

    ret.update({'stdin':subprocess.PIPE, 
       'stderr':subprocess.PIPE, 
       'startupinfo':si, 
       'env':env}) 
    return ret 
+0

stdout 대신 stderr 출력을 읽으려고 했습니까? 내가 아는 바로는 이들이 애플리케이션에서 사용할 수있는 유일한 두 개의 출력 스트림입니다. 데이터가 하나가 아니면 다른 데이터에 있어야합니다. –

+0

@ Paul Cornelius. 저도 요. 그것은 표준 출력으로 인쇄하지 않는 로깅과 관련이있는 것으로 보인다. 그래서 내가 알아 내야 할 것은 stdout으로 출력하는 방법입니다. 하지만 커맨드 라인 소스 코드를 수정하고 싶지는 않습니다. – Boikem

답변

0

는 표준 에러의 출력 읽기 함께 할 수있는 뭔가가. 따라서 'stderr'을 변경하는 것 : subprocess.PIPE를 'stderr': subprocess.STDOUT은 문제를 해결합니다. 그래서 여기에 ret 부분에서의 변경 내용이 어떻게 보입니까

ret.update({'stdin':subprocess.PIPE, 
      'stderr':subprocess.STDOUT,#here's the solution 
      'startupinfo':si, 
      'env':env})