我正在使用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