我使用哪個寫入輸出的短行用於處理的數據的每個塊的外部過程。我希望在每一行之後做出反應,而不會有任何額外的延遲。但是,似乎ProcessProtocol
的.outReceived()
被緩衝。 Docs狀態:扭曲,ProcessProtocol如何接收不帶緩衝區的標準輸出?
.outReceived(data):調用此過程的數據是從 過程的標準輸出管道接收的。 管道傾向於提供比插座更大的數據塊(一個千字節是常用緩衝區大小),因此,您可能不會遇到網絡套接字典型的「隨機點差和單調」行爲,但無論您應該做好準備如果您的 不能在一次通話中獲得所有數據,請處理。要正確地做到這一點, outReceived應該簡單地積累數據,並推遲做 任何與它,直到處理完畢。
結果是,我在整個處理完成後得到一個塊的輸出。我如何強制ProcessProtocol
不緩衝標準輸出?
不能直接回答,但肯定其中有明確的指針。正如你所說的,stdout在連接到終端時是行緩衝的,因此使用帶'usePTY = True'的'spawnProcess'解決了這個問題。 – vartec 2012-03-29 15:26:16
我不熟悉扭曲來判斷'usePTY'是否有用。標準C庫使用'isatty()'函數來檢測它是否連接到終端。因此,另一種選擇是'LD_PRELOAD'超級強加'isatty()'的庫以始終返回'1'。 – 2012-03-29 15:30:40
我剛剛檢查過'usePTY'幫助,我正在按我的意願逐行獲取輸出。感謝名單。 – vartec 2012-03-29 15:32:56