[英]python subprocess does not write to stdout
如果我運行以下python代碼(在python 2.7中),我將得到一個空的輸出文件,而我期望一行。 怎么了?
import subprocess
with open('outfile.out', 'w') as out:
pp=subprocess.Popen(['/bin/cat'],stdin=subprocess.PIPE,stdout=out)
pp.stdin.write('Line I want into out file\n')
pp.terminate()
您terminate
了該進程,並且從未刷新/關閉該進程的輸入,因此當該進程被強制terminate
時,所有數據都被卡在緩沖區中並被丟棄。 您可以使用communicate
合並傳遞的輸入,關閉stdin
,然后等待過程完成:
import subprocess
with open('outfile.out', 'w') as out:
pp=subprocess.Popen(['/bin/cat'],stdin=subprocess.PIPE,stdout=out)
pp.communicate('Line I want into out file\n')
在這種情況下(三個標准手柄中只有一個是管道),您也可以安全地執行此操作:
import subprocess
with open('outfile.out', 'w') as out:
pp=subprocess.Popen(['/bin/cat'],stdin=subprocess.PIPE,stdout=out)
pp.stdin.write('Line I want into out file\n')
pp.stdin.close()
pp.wait() # Optionally with a timeout, calling terminate if it doesn't join quickly
僅當您僅將單個標准手柄用作PIPE
時才應這樣做; 如果超過一個是PIPE
,有陷入僵局的危險(兒童寫入標准輸出,等待着你去閱讀清除緩沖區,你是寫標准輸入,等待孩子讀清除緩沖區),其communicate
通過做出決議使用線程或選擇模塊,則必須模仿該設計以避免死鎖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.