나는 python pygtk GUI에서 cdparanoia 명령 줄 유틸리티를 사용하고자하는 프로젝트에서 작업 중입니다. UI 개발을 위해 Glade를 사용하고 있습니다. 하위 프로세스 가져 오기 시도하고 subprocess.Popen 사용하여. 그것은 작동하지만 프로세스가 실행되는 동안 내 GUI가 멈 춥니 다 (창을 다시 칠할 수 없습니다). 사용자에게 아주 좋은 상호 작용이 아닙니다. 이 문제를 어떻게 방지 할 수 있습니까? 창에 취소 버튼을 달았 으면 좋겠지 만 프로그램이 "정지"되면 작동합니다. 궁극적으로, stderr를 캡처하고 싶습니다 (아래의 오디오 정보는 stdout을 통해 sox로 파이프됩니다). gtk로 제시하십시오. 사용자가 볼 수있는 프로그램을 설치할 때 Synaptic과 비슷한 모양으로 펼치십시오. 실시간으로 일어나는 일들. 또한 진행 표시기의 텍스트를 사용하여 실제 진행률 표시기 위젯을 작성하고 싶습니다. 프로세스가 완료되면 (모든 정보를 하나의 큰 정보 덤프로 제공함) 실시간으로 정보를 파이썬에 전달하는 방법은 무엇입니까?도움이 필요합니다 pygtk에서 실시간으로 STDOUT을 파이썬 프로젝트의 GUI로 캡쳐
실시간 정보를 캡처해야 할 때 해당 : 여기
Working on me - me - DISK 01.flac
cdparanoia III release 10.2 (September 11, 2008)
Ripping from sector 0 (track 1 [0:00.00])
to sector 325195 (track 15 [1:56.70])
outputting to stdout
(== PROGRESS == [> | 004727 00 ] == :-) O ==)
내가 지금까지 사용했던 코드 : 감사와
quick = " -Z" if self.quick == True else ""
command = "cdparanoia -w%s 1- -| sox -t wav - \"%s - %s - DISK %s%s.flac\"" %\
(
quick,
self.book_name.replace(" ", "_"),
self.author_name.replace(" ", "_"),
"0" if disc < 10 else "",
disc
)
print command
shell = subprocess.Popen(command, shell=True, executable="/bin/bash",
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
data, err = shell.communicate(command)
, Narnie
합니다. 나는 셸 = True를 사용하고 있었고, 그렇게 생각한 것처럼 동작 시켰습니다. 모두 stderr (프로그램이 텍스트 출력을 보내는 곳)에서 작업 중이지만 진행률 표시 줄 텍스트는 캡처되지 않습니다. 어떤 아이디어? – narnie
BTW, 나는 shlex shell 파서에 대해서도 배우는 것이 좋다. 전에는 몰랐고 훌륭하게 작동합니다! – narnie