質問: subprocess.popen(cmd.split(), stdout=subprocess.pipe) p.terminate()を発行すると正常に終了します。
回答: 私はこれがここで言及されたのを見たことがないので、誰かがそれを必要とする場合に備えて、それをそこに置いています。サブプロセスが正常に終了することを確認するだけでよい場合は、コンテキストマネージャーに配置できます。たとえば、標準のプリンターでイメージを印刷し、コンテキストマネージャーを使用してサブプロセスが終了するようにしたかったのです。import subprocess with open(filename,'rb') as f: img=f.read() with subprocess.popen("/usr/bin/lpr", stdin=subprocess.pipe) as lpr: lpr.stdin.write(img) print('printed image...') この方法はクロスプラットフォームでもあると思います。