当前位置: 首页 > 面试题库 >

控制台中的文本进度栏

嵇昱
2023-03-14
问题内容

我编写了一个简单的控制台应用程序,使用ftplib从FTP服务器上载和下载文件。

我希望该应用程序向用户展示其下载/上传进度的一些可视化;每次下载数据块时,我都希望它提供进度更新,即使它只是数字表示形式(如百分比)。

重要的是,我要避免擦除在前几行中已打印到控制台的所有文本(即,我不想在打印更新的进度时“清除”整个终端)。

这似乎是一项相当普通的任务-如何在保留先前程序输出的同时,制作进度条或类似的可视化内容输出到控制台?


问题答案:

一个简单的,可定制的进度条
以下是我经常使用的许多答案的汇总(不需要导入)。

# Print iterations progress
def printProgressBar (iteration, total, prefix = '', suffix = '', decimals = 1, length = 100, fill = '█', printEnd = "\r"):
    """
    Call in a loop to create terminal progress bar
    @params:
        iteration   - Required  : current iteration (Int)
        total       - Required  : total iterations (Int)
        prefix      - Optional  : prefix string (Str)
        suffix      - Optional  : suffix string (Str)
        decimals    - Optional  : positive number of decimals in percent complete (Int)
        length      - Optional  : character length of bar (Int)
        fill        - Optional  : bar fill character (Str)
        printEnd    - Optional  : end character (e.g. "\r", "\r\n") (Str)
    """
    percent = ("{0:." + str(decimals) + "f}").format(100 * (iteration / float(total)))
    filledLength = int(length * iteration // total)
    bar = fill * filledLength + '-' * (length - filledLength)
    print('\r%s |%s| %s%% %s' % (prefix, bar, percent, suffix), end = printEnd)
    # Print New Line on Complete
    if iteration == total: 
        print()

注意:这是针对Python 3的;有关在Python 2中使用此功能的详细信息,请参见注释。

样品用量

import time

# A List of Items
items = list(range(0, 57))
l = len(items)

# Initial call to print 0% progress
printProgressBar(0, l, prefix = 'Progress:', suffix = 'Complete', length = 50)
for i, item in enumerate(items):
    # Do stuff...
    time.sleep(0.1)
    # Update Progress Bar
    printProgressBar(i + 1, l, prefix = 'Progress:', suffix = 'Complete', length = 50)

样本输出:

Progress: |█████████████████████████████████████████████-----| 90.0% Complete

更新资料

注释中讨论了一个选项,该选项允许进度条动态调整为终端窗口宽度。尽管我不建议这样做,但是这里有一个实现此功能的要点(并注意了一些警告)。



 类似资料:
  • 问题内容: 有没有简单的方法可以在控制台中显示Java流程的滚动百分比?我有一个在特定过程中生成的百分比数据类型(双精度),但是我可以将其强制到控制台窗口并刷新,而不是为每个新的百分比更新打印一行新内容吗?我正在考虑推送cls和进行更新,因为我在Windows环境中工作,但是我希望Java具有某种内置功能。欢迎所有建议!谢谢! 问题答案: 您可以打印回车符以将光标放回到行首。 例:

  • 问题内容: 我从互联网上找到了下面的代码,可以正常工作,但是它没有将打印控制台写入omt.txt,它仅在第二个catch块之后写入语句。如果您运行该代码,则将理解我的意思。要做的就是将控制台上的所有内容写入“ omt.txt”文件中。 经过一番回答后,我发现我的问题不清楚,对此感到抱歉。我想将控制台输出保存到omt.txt文本文件。如果在控制台上打印了“ Hello 123”,它也应该在omt.t

  • 当然,对于GUI,除非运行我上面提到的命令,否则不会加载控制台,所以如果您有很多打印语句,它是否仍然影响程序的速度,它们是否仍然打印?(即使认为没有显示终端/控制台)

  • 我尝试使用这个存储库https://github.com/ctongfei/progressbar为我的光线跟踪添加进度条。当我运行测试时,我得到很多异常。 我完全不知道它们是什么意思,也不知道如何开始修复它们。 我的测试代码: 我收到的错误消息: 2019年7月15日9:14:57PM org . jline . utils . log logr警告:无法检索哑色Java . io . io类型

  • 是否有一种方法可以在setuptools安装程序中找到与console_脚本等效的脚本。将其转换为需求。txt文件用于pip安装-r要求。txt。 我打算从一个不受信任的ssl服务器安装一个包。到目前为止,只有通过设置才能使其正常工作。py文件是这样的 其中gitlab服务器在安装程序中具有自签名证书。我有一些控制台脚本。

  • 当我在项目中使用AppSync时,我想知道是否有一种方法可以从控制台版本化AppSync API,因为我已经为它制作了模式。我找不到为架构做这件事的方法,因为它容易发生无意的编辑。可从控制台对AWS Lambda进行版本控制。