2011-01-06 29 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 +线程中完成)。