2017-08-24 110 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功能類中(假設你」重新使用類),您可以整天控制同步。

相關問題