【问题标题】:How to make a temporary output如何进行临时输出
【发布时间】:2015-01-26 00:12:18
【问题描述】:

我想打印一个输出'temporary',其实是这样的;

In[1]: print ("Hello")
Out[1]: Hello #Out[1]
#after 2 seconds for example
Out[1]: Hi #Still Out[1]

有没有办法做到这一点?这就像一个句子显示 2 秒后,在 same 位置,显示另一个字符串。我们可以删除最后一个输出并在同一行打印其他内容吗?

【问题讨论】:

    标签: python printing output


    【解决方案1】:

    我不确定我们是否可以返回并“取消打印”我们已经打印的内容,但就像在现实世界的打字机上一样,我们可以使用carriage return,将“打印机”重置为行并重新打印其他内容。

    这段代码演示了它是如何工作的(对于这个演示来说,这是一个糟糕的无限循环)。注意 %d 之后的 '\r',

    i = 0
    while time.sleep(0.2) == None:
        sys.stdout.write("Counter: %d\r" %i)
        sys.stdout.flush()
        i += 1
    

    【讨论】:

    • 好吧,至少你明白我的问题,谢谢你的回答。你确定这不可能un-print 吗?
    • @qwerty- 我想我们将不得不定义'un-print',因为当我们回车然后打印'\n'时,我们基本上删除了之前打印的行:D
    • @techolic '\n' 会将托架移动到新行。 '\r' 会将托架移动到当前行的开头,因此新的文本输出将覆盖之前输出的内容。因此,如果新的文本输出比以前的短,那么这些字符将保留。使用空格 ' ' 或多个空格来覆盖作为快速修复。
    【解决方案2】:

    使用time.sleep() 模块 .这个简单的代码可以在 python 控制台上运行,但不是 Ipython 控制台和 Ipython Notebook。

    def hello():
        print 'Hello',
        time.sleep(2)
        print '\rHi'
    
    hello()
    

    这适用于 Ipython Notebook,但不适用于 Ipython Console

    from IPython.display import clear_output
    def hello():
        print 'Hello'
        sys.stdout.flush()
        time.sleep(2)
        clear_output()
        print 'Hi'
        sys.stdout.flush()
    hello()
    

    【讨论】:

    • 我想在同一个位置显示。在我的问题中看到它仍然是Out[1]。请仔细阅读
    • 这个答案真的很有趣use sleep()。您必须仔细阅读问题。
    • @qwerty- 你不能输出到你输入的同一行!你必须为它创建一个函数。所以你只需要输入一行,然后它就会在一行中输出。
    • @dragon2fly 你还是不明白这个问题。我对 Python 很熟悉,所以请再次阅读问题。
    • @qwerty- 您必须尝试使用​​ '\rHi' 但不能保证它可以在所有机器上的 Ipython 中工作。但它会在普通控制台中完全满足您的要求。
    猜你喜欢
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2015-03-30
    • 1970-01-01
    相关资源
    最近更新 更多