2011-05-07 31 views
1

我想知道製作GUI進度條的好方法。我使用python,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

這很可能是它以不同的方式處理非交互式shell。對於文本進度條,它可能使用類似ncurses的東西,如果它不在終端上,則不起作用。我不知道具體情況。 – ptomato 2011-05-07 06:43:34

+0

有什麼好運? '-e'有幫助嗎?我測試了它 - 當用'-e'調用時,它似乎輸出到stderr;並且'>'字符的位置看起來像是一個快速,簡單和容易的方法來計算適當的分數。 – senderle 2011-05-10 22:02:39

+0

不幸的是,我放棄了開發這個應用程序足夠長的時間,以至於我的回購庫中的glade改爲下一個GTK3版本。我希望有一天能夠把這個過渡到可能會恢復發展的階段,但是我正處在另一個項目的中間,需要先開始並完成另一個項目,然後才能回到這個階段。 – narnie 2012-03-03 03:23:03

回答

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 2011-05-07 04:15:57