Python:同时线程化stdin和stdout

时间:2015-07-20 16:27:58

标签: python multithreading bash cmd

我使用套接字写了一个小的IRC客户端。不,我不想使用像扭曲的图书馆。 ;)我正在向stdout打印消息,这一切都很好。是否有一种打印新消息的好方法,但也可以通过线程等方式收听用户输入? 这是一个小片段:

from threading import Thread
import time

def print_stuff():
    while True:
        print "New PRIVMSG!"
        time.sleep(2)

t = Thread(target=print_stuff)
t.start()

while True:
    raw_input(">>")

这不会产生我需要的输出...... 输出看起来像这样:

>>New PRIVMSG!
test test tesNew PRIVMSG!

有没有办法让这个工作在cmd或bash中?

提前谢谢!

编辑: 输出应该如下所示。

New PRIVMSG! 
New PRIVMSG! 
>> hello test
New PRIVMSG! 

1 个答案:

答案 0 :(得分:2)

您可以创建一个控制台锁。在线程中有多个方便的Lock对象;我创建了一个如:

consoleLock = threading.Lock()

然后每当你想打印到控制台时:

consoleLock.acquire()
print 'what to print'
consoleLock.release()

这将使打印到控制台线程安全。至于同时收听用户输入,您究竟想要如何实现这一目标?输入过程中打印的任何内容仍然会在输入区域的中间结束,因为只有一个控制台要打印到(并且读取输入打印到控制台)。