【问题标题】:How to rewrite output in terminal如何在终端中重写输出
【发布时间】:2011-03-30 03:46:38
【问题描述】:

我有一个 Python 脚本,我想让它在终端中显示从 0 到 100% 的递增数字。我知道如何在终端上打印数字,但如何“重写”它们,使 0 变为 1,将 1 变为 2,依此类推直到 100?

【问题讨论】:

    标签: python linux terminal


    【解决方案1】:

    这个食谱here 应该很有用。将该模块用作 tc,以下代码可以满足您的要求:

    from tc import TerminalController
    from time import sleep
    import sys
    
    term = TerminalController()
    
    for i in range(10):
        sys.stdout.write("%3d" % i)
        sys.stdout.flush()
        sleep(2)
        sys.stdout.write(term.BOL + term.CLEAR_EOL)
    

    配方使用terminfo 获取有关终端的信息,并在Linux 和OS X 中适用于许多终端。但是,它不适用于 Windows。 (感谢 piquadrat 的测试,根据下面的评论)。

    编辑:配方还提供了使用颜色和重写部分行的功能。它还有一个现成的文本进度条。

    【讨论】:

    • 根据要求,我在 Windows(Windows 7、Python 2.7)上尝试了您的代码。输出为“0 1 2 3 4 5 6 7 8 9”。
    • 对于像发送回车这样基本的东西来说,拉入 terminfo 过于复杂,但为了正确性,我还是要竖起大拇指:)
    【解决方案2】:

    打印不带换行符的回车 (\r) 会将光标重置到行首,从而使下一次打印覆盖已打印的内容:

    import time
    import sys
    for i in range(100):
        print i,
        sys.stdout.flush()
        time.sleep(1)
        print "\r",
    

    这不会清除该行,因此如果您尝试使用此方法打印递减数字,您将看到以前打印的剩余文本。您可以通过用空格填充输出或在其他答案中使用一些控制代码来解决此问题。

    【讨论】:

    • 这个平台是独立的吗?
    • @klez:可能不适用于所有终端。它适用于打字机。该平台对您来说足够独立吗? :)
    • 在我可以使用的两个平台(Linux 和 Windows)上,它可以工作。
    • 我目前无法访问 Windows。你能测试一下我的答案中的食谱是否在那里有效吗?如果您没有时间,请不要打扰,我相信我很快就会遇到一台 Windows 机器。
    【解决方案3】:

    基于this answer,但没有终端控制器:

    import time
    import sys
    for i in range(100):
        sys.stdout.write("Downloading ... %s%%\r" % (i))
        sys.stdout.flush()
        time.sleep(1)
    

    在 GNOME 终端 (Linux) 和 Windows 控制台上测试。

    提示:不要在 IDLE 编辑器中运行此示例。

    【讨论】:

      【解决方案4】:

      使用blessings package - 清除屏幕(clear/cls)并输入:

      import sys
      from blessings import Terminal
      from time import sleep # <- boy, does this sound tempting a.t.m.
      
      term = Terminal()
      for i in range(6):
          with term.location(term.width - 3, term.height - 3):        
              print('{}'.format(i))
          sleep(2)
          if (i == 3):
              print('what was I doing, again?')
      print('done')
      

      要从 CheeseShop 安装它,只需...

      pip install blessings
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-05
        • 1970-01-01
        • 1970-01-01
        • 2021-12-26
        • 2013-03-22
        • 1970-01-01
        • 1970-01-01
        • 2011-07-17
        相关资源
        最近更新 更多