【问题标题】:Prepend line to stdout in Python in attempt to display falling drops animation在 Python 中将行添加到标准输出以尝试显示下降动画
【发布时间】:2017-07-30 08:32:14
【问题描述】:

如何在标准输出前添加行?

换句话说,当我写入标准输出时,我希望已经打印的输出被“下推”,然后在下一个输出之前添加。

【问题讨论】:

  • 您能否向我们展示您的代码或更详细地描述您的用例。
  • 它看起来像一本用相反顺序写的书。它不是很人性化。
  • 我实际上想模拟落入控制台的水滴。但是,“为什么”并不重要 :) 我要问的是“如何”?
  • 你在linux吗?您可以使用 curses 模块。
  • 你不能在标准输出中 seek() 所以你不能做你要求的事情。

标签: python console stdout


【解决方案1】:

您不能简单地通过直接操作标准输出来做到这一点。标准输出是一个文件对象。在常规文件对象中可以使用seek。但是,由于所有内容在写入终端后都会尽快显示在终端中,因此调用 seek 不会影响已经显示的内容。

但是,使用像 curses 这样的适当终端库,您可以输出控制光标位置的控制字符,并允许您在控制台中的任何位置更改文本内容。

请注意,curses 是相当低级的库。对于您制作动画的特定用例,使用更高级别的库(如 asciimatics)可能更有意义。

【讨论】:

【解决方案2】:
  • 将初始值存储到列表中,

  • 那么直到满足你的条件,

    • 将新内容追加到列表中
  • 用 '\n' 加入数据

也就是说,

import sys
arr = ['start line',]
while some_condition_till_you_want_to_write:
    arr.append('some new content')
print "\n".join(arr)
sys.stdout.flush()

【讨论】:

  • 谢谢,但我需要继续这样做
  • 要连续执行此操作,请将 True for while 块和使用队列放在里面。如果队列不为空,则从队列中获取项目并打印它们,否则不打印。并编写一个函数,将项目放入队列中。
猜你喜欢
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 2015-12-20
  • 1970-01-01
相关资源
最近更新 更多