【问题标题】:Printing a line dynamically in python 3 [duplicate]在python 3中动态打印一行[重复]
【发布时间】:2016-03-04 20:06:22
【问题描述】:

我正在尝试在 python 3 中打印一行,该行会随着程序的进行而改变。例如,如果我尝试:

import time
for i in range(0,10):
    print('Loading' + '.'*i)
    time.sleep(0.5)

我明白了:

Loading.
Loading..
Loading...

等等。我可以让它改变前一行并得到另一个'。添加到它而不是打印一个新的?当然,我可以这样做:

import time, os
for i in range(0,10):
    os.system('cls')
    print('Loading' + '.'*i)
    time.sleep(0.5)

但这会导致其自身的问题。我知道以前有人问过这个问题,但是由于某种原因给出的所有答案都不起作用。做类似的事情:

import time
for i in range(0,10):
    print('Loading' + '.'*i, end="\r")
    time.sleep(0.5)

不会改变任何东西,用“”替换“\r”只会让python暂时不打印任何东西,然后打印出整行。我做错了什么?

【问题讨论】:

    标签: python python-3.x printing


    【解决方案1】:
    import time
    print('Loading', end='.')
    for i in range(0,10):
        print('', end=".")
        time.sleep(0.5)
    

    explanation of end syntaxworking example

    【讨论】:

    • print('.', end='')更直观,只是省略了换行符。
    • @Felk 你可能是对的。
    • 这只是在大约 5 秒内没有打印出任何内容,然后我在一次打印中得到“正在加载…………”……
    • 这真的很奇怪。答案中的第二个链接(指向一个可运行的示例)对您有用吗?如果可以,但在您的解释器中不起作用,您确定您使用的是 python3 吗? (也可能是系统时钟或速度问题。)
    • 第二个链接无法打开:“与服务器的安全连接失败。”。不知道有什么问题。我注意到所有答案都适用于大多数人,但不适用于我——也许是一些奇怪的 python 故障......?顺便说一句,我正在使用 python 3.4
    【解决方案2】:

    您可以使用回车\r 来重写当前行,如下所示:

    import time
    for i in range(50):
        print("Loading" + "."*i, end="\r")
        time.sleep(0.1)
    

    【讨论】:

    • 我已经尝试过了 - 提供与问题中的代码相同的输出...
    • 你输出到什么样的控制台?
    • 我正在使用 WinPython,输出到标准控制台。
    【解决方案3】:

    您可以使用 ANSI 清除屏幕转义字符作为

    print(chr(27) + "[2J")
    

    【讨论】:

    • 我刚得到大量的 '[2J's
    • 它适用于我的 OSX 和 python3。也应该与 linux 一起使用
    • 我使用的是 Windows 7...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2015-07-23
    • 1970-01-01
    • 2015-01-01
    • 2020-10-18
    相关资源
    最近更新 更多