簡體   English   中英

python子進程不寫入標准輸出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM