そういえば最近このブログは subprocess.Popen を使っているけど。
subprocess.run で全部まかなえるようになったんじゃなかったっけ?
Popen を使う理由は何だろう。
subprocessでPythonからLinuxコマンド実行
あぁ戻り値を得ないならば非同期実行になるってことね。
しかしなんともなサンプルコードだ、多分 Windows なんだろうけど。
UNIX 系ならこんなに単純なサンプルコードにできる。
#!/usr/bin/env python3 import subprocess subprocess.Popen(['sh', '-c', 'sleep 3; echo First']) subprocess.Popen(['sh', '-c', 'echo Second']) print('__done__')
__done__ が一番最初に表示されるね、なるほど。
ただし with as を使うと戻り値を使うのと同様になるので順番どおりになる。
#!/usr/bin/env python3 import subprocess with subprocess.Popen(['sh', '-c', 'sleep 3; echo First']) as p: pass with subprocess.Popen(['sh', '-c', 'echo Second']) as q: pass print('__done__')
この特性を上手く利用すれば色々便利になりそう。