2011-01-06 18 views
0

私は、ubuntu 10.10でyoutubeにビデオをアップロードするpython gtkプログラムを作成しています。これはGoogleclパッケージを使用して動作します。あなたはそれ以上の情報をgoogleすることができます。私は以下の構文でプログラムを呼び出すことを実装しました。pythonで新しいサブプロセスを作成gtk

os.system('google youtube post --category %s --title \'%s\' --summary \'%s\' --tags %s %s' % ("Education",title,description,tags,filename)) 

これで正常に動画がYouTubeにアップロードされます。しかし、ビデオのサイズによっては、ネットワークの速度に応じてアップロードに多くの時間がかかります。それがアップロードされている間、私のpython gtkプログラムは灰色(凍結、ubuntuでは反応しません)に変わり、ビデオがアップロードされた後でのみ、ユーザはプログラムと再び対話できます。

アップロードプロセスをサブプロセスに分けて、別のバックグラウンドプロセスでビデオをアップロードしている間にユーザーがプログラムとやりとりできるようにする方法はありますか?私はプログラムがまだ実行中で、正しく動作していることをユーザーに示すプログレスバー・ウィンドウを表示するのが好きです。

これを行うには、progress_barウィンドウを作成し、次のコードを入力しました。私はプログラムを実行するとき

progress_bar.show() 
os.system('google youtube post --category %s --title \'%s\' --summary \'%s\' --tags %s %s' % ("Education",title,description,tags,filename)) 
progressbar.set_fraction(0.5) 

ただし、アップロードが完了するまで、私のプログラムが応答しなくなりますたプログレスバーウィンドウは表示されません。また、ビデオがアップロードされています。

更新:progress bar not updatingと同様の方法がありますか?この方法で私は自分のコードにわずかな変更を加えなければなりませんが、whileループの状態が何であるか分かりません。その方法ではwhile heavy_work_neededと記載されています。

+0

YouTubeのPython APIがあります。まだ別のスレッドでアップロードする必要がありますが、別のプログラムを呼び出すよりも強力です。 http://code.google.com/apis/youtube/1.0/developers_guide_python.html#UploadingVideos –

答えて

1

この場合、os.systemを使用すると動作しません。os.systemを実行すると、コードを続行する前に、開始したプロセスが完了するまで待機します。 この場合、ビデオがアップロードされるまで、set_fractionメソッドは呼び出されません。プログレスバーはアップロード中にos.systemに "スタック"しているので表示されないので、描画のようなイベントを処理するためにGtkに制御を戻すことは決してありません。

subprocessモジュールを調べてみてください。これにより、バックグラウンドでアップロードプロセスを実行し、終了時を知ることができます。

1

別のスレッドで時間のかかる操作を行うことができます。 PyGTKよくある質問はexampleスレッドとUIアップデートを結合する方法です(すべてのUIアップデートはGtk +スレッドで行うべきです)。

関連する問題