2011-05-07 54 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