3

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

我的问题是当我在写作时,线程也得到了这样的结果:

-->whatiwWHATTHETHREADWRITErite

但我想得到这样的东西

WHATTHETHREADWRITE
-->whatiwrite

谢谢!

4

3 回答 3

3

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

import threading

stdout_lock = threading.Lock()

with stdout_lock:
    r = raw_input()

with stdout_lock:
    print "something"
于 2012-01-14T10:50:53.007 回答
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
于 2012-01-14T11:53:39.287 回答
-1

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

您还可以在大多数终端上使用ANSI 转义码。

于 2012-01-14T10:42:39.057 回答