【问题标题】:Python print to stay on same linePython打印保持在同一行
【发布时间】:2014-03-01 17:19:48
【问题描述】:
import os
import time

h = 0
s = 0
m = 0

while s <= 60:
    os.system('clear')
    print h, "hours", m, 'minutes', s, 'seconds'
    time.sleep(1)
    s += 1
    if s == 60:
        m += 1
        s = 0
    elif m == 60:
        h += 1
        m = 0
        s = 0

我上面有这段代码。这一切都很好,并且完成了它应该做的事情,但我想让它在同一行中打印所有语句。例如,它应该打印出 0 小时 0 分 0 秒,然后在同一行上应该打印出 0 小时 0 分 1 秒,第二个变量是唯一变化的东西。我该怎么做呢?我已经尝试过使用 os.system('clear') 命令,但它不起作用。我在 Mac OSX 10.7 上运行它。

【问题讨论】:

标签: python macos


【解决方案1】:

在 Python 3 中,您可以使用这种代码:

print("{} hours, {} minutes, {} seconds".format(h, m, s), end = "\r")

【讨论】:

    【解决方案2】:

    您应该使用终端提供的功能。大多数情况下需要使用'\r'(回车,返回该行的第一列);但根据操作系统的不同,这可能会被解释为它还附加一个换行符。我觉得我记得 OSX 可能会这样做。

    您还需要避免自动换行 print 将始终附加。您可以为此使用尾随逗号,但这有问题(杂散空间,没有冲洗)。所以我建议改用sys.stdout.write(),因为没有换行符通常不会进行刷新,所以你也应该明确使用sys.stdout.flush()

    然后,返回第一列不会删除旧的输出,所以它只会被下一行覆盖。如果这比之前的短,您将有尾随垃圾。为避免这种情况,请再次使用您的终端提供的内容(通常'\x1b[K' 会在不移动光标的情况下擦除所有内容直到行尾,但如果这对您不起作用,只需打印一些空格或确保您的输出始终格式化到相同的宽度)。

    EL = '\x1b[K'  # clear to end of line
    CR = '\r'  # carriage return
    sys.stdout.write(("%d hours %d minutes %s seconds" + EL + CR) % (h, m, s))
    sys.stdout.flush()
    

    一个更体面的方法(除了这个使用文字序列的快捷方式)是使用官方的 curses 库。

    import curses
    curses.setupterm()
    EL = curses.tigetstr('el')
    CR = curses.tigetstr('cr')
    

    如果 CR 确实无法在 OSX 上正常运行,那么您的 termcaps 中可能会有 goto 以转到特定位置(例如第一列),或者您可以使用 @987654328 @ (SC) 和 restore_cursor (RC) 恢复之前保存的位置:

    sys.stdout.write(SC + "%d hours %d minutes %s seconds" + EL + RC % (h, m, s))
    

    【讨论】:

    • 聪明的答案,一直在寻找这个。
    【解决方案3】:

    试试这个:

    print h, "hours", m, 'minutes', s, 'seconds', '\r'
    

    你也应该看看 Alfe 的回答 :-)

    【讨论】:

    • 在'\r'后面加一个逗号,这样下次打印到同一行
    • 这个答案还有其他问题。仅使用 '\r' 会在下一个输出中添加一个杂散空间,并且不会刷新输出。如果旧线路比新线路长,也可能出现尾随垃圾。有关如何避免这种情况的详细信息,请参阅我的答案。
    猜你喜欢
    • 2021-08-21
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多