あなたは
terminate
Dプロセス
、決してフラッシュは/それへの入力を閉じて、そのすべてのデータがバッファ内に立ち往生し、プロセスが強制的に殺された時に捨てました。その後、完了するために、プロセスを待って、stdin
を閉じ、入力を渡して結合するcommunicate
を使用することができます。
この場合
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')
(唯一の3つの標準ハンドルのパイプである)、あなたも安全にこれを行うことができます:
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
として使用する場合にのみ実行してください。 2つ以上がPIPE
である場合、デッドロックの危険性があります(子供はstdoutに書き込み、バッファをクリアするために読むことを待っています、あなたはstdinに書き込んでいます、子供がバッファをクリアするのを待っています)。communicate
スレッドや選択モジュールを使用すると、デッドロックを避けるためにそのデザインを模倣する必要があります。
'pp.join()'の代わりに 'pp.wait()'を使用します( 'multipprocessing'ではなく' subprocess'です)。 Python 2.7に 'timeout'パラメータはありません(' subprocess32'モジュールを使わない限り)。 – jfs
@ J.F.Sebastian: 'wait'と' join'ビットを修正しました。あなたのコメントは、 'timeout'が利用可能になったときに明らかになります。 – ShadowRanger