Python命令行加载栏

时间:2016-04-19 15:35:58

标签: python python-2.7 command-line command-line-interface

我看到终端中显示了几个不同的加载条。但是,其中一些依赖\r似乎不起作用,可能是因为我使用Python 2.7而不是3.X。

我有一个加载栏,但每次都会打印一个新行。

def update_progress(progress):
    print"\r [{0}] {1}%".format('#'*(progress/10), progress)

while prog != 101:
    update_progress(prog)
    prog = prog + 1`

我是Python的新手,所以如果可能的话,你可以让代码简短易懂。这篇文章可能看起来像一个重复的问题,但Stack Overflow上的其他一些文章无法在新行上工作或打印。

如果\r应该适用于Python 2.7,那么你可以解释一下如何修复它,因为它不起作用吗?然而,这让我感到困惑,因为\n完全正常,但这是另一个问题。

P.S:我还需要它在再次打印前清除该行。

由于 AlwaysAwake

3 个答案:

答案 0 :(得分:3)

除了你永远不会初始化prog(我想你想要prog = 0循环之前的while)之外你可以禁止在Python2中打印换行符在声明后加上一个逗号:

def update_progress(progress):
    print "\r [{0}] {1}%".format('#'*(progress//10), progress),

但是,在阅读代码时很难错过这个逗号,因此导入和使用Python 3 print函数会更好。

from __future__ import print_function

def update_progress(progress):
    print("\r [{0}] {1}%".format('#'*(progress//10), progress), end='')

答案 1 :(得分:0)

您需要使用if (MY_CONSTANT = bar) { /* then do something */ } 因为sys.stdout.write()添加了一个新行:

print()

另请注意,在python3中,您可以将参数import sys def update_progress(progress): sys.stdout.write("\r [{0}] {1}%".format('#'*(progress/10), progress)) while prog != 101: update_progress(prog) prog = prog + 1 end一起使用:

print()

答案 2 :(得分:0)

请使用sys.stdout.write("yourstring"),然后使用sys.stdout.flush()确保显示内容。为了在跨平台开发中进行图形处理,我建议您使用Python库termcolorcolorama。他们将为Windows命令行着色,以便您可以创建漂亮的进度条。如果您要发布项目,可以在代码中实现coloramatermcolor的代码,并且只有一个文件。

享受Python的乐趣

Famecastle