首頁 > 後端開發 > Python教學 > 如何在Python中實現子程序的非阻塞逐行輸出過濾?

如何在Python中實現子程序的非阻塞逐行輸出過濾?

Mary-Kate Olsen
發布: 2024-12-10 14:09:10
原創
320 人瀏覽過

How Can I Achieve Non-Blocking Line-by-Line Output Filtering from Subprocesses in Python?

子程序的非阻塞輸出過濾:逐行方法

在 Python 程式設計中,捕捉和處理外部命令輸出的能力至關重要。一個常見的場景涉及使用 subprocess 模組來執行命令並檢索其輸出。然而,當輸出大量時,就會出現挑戰,我們需要增量地過濾和顯示它。

延遲輸出的問題

考慮以下Python腳本,它呼叫一個產生大量輸出的實用程式:

在我們的父親進程中,我們嘗試讀取取並過濾輸出:

最初,我們的期望是該實用程式的輸出將在可用時逐行顯示。然而,這並沒有發生;相反,只有在產生大量數據後才會顯示輸出。

迭代器效率低

這種延遲的原因在於在 proc.stdout 上使用 for 迴圈。這會在迭代處理之前將整個輸出隱式讀取到記憶體中。為了解決這個問題,我們可以採用更有效的方法:使用 readline()。

這種方法使我們能夠在輸出可用時逐行讀取它,消除了延遲並提供了更有效率的方法。響應式過濾進程。

結論

過濾子程序的輸出可能是 Python 中常見的任務。透過了解 I/O 緩衝的細微差別並採用 readline() 等高效技術,開發人員可以實現非阻塞過濾器,以增量方式處理和顯示數據,從而增強應用程式的響應能力。

以上是如何在Python中實現子程序的非阻塞逐行輸出過濾?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板