2011-01-06 72 views
0

我正在創建一個python gtk程序,它將視頻上傳到ubuntu 10.10的youtube中。它使用Googlecl軟件包。你可以谷歌它的更多信息。我已經實現了通過以下語法調用程序。在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 – 2011-01-06 11:17:14

回答

1

在這種情況下使用os.system不起作用:在運行os.system時,它會等到您開始完成的過程,然後再繼續執行代碼。 在這種情況下,直到視頻上傳後,set_fraction方法纔會被調用。進度條也沒有顯示,因爲你的應用程序在上傳時被「卡住」在os.system中,所以從未將控制權交給Gtk來處理繪圖等事件。

試着看着subprocess模塊。這將允許您在後臺運行上傳過程並知道何時完成。

1

您可以在單獨的線程中執行耗時的操作。 PyGTK FAQ有example如何連接線程和UI更新(注意所有UI更新都應該在Gtk +線程中完成)。