-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
stdout 대신 stderr 출력을 읽으려고 했습니까? 내가 아는 바로는 이들이 애플리케이션에서 사용할 수있는 유일한 두 개의 출력 스트림입니다. 데이터가 하나가 아니면 다른 데이터에 있어야합니다. –
@ Paul Cornelius. 저도 요. 그것은 표준 출력으로 인쇄하지 않는 로깅과 관련이있는 것으로 보인다. 그래서 내가 알아 내야 할 것은 stdout으로 출력하는 방법입니다. 하지만 커맨드 라인 소스 코드를 수정하고 싶지는 않습니다. – Boikem