2011-05-07 3 views
1

GUI 진행률 표시 줄을 만드는 좋은 방법을 알고 싶습니다. 나는 파이썬, Glade/GTK를 사용하고있다. 필자는 펄스 바 이상의 것을 얻고 싶습니다. 사용자가 진행 상황을 알 수있는보다 정확한 방법을 제공 할 수있는 것. 이것을 잡으려고하는 프로그램은 cdparanoia이지만 wget과 같은 다른 프로그램에서이 작업을 수행하는 방법을 알고 싶습니다. 이 두 프로그램에서 중요한 것은 stderr에 정보가 출력된다는 것입니다.GUI 진행률 표시기 (명령 줄 도구 사용)

나는 텍스트 진행률 표시 줄이 표시되어 있음을 표시하지 않는

output = p.stderr.read(1) 
print output 

을 할 때 언급해야한다. 거의 비대륙 형 쉘을 다르게 처리하는 것과 같습니다. 내가 할 줄 알았던 것처럼 캐리지 리턴 (\ r)이 없습니다.

코딩과 같은 것입니다 :

import subprocess, shlex, gtk 

command = 'cdparanoia -w -Z 1- - | sox -t wav - "my disk.flac"' 

p = subprocess(shlex.split(command), stderr=subprocess.PIPE) 

gui = gtk.Builder() 
gui.add_from_file("pulsebar.glade") 
#do magic here to make a good pulsebar 

감사, Narnie

+1

비대륙 형 쉘을 다른 방식으로 처리하는 것은 매우 잘할 수 있습니다. 텍스트 진행 막대의 경우 ncurses와 같은 것을 사용할 것입니다. ncurses는 터미널에 없으면 작동하지 않습니다. 나는 구체적인 것을 모른다. – ptomato

+0

행운을 빕니다? '-e'가 도움이 되었습니까? 나는 그것을 테스트했다.'-e'로 호출했을 때 stderr로 출력하는 것처럼 보였다. '> '문자의 위치는 적절한 분수를 계산하는 빠르고 간단하고 쉬운 방법처럼 보입니다. – senderle

+0

슬프게도, 나는이 애플리케이션을 개발하면서 GTK3 인 다음 버전으로 레노를 바꿨다. 언젠가이 문제를 해결하고 개발을 재개하길 바란다. 그러나 나는 다른 프로젝트의 한가운데 있으며 시작하기 전에 또 다시 끝내야한다. 위의 – narnie

답변

0

gtk.ProgressBar? (.set_fraction() 메서드에 유의하십시오.)

Here's 일부 정보는 하위 프로세스에서 비 차단 읽기를 수행하는 것에 대한 정보입니다. 시간 초과가있는 폴링 제안이 적절합니다. 또한 this answer.

cdparanoia의 진행 표시기에 대한 나의 희미한 기억은 매우 특이하다는 것입니다. 그러나 나는 그것이 단지 어리석은 물건 + 'r'이라고 추측한다. 그것에서 분수를 추출하기에는 너무 어려워서는 안됩니다.

: 좋습니다. 실제로 정상적인 사용 상황에서는 위의 내용이 잘못되었을 수 있습니다. 하지만 -e을 사용해 보셨습니까?

-e --stderr-progress 
      Force output of progress information to stderr (for wrapper 
      scripts). 
+0

과 같이 텍스트 진행률 막대가 위의 질문에 대한 편집으로 표시되지 않는다는 것을 알았습니다. – narnie