【问题标题】:Receiving stdin input while other threads / processes are outputting在其他线程/进程正在输出时接收标准输入
【发布时间】:2014-07-30 01:24:48
【问题描述】:

我在问与this post 相同的问题,但在 Linux 下的 Python 中。我有一个在后台运行的线程不断输出内容,但我想将输入行保留在终端的底部而不会被冲走。有人可以给我一个代码示例吗?假设我的代码是这样的:

from time import sleep
from multiprocessing import Process

def subproc():
  while True:
    print "something"
    sleep(1)
def main():
  p = Process(target=subproc)
  p.start()
  c = raw_input()

编辑:顺便说一句,如果可能的话,我想继续使用raw_input 函数,因为我希望有可用的输入历史记录。

【问题讨论】:

    标签: python multithreading ncurses python-curses


    【解决方案1】:

    不幸的是,没有任何方法可以避免一些严重或恼人的后果。

    终端滚动和处理标准输入/标准输出的方式几十年来没有太大变化。

    Take a look at terminal escape sequences. 只要用户终端基于 VT100 或 ansi 规范,这些都应该可以工作。您可以使用它们来设置写入位置、清除线条等。但是如果用户滚动,幻觉就会中断。

    在 angband、rogue 和 nethack 等早期游戏中解决了在屏幕上指定特定位置以输出角色的问题。解决方案是 Curses 库,and there happens to be a curses python module

    通过使用诅咒,您可以实现您的目标。但我知道在标准的标准 shell 中无法做到这一点

    【讨论】:

    • 对不起,我不清楚。我确实在要求一个使用 Python curses 模块的示例。我链接到的帖子提到了 Curses 库。我对滚动很好,因为它不会改变正在写入的内容,并且要写入的新内容以相同的方式写入。只是人们需要向后滚动才能继续输入。调整窗口大小可能会有更多问题,但我可以首先假设这不会发生。我只需要一个快速、有效且可能很脏的解决方案。另外,我主要关心的一个问题是 raw_input 函数是否仍然可以在这里使用。
    最近更新 更多