【问题标题】:Parsing output of apt-get install for progress bar解析 apt-get install 的输出以获取进度条
【发布时间】:2010-12-14 02:33:46
【问题描述】:

我正在编写一个简单的 GUI Python 脚本来在系统上执行一些简单的任务。其中一些工作涉及到apt-get install 来安装一些软件包。

在此过程中,我想使用终端中 apt-get 界面中显示的小百分比显示一个进度条,该进度条应随着下载进度而更新。

但是!我找不到获取进度信息的方法。管道或重定向 apt-get 的输出只会给出静态行,显示每个包的“已完成下载”消息,在我的脚本中通过 subprocess.Popen() 读取也是如此。

如何从 apt-get 的输出中读取文件下载的百分比?

【问题讨论】:

    标签: python progress-bar subprocess popen apt-get


    【解决方案1】:

    您可以使用 python-apt 来安装软件包,而不是解析 apt-get 的输出。 AFAIK 它还有用于报告进度的模块。

    【讨论】:

    • 看/usr/share/doc/python-apt/examples/progress.py
    • 在没有 Python 和 libapt 的巨大混乱的情况下有什么方法可以做到这一点?
    【解决方案2】:

    正如我常说的,当您需要获得子进程的连续输出时,使用pexpect、not 子进程等来运行子进程。 pexpect 欺骗子进程使其相信它在终端上运行,因此子进程将提供它在真实终端上提供的那种输出......你可以抓住它并将它转换成你想要的任何类型的花哨的输出!- )

    【讨论】:

    • 是否有可能在我的 C 端口中也可以使用 posix popen()?或者有没有类似的方法?
    • popen 会让子进程知道它的输出是一个管道,所以你可能不走运,除非有足够好的命令让你问他们“无论如何请完全无缓冲的实时输出” !”而且我认为 apt-get 不在那个精英群体中。要在 Linux 下用 C 语言实现“假终端”,请从 pty (7) 手册页开始,例如linux.die.net/man/7/pty - 祝你好运(需要做很多工作!)。
    猜你喜欢
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    相关资源
    最近更新 更多