2016-10-20 11 views
0

adb logcat의 출력을 wx.TextArea 상자에 출력하는 코드가 있습니다.이 모든 것이 훌륭하게 작동하고 버튼을 클릭하면 logcat이 출력되고 전화 탭이있을 때 더 많이 출력됩니다 모든 것이 잘 작동합니다. toolsDir과 pkgName은 모두 문자열입니다.stdout에서 wx.TextArea로 실시간 출력

난 단지 특정 앱입니다 로그를 인쇄이 코드를 적응 그러나
 params = [toolsDir + "\\adb.exe", "logcat"] 
     p = Popen(params, stdout=subprocess.PIPE, bufsize=1) 
     for line in p.stdout: 
      self.progressBox.AppendText(line.decode('utf-8')) 

는이이 창 'FINDSTR'기능, ADB 로그 캣을 사용하여 수행됩니다 | findstr myApp. 아래의 코드는 처음에는 작동 하나 멈추고 아무 일도 일어나지 않고 버튼을 탭하고 앱을 닫은 상태 등을 표시하지 않습니다. 버퍼가 끝났으며 이후 이벤트가 처리되지 않습니다.

 args = [toolsDir + '\\adb.exe', 'logcat'] 
     args2 = ['findstr', pkgName] 
     process_adb = subprocess.Popen(args, stdout=subprocess.PIPE, shell=False) 
     process_fs = subprocess.Popen(args2, stdin=process_adb.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False) 
     for line in process_fs.stdout: 
      self.progressBox.AppendText(line.decode('utf-8')) 

어떻게 앱 이름을 필터링하는 하단 코드가 실시간 로그 출력을 중지하지만 상단은 표시되지 않습니까? 나는 한 명령을 다른 명령으로 파이핑하는 것과 관련이 있다고 생각합니다.

+0

당신이 파이썬에서 필터링 할 수 없습니다? 'pkgName in line :' – furas

+0

두 번째 프로세스가 EOF (파일 끝)를 기다리는 것 같습니다. 이것을 확인하십시오 : http://stackoverflow.com/questions/9674511/python-subprocess-interaction-why-does-my-process-work-with-popen-communicate – furas

+0

항상 작동하는 가장 단순한 것들은 생각하지 않았습니다. 그 길을! 오. 답을 답으로 쓰면 받아 들일 것입니다. – Borgme

답변

0

당신은 라인을 필터링 할 파이썬을 사용할 수 있습니다 : BTW

if pkgName in line: 

을 : 두 개의 프로세스와 문제가 될 수 있기 때문에 EOF (파일 끝) 또는 다른 신호 아마 초 대기 (즉, 폐쇄 파이프.)하지만 stdin

확인이 .. 항상 첫번째 과정에서 새로운 데이터를 기다리고 열려 : python-subprocess-interaction-why-does-my-process-work-with-popen-communicate