【问题标题】:GUI Progress Indicator using command line tools使用命令行工具的 GUI 进度指示器
【发布时间】:2011-05-07 02:54:52
【问题描述】:

我想知道一种制作 GUI 进度条的好方法。我正在使用 python、Glade/GTK。我想获得的不仅仅是一个脉冲条的程序示例。可以让用户更准确地了解进度的方法。我试图为其捕获的程序是 cdparanoia,但想知道如何为 wget 等其他程序执行此操作。这两个程序需要注意的重要一点是信息在 stderr 上输出。

我应该在做的时候提到这一点

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

非常感谢, 纳尼

【问题讨论】:

  • 很可能是它以不同的方式对待非交互式外壳。对于文本进度条,它可能使用 ncurses 之类的东西,如果它不在终端上,它就不起作用。我不知道具体情况。
  • 运气好吗? -e 有帮助吗?我对其进行了测试——当使用-e 调用它时,它似乎确实输出到了stderr; > 字符的位置似乎是计算适当分数的一种快速、简单且容易的方法。
  • 遗憾的是,我放弃了足够长的时间开发这个应用程序,以至于我的 repo 中的 glade 更改为下一个版本,即 GTK3。我希望有一天能移植这个并可能继续开发,但我正处于另一个项目的中间,需要开始和完成另一个项目,然后才能重新开始。

标签: python shell progress-bar pygtk glade


【解决方案1】:

gtk.ProgressBar? (注意.set_fraction() 方法。)

Here's 一些关于从子进程进行非阻塞读取的信息。超时轮询的建议似乎是合适的。另外,this answer

我对 cdparanoia 进度指示器的模糊记忆是它非常特殊。但我猜这只是一些愚蠢的东西 + '\r';从中提取一小部分应该不会太难。

编辑:好的,实际上,在正常使用情况下,上述内容可能是不正确的;但是你试过-e吗?

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

【讨论】:

  • 同上,我发现文本进度条没有显示为对上述问题的编辑。
猜你喜欢
  • 2015-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
相关资源
最近更新 更多