在输出其他线程/进程时接收stdin输入

时间:2014-07-30 01:24:48

标签: python multithreading ncurses python-curses

我问的问题与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函数,因为我希望有输入历史记录。

1 个答案:

答案 0 :(得分:0)

不幸的是,没有任何方法可以做到这一点,不会产生一些严重或刺激性的后果。

终端滚动和处理stdin / stdout的方式在几十年内变化不大。

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

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

通过使用curses,你可以实现你的目标。但我知道在标准标准炮弹中无法做到这一点