簡體   English   中英

Twisted,ProcessProtocol如何接收沒有緩沖的stdout?

[英]Twisted, how can ProcessProtocol receive stdout w/o buffering?

我正在使用外部進程為每個處理的數據塊寫入短行輸出。 我希望在每條線之后做出反應而不會有任何額外的延遲。 但是,似乎緩沖了ProcessProtocol .outReceived() 文件說:

.outReceived(data):使用從進程'stdout管道接收的數據調用。 管道傾向於以比插座更大的塊提供數據(一千字節是常見的緩沖區大小) ,因此您可能不會遇到網絡套接字典型的“隨機滴漏”行為,但無論您是否應該准備好處理t通過一次通話獲取所有數據。 為了正確地做到這一點,outReceived應該簡單地累積數據並推遲對它做任何事情,直到過程結束。

結果是,在整個處理完成后,我在一個塊中得到輸出。 如何強制ProcessProtocol不緩沖stdout?

我正在使用外部進程為每個處理的數據塊寫入短行輸出。 我希望在每條線之后做出反應而不會有任何額外的延遲。

結果是,在整個處理完成后,我在一個塊中得到輸出。 如何強制ProcessProtocol不緩沖stdout?

緩沖發生在生產者流程中,而不是消費者身上。 標准C庫stdout僅在連接到終端時進行行緩沖,否則它是完全緩沖的。 這是導致生產者進程在沒有連接到終端時以大塊而不是逐行輸出數據的原因。

使用stdbuf實用程序強制生成器進程' stdout進行行緩沖。

如果生產者進程是python腳本,則使用-u python interpreter switch來完全關閉標准流的緩沖。 stdbuf實用程序雖然更好。

暫無
暫無

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

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