![](/img/trans.png)
[英]How to 'catch' stdin, stdout, stderr of a program in Python?
[英]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的源代碼時,我遇到了答案。 此實現將stdin , stdout和stderr重新分配給self
,並實現以下類似於文件的功能:
close
encoding
isatty
flush
writelines
write
readlines
readline
現在,由於所有io函數都在您的類之內(假設您正在使用一個類),因此您可以整天控制同步。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.