[英]subprocess.Popen and buffered process output
從python代碼內部,我想運行一個從stdin獲取其參數的二進制程序。 使用子流程模塊,這應該很簡單:
import subprocess
command = [ 'my_program' ]
p = subprocess.Popen( command, \
stdin = subprocess.PIPE, stdout = subprocess.PIPE, \
env={ "GFORTRAN_UNBUFFERED_ALL": "1"} )
p.stdin.write ( stdin_stuff )
while True:
o = p.stdout.readline()
if p.poll() != None:
break
# Do something with stdout
現在,這將啟動程序,但是python腳本只是掛在那里。 我知道這很可能是gfortran(我用來編譯my_program緩沖其stdout流的原因)。gfortran允許像我一樣使用GFORTRAN_UNBUFFERED_ALL環境變量,以及使用fortran代碼中固有的FLUSH() ,但仍然沒有運氣:python代碼仍然掛起。
您應該使用Popen.communicate()
將字符串發送到進程的stdin
更好,而不是手動寫入。
stdoutdata, stderrdata = p.communicate(stdin_stuff)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.