为进度条解析apt-get install的输出

Gra*_*aul 6 python subprocess popen apt-get progress-bar

我正在研究一个简单的GUI Python脚本来在系统上执行一些简单的任务.其中一些工作涉及apt-get install安装一些包.

在这种情况下,我希望显示一个进度条,该进度条应该根据下载的进度进行更新,使用终端中apt-get接口中显示的小百分比.

但!我找不到获取进度信息的方法.管道或重定向apt-get的输出只给出静态行,显示每个包的"完成下载"消息,并subprocess.Popen()在我的脚本中读取相同的消息.

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

小智 5

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


Ale*_*lli 4

正如我经常说的,当您需要获得子流程的连续输出时,请使用pexpect不是subprocess 等来运行子流程。pexpect 欺骗子进程,让其相信它正在终端上运行,因此子进程将提供它在真实终端上给出的输出类型......并且您可以捕获它并将其转换为您想要的任何类型的奇特输出!- )

  • `popen` 会让子进程知道它的输出是一个管道,所以你可能不走运,除非有足够好的命令让你要求他们“无论如何,完全无缓冲的实时输出!” 我不认为 apt-get 属于那个精英群体。要在 Linux 下用 C 语言实现“假终端”,请从 pty (7) 手册页开始,例如 http://linux.die.net/man/7/pty - 祝你好运(需要做很多工作)需要!)。 (2认同)