私はgrowisofsを使用して、Pythonアプリケーションを介してisoを書き込みます。2つの異なるファイルに2つのクラスがあります。GUI()(main.py)およびBoxblaze()(core.py)。GUI()はウィンドウを構築し、すべてのイベントなどを処理します。Boxblaze()には、GUI()が呼び出すすべてのメソッドがあります。
これで、ユーザーが書き込みに使用するデバイスと書き込み先のファイルを選択したら、次のコマンドを呼び出すメソッドを呼び出す必要があります。`
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( "progressbar")
GUIの応答性を維持するために、このコマンドを別のスレッドで実行する必要がありますか(プログレスバーを更新し、ユーザーが必要に応じて書き込みをキャンセルできるようにするため)?もしそうなら、どうすればそれを行うことができ、それでも進行状況を進行状況バーに渡すことができますか?
興味があれば、Launchpadで完全なコードを入手できます。バザーをインストールしている場合は、次を実行するだけです。
bzr branch lp:boxblaze
ああ、そしてあなたが不思議に思っているのであれば、このアプリケーションはLinuxでのみ動作することを意図しているので、クロスプラットフォームの互換性について心配する必要はありません。