python – 将subprocess.call的输出输出到进度条
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 将subprocess.call的输出输出到进度条,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2294字,纯文字阅读大概需要4分钟。
内容图文
![python – 将subprocess.call的输出输出到进度条](/upload/InfoBanner/zyjiaocheng/790/b6e1483005d14aae819162df0b751ab6.jpg)
我正在使用growisofs通过我的Python应用程序来刻录iso.我在两个不同的文件中有两个类; 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保持响应(以便我可以更新进度条并允许用户取消刻录,如果他们想要)?如果是这样,我怎么能这样做,仍然能够将进度传递到进度条?
如果您有兴趣,完整代码可用on Launchpad.如果您安装了bazaar,只需运行:
bzr branch lp:boxblaze
哦,如果你想知道,这个应用程序只适用于Linux – 所以不要担心跨平台兼容性.
解决方法:
您可以使用glib.io_add_watch()来监视连接到子进程对象中的stdout和stderr的管道上的输出.
proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout_id = glib.io_add_watch(proc.stdout, glib.IO_IN|glib.IO_HUP, stdout_cb)
stderr_id = glib.io_add_watch(proc.stderr, glib.IO_IN|glib.IO_HUP, stderr_cb)
然后,当调用回调时,它应检查条件并从管道读取所有数据并对其进行处理以获取更新ProgressBar的信息.如果app缓冲了io那么你可能不得不使用pty来欺骗它认为它连接到终端所以它会一次输出一行.
内容总结
以上是互联网集市为您收集整理的python – 将subprocess.call的输出输出到进度条全部内容,希望文章能够帮你解决python – 将subprocess.call的输出输出到进度条所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。