Python 子程序因「for line in iter」而掛起
在這種情況下,Python 腳本旨在執行C 程式並接收它的輸出。然而,腳本掛在了「for line in iter(process.stdout.readline, '')」行。
緩衝問題
問題產生於緩衝問題。在 C 程式中,當輸出通過管道傳送時,stdout 通常是塊緩衝的。這表示輸出會被緩衝,直到寫入一定量或遇到換行符號為止。
在 C 程式中,while 循環的每次迭代都會列印「2000」並休眠一秒鐘。由於沒有列印換行符,因此輸出被緩衝。
For Line in Iter Issue
在 Python 中, subprocess.stdout.readline() 讀取子程序的 stdout處理並傳回一行。 “for line in iter()”迴圈迭代 readline() 傳回的行。
但是,由於 C 程式的輸出由於緩衝而沒有被刷新,因此此時沒有要讀取的行Python 腳本進入循環的位置。因此,腳本會在這一行無限期地等待。
解決方案
修正C 程式中的緩衝
以上是為什麼當使用 `for line in iter(process.stdout.readline, \'\')` 從 C 程式讀取輸出時,我的 Python `subprocess` 掛起?的詳細內容。更多資訊請關注PHP中文網其他相關文章!