【问题标题】:Unprint a line on the console in Python?在 Python 的控制台上取消打印一行?
【发布时间】:2015-05-12 23:38:32
【问题描述】:

是否可以操作已经打印到控制台的文本行?

例如,

import time
for k in range(1,100):
     print(str(k)+"/"+"100")
     time.sleep(0.03)
     #>> Clear the most recent line printed to the console
print("ready or not here I come!")

我已经看到了一些在 Windows 下使用自定义 DOS 控制台的东西,但我真的很喜欢在命令行上工作的东西,就像在没有任何额外画布的情况下打印一样。

这存在吗?如果没有,为什么不呢?

P.S.:我尝试使用 curses,它导致我在 Python 之外的命令行行为出现问题。 (在错误地输出包含诅咒的 Python 脚本后,我的 Bash shell 停止打印换行符 -不可接受-)。

【问题讨论】:

    标签: python printing


    【解决方案1】:

    您正在寻找的是:

    print("{}/100".format(k), "\r", end="")
    

    \r是回车,将光标返回到行首。实际上,打印的任何内容都会覆盖之前打印的文本。 end="" 是为了防止\n 打印后(保持在同一行)。

    sonrad10comments 中建议的更简单的形式:

    print("{}/100".format(k), end="\r")
    

    在这里,我们只是将结束字符替换为 \r 而不是 \n

    Python 2 中,同样可以实现:

    print "{}/100".format(k), "\r",
    

    【讨论】:

    • @kpie 你正在使用python2,在这种情况下语法是print "{}/100".format(k), "\r",
    • 我相信你可以使用print("{}/100".format(k), end="\r")作为这段代码的更简单的版本
    【解决方案2】:

    最简单的方法(至少对于 Python 2.7)是使用语法:

    print 'message', '\r',
    print 'this new message now covers the previous'
    

    请注意第一次打印末尾的额外“,”。这使得打印保持在同一行。同时,'\r' 将打印放在该行的开头。所以第二个 print 语句会覆盖第一个。

    【讨论】:

      【解决方案3】:

      您需要的是 ANSI 命令代码。 http://en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes
      您还需要代码来激活 ANSI 命令代码。我会使用Colorama。 https://pypi.python.org/pypi/colorama

      使用curses (Python 3.4+) 模块。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-13
        • 1970-01-01
        • 2018-07-06
        相关资源
        最近更新 更多