そういえば最近このブログは 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__')
この特性を上手く利用すれば色々便利になりそう。
