2017-08-24 109 views
0

我试图在python中重定向标准输入,标准输出和调试程序的标准错误,并迅速看到其他人已成功通过分配StringIO实例sys.stdin输入/输出/犯错。Python3:线程安全机制重定向标准输入,标准输出,标准错误

但是,调试程序位于一个线程中,而StringIO实例正在使用不同线程写入和读取。没有我能找到的文档将StringIO对象描述为线程安全,并且我可以将自己的读/写调用封装在锁中,但我不认为我可以强制调试的程序使用这些相同的锁。

我该如何强制StringIO做我想做的事?否则,我想要做什么?

编辑: 按照要求的预期竞争条件的例子如下:

比方说,我是从标准输出读。我读取了StringIO的全部内容,然后刷新对象......除了在读取和刷新操作之间,调试程序已经打印了更多信息,这些信息也最终被刷新。换句话说,我正在失去一些信息。

编辑2: 我发现了另一个问题,基本上是问the same question,但他的回答似乎并不十分Python的,所以我要离开这个开放

+0

对不起,如果这只是我不清楚,但你担心什么样的线程不安全的行为?你有没有想要阻止的特定比赛? – turbulencetoo

+0

我已经在一个快速编辑来说明我的意思是 –

+0

使用一个队列,把消息写入从thread1,while循环thread2与'try:queue.get(timeout = 0.1),除了queue.Empty:通过'。 – T4rk1n

回答

0

我跑进了答案,同时通过Qdb的略读源代码。这种实现重新分配标准输入标准输出,并标准错误self,并实现以下类似文件的功能:

close 
encoding 
isatty 
flush 
writelines 
write 
readlines 
readline 

现在,因为所有的IO功能类中(假设你”重新使用类),您可以整天控制同步。

相关问题