Python:同时线程化标准输入和标准输出

标签 python multithreading bash cmd

我使用套接字编写了一个小型 IRC 客户端。不,我不想使用像扭曲这样的库。 ;)我正在将消息打印到标准输出,效果很好。有没有一种好方法可以打印新消息,同时也可以使用线程之类的东西来监听用户输入? 这是一个小片段:

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! 

最佳答案

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

consoleLock = threading.Lock()

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

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

这将使打印到控制台线程安全。至于同时监听用户输入,你到底想如何实现呢?输入期间打印的任何内容仍将最终出现在输入区域的中间,因为只有一个控制台可以打印(并且读取的输入会打印到控制台)。

关于Python:同时线程化标准输入和标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31521641/

相关文章:

python - 周期数据的核密度估计

java - Java JavaFX 应用程序中的多线程问题

java - 停止 Java 线程的安全方法

bash - 循环/自动刷新 docker ps View 的技巧,如 bash 中的 top/htop

python - Pandas 数据帧阈值——如果超过则保持数字固定

python - 像这样的Elasticsearch更像:相同的请求不同的响应

c - STREAM OpenMP 基准解读

linux - Bash -- 查找超过 3 行的文件列表

bash - 如何使用 bash 工具搜索非 ASCII 字符?

python - 在 numpy 数组的列内独立洗牌