簡體   English   中英

Python3:用於重定向stdin,stdout,stderr的線程安全機制

[英]Python3: Threadsafe mechanisms to redirect stdin, stdout, stderr

我試圖在python中重定向已調試程序的stdin,stdout和stderr,並很快通過將StringIO實例分配給sys.stdin / out / err看到其他人已經成功。

但是,調試后的程序在一個線程中,而StringIO實例正在使用其他線程寫入和讀取。 我找不到任何文檔將StringIO對象描述為線程安全的,盡管我可以將自己的讀/寫調用包裝在鎖中,但是我認為我不能強迫調試程序使用那些相同的鎖。

如何強制StringIO做我想做的事情? 否則,我該怎么辦?

編輯:根據要求,一個預期的比賽條件的示例如下:

假設我正在從stdout閱讀。 我閱讀了StringIO的全部內容,然后刷新了對象……除了在我的讀取操作和刷新操作之間之外,調試后的程序已打印了更多信息,最終也導致了刷新。 換句話說,我正在丟失一些信息。

編輯2:我發現了另一個本質上是相同問題的問題 ,但是他的回答似乎不是很pythonic,所以我將其保留為開放狀態

在瀏覽Qdb的源代碼時,我遇到了答案。 此實現將stdinstdoutstderr重新分配給self ,並實現以下類似於文件的功能:

close
encoding
isatty
flush
writelines
write
readlines
readline

現在,由於所有io函數都在您的類之內(假設您正在使用一個類),因此您可以整天控制同步。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM