我正在使用growisofs来通过我的Python应用程序来刻录iso。我在两个不同的文件中有两个类。 GUI()(main.py)和Boxblaze()(core.py)。 GUI()构建窗口并处理所有事件和事物,而Boxblaze()具有GUI()调用的所有方法。subprocess.call管道输出到进度条
现在,当用户选择了设备与燃烧,并要刻录的文件,我需要调用调用以下命令的方法:`
growisofs -use-the-force-luke=dao -use-the-force-luke=break:1913760 -dvd-compat -speed=2 -Z /burner/device=/full/path/to.iso
这个命令应该给类似的输出对此:
Executing 'builtin_dd if=/home/nevon/games/Xbox 360 isos/The Godfather 2/alls-tgod2.iso of=/dev/scd0 obs=32k seek=0'
/dev/scd0: "Current Write Speed" is 2.5x1352KBps.
#more of the lines below, indicating progress.
7798128640/7835492352 (99.5%) @3.8x, remaining 0:06 RBU 100.0% UBU 99.8%
7815495680/7835492352 (99.7%) @3.8x, remaining 0:03 RBU 59.7% UBU 99.8%
7832862720/7835492352 (100.0%) @3.8x, remaining 0:00 RBU 7.9% UBU 99.8%
builtin_dd: 3825936*2KB out @ average 3.9x1352KBps
/dev/burner: flushing cache
/dev/burner: closing track
/dev/burner: closing disc
此命令在Boxblaze()中的名为burn()的方法中运行。它看起来简直像这样:
def burn(self, file, device):
subprocess.call(["growisofs", '-dry-run', "-use-the-force-luke=dao", "-use-the-force-luke=break:1913760", "-dvd-compat", "-speed=2", "-Z", device +'='+ file])
现在我的问题有以下几点:
我怎样才能从输出(括号内百分比)的进展,并有我的进度条设定“跟随”那个进展?我的进度条是所谓的GUI()类,因为这样的:
GET = builder.get_object
self.progress_window = GET( “progressWindow”)
self.progressbar = GET(“进度“)
我必须在单独的线程中运行此命令才能使GUI保持响应(以便我可以更新进度栏并允许用户在需要时取消刻录)?如果是这样,我该怎么做,仍然能够将进度传递给进度条?如果你有兴趣
的完整代码,请on Launchpad。如果您已经安装了集市,只需要运行:
bzr branch lp:boxblaze
哦,如果你想知道,这个应用程序只能在Linux下工作 - 所以不要担心跨平台的兼容性。
我不知道我已经完全明白了什么是你的意思。这就是我一直试图实现它(http://pastebin.com/m6b1bdff6),但它并不完全似乎工作,因为我得到(到终端)的唯一输出: 的/ dev/scd0:“当前写入速度”为2.5x1352KBps。 – 2009-08-16 13:21:17
看来,我正在寻找的信息确实来自stderr。但是,现在看来我的解析不起作用,因为所有内容都会打印到屏幕上(请参阅pastebin链接)。 GUI仍然冻结。 core.py→http://pastebin.com/m586398c8 main.pu→http://pastebin.com/m28658de 另请注意,您实际上可以向growisofs命令添加-dry-run标志以尝试它不浪费DVD。 要看到整个事情,只需要运行: 的bzr分支LP:boxblaze – 2009-08-17 06:30:34
噢,对不起,我忘了,包括运行我的应用程序的输出。那就是: http://pastebin.com/m6e55585a – 2009-08-17 06:31:40