如何在python中添加progressbar

2024-06-17 12:27:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将progressbar添加到我的安装脚本中。我试图使用progressbar模块,但它取决于范围,我没有这个数字,而且我想安装的每个文件都需要不同的时间。 我有一个要安装的文件列表,我想用progressbar监视它。 这是生产线:

p2 = subprocess.Popen(["dpkg", "--force-all", "-i", "-R", pwd.strip() + "/archives"], stdout=out, stderr=err)

我想使用输出文件,但它是动态增长的,我没有成功地监视它。 输出文件的示例:

在文件的开头,每个包都有一行“Unpacking”和“Preparing”行:

^{pr2}$

在这之后,会出现“设置”的行,有时会启动包的过程,如下图所示:

Setting up openvswitch-switch (2.0.2-0ubuntu0.14.04.2) ...
openvswitch-switch stop/waiting
openvswitch-switch start/running
Setting up libllvm3.6:amd64 (1:3.6-2ubuntu1) ...
Setting up libxen-4.4 (4.4.2-0ubuntu0.14.04.1) ...
Setting up sg3-utils (1.36-1ubuntu1) ...
.
.
.

我有294个文件,行数包括'Unpacking'294',Preparing'294 and'setup'293,总行数是915。在

有人知道怎么做吗?在


Tags: 模块文件脚本列表时间数字settingp2
1条回答
网友
1楼 · 发布于 2024-06-17 12:27:06

没有for循环、递归或其他方法,您可以在发布的代码中插入进度更新函数,因此,除非您可以在上面进行扩展,否则您真的很走运。我制作进度条的典型方法是:

niter = 10000

# Setup the progress counters
increment = int(0.01 * niter)
percent = 0
countdown = increment
nbars = 0
totalbars = 20
barincrement = int(100/totalbars)

sys.stdout.write("{0}0%\r".format(" " * totalbars))

for i in range(niter):
    doSomeWork()
    countdown -= 1

    # Update and print out progress bar and % indicator if required
    if countdown == 0:
      percent += 1
      countdown = increment
      if percent % barcinrement == 0:
        nbars += 1
      bars = "#" * nbars
      space = " " * (totalbars - nbars)

      sys.stdout.write("{0}{1}{2}%\r".format(bars, space, percent))

sys.stdout.write("\nOperation Complete!\n")

我通常会将进度条的设置和更新移动到一个单独的类中,以使实际逻辑更具可读性,这样您就可以得到如下内容:

^{pr2}$

要打印出进度条,您需要某种迭代过程,通过它可以实际更新进度。在

在您的情况下,您可能需要自己实现,而不是进行子流程调用。或者为每个文件单独调用。但是不管怎样-没有迭代的形式,没有进度条。在

相关问题 更多 >