为了账号安全,请及时绑定邮箱和手机立即绑定

用Python替换控制台输出

用Python替换控制台输出

慕田峪4524236 2019-11-25 20:16:01
用Python替换控制台输出我想知道如何在Python中创建一个漂亮的控制台计数器,就像在某些C / C ++程序中一样。我有一个循环做事,当前的输出是这样的:Doing thing 0Doing thing 1Doing thing 2...什么是最简单的就是让最后一行更新;X things done.我在许多控制台程序中看到过这种情况,我想知道是否/如何在Python中执行此操作。
查看完整描述

3 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

一个简单的解决方案就是"\r"在字符串之前写入而不添加换行符; 如果字符串永远不会变短,这就足够了......

sys.stdout.write("\rDoing thing %i" % i)sys.stdout.flush()

进度条稍微复杂一点......这是我正在使用的东西:

def startProgress(title):
    global progress_x
    sys.stdout.write(title + ": [" + "-"*40 + "]" + chr(8)*41)
    sys.stdout.flush()
    progress_x = 0def progress(x):
    global progress_x
    x = int(x * 40 // 100)
    sys.stdout.write("#" * (x - progress_x))
    sys.stdout.flush()
    progress_x = xdef endProgress():
    sys.stdout.write("#" * (40 - progress_x) + "]\n")
    sys.stdout.flush()

您调用startProgress传递操作的描述,然后progress(x)在哪里x是百分比,最后endProgress()



查看完整回答
反对 回复 2019-11-26
?
隔江千里

TA贡献1906条经验 获得超10个赞

更优雅的解决方案可能是:

def progressBar(value, endvalue, bar_length=20):

        percent = float(value) / endvalue
        arrow = '-' * int(round(percent * bar_length)-1) + '>'
        spaces = ' ' * (bar_length - len(arrow))

        sys.stdout.write("\rPercent: [{0}] {1}%".format(arrow + spaces, int(round(percent * 100))))
        sys.stdout.flush()

用value和endvalue调用这个函数,结果应该是

Percent: [------------->      ] 69%



查看完整回答
反对 回复 2019-11-26
?
森林海

TA贡献2011条经验 获得超2个赞

另一个答案可能更好,但这就是我在做的事情。首先,我创建了一个名为progress的函数,用于打印退格字符:

def progress(x):
    out = '%s things done' % x  # The output
    bs = '\b' * 1000            # The backspace
    print bs,
    print out,

然后我在主函数的循环中调用它,如下所示:

def main():
    for x in range(20):
        progress(x)
    return

这当然会抹掉整条线,但是你可以把它搞得一团糟去做你想要的。我最终使用这种方法制作了一个进度条。




查看完整回答
反对 回复 2019-11-26
  • 3 回答
  • 0 关注
  • 370 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信