使用命令行工具的GUI进度指示器

1 投票
1 回答
869 浏览
提问于 2025-04-16 17:10

我想知道怎么做一个好看的图形界面进度条。我在用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

感谢你,
Narnie

1 个回答

0

gtk.ProgressBar 是什么?(注意 .set_fraction() 这个方法。)

这里有一些关于如何从子进程进行非阻塞读取的信息。建议使用带超时的轮询方式,这似乎很合适。此外,这个回答也很有帮助。

我对 cdparanoia 的进度指示器记忆模糊,感觉它的表现很特别。不过我猜它只是一些奇怪的东西加上 '\r';从中提取一个比例应该不难。

编辑:好吧,实际上,上面的说法在正常使用情况下可能不太正确;但是你试过 -e 吗?

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

撰写回答