Python:raw_input并在线程中打印

时间:2012-01-14 10:06:07

标签: python multithreading printing raw-input

我有一个线程可以在控制台上打印一些文本,主程序有一个raw_input来控制线程。

我的问题是,当我写作时,线程也是这样的:

-->whatiwWHATTHETHREADWRITErite

但我希望得到像这样的东西

WHATTHETHREADWRITE
-->whatiwrite

谢谢!

3 个答案:

答案 0 :(得分:3)

你可以创建一个锁,并在持有锁时执行所有输入和输出:

import threading

stdout_lock = threading.Lock()

with stdout_lock:
    r = raw_input()

with stdout_lock:
    print "something"

答案 1 :(得分:2)

您必须将输入与线程输出同步,以防止它们同时发生。

您可以修改主循环,如:

lock = threading.lock()

while 1:
    raw_input()     # Waiting for you to press Enter
    with lock:
        r = raw_input('--> ')
        # send your command to the thread

然后锁定后台线程打印:

def worker(lock, ...):
    [...]
    with lock:
        print('what the thread write')

简而言之,当您Press Enter时,您将停止该主题并进入“输入模式”。

更具体地说,每当你Press Enter时,你会:

  • 等待锁定可用
  • 获得锁定
  • 打印-->并等待您的命令
  • 插入您的命令
  • 将该命令发送给线程
  • 释放锁

因此,只有在您处于“输入模式”时尝试打印时,您的线程才会停止
在你的终端你会得到类似的东西:

some previous output

---> your input
THE THREAD OUTPUT

答案 2 :(得分:0)

使用类似curses的内容将后台任务输出写入屏幕的一半,将输入/控制内容写入另一半。

你也可以在大多数终端上摆弄ANSI escape codes