はじめに
- pythonからコマンド実行したいときの
subprocess
モジュールについて書きます。
subprocess
モジュールの使い方
-
subprocess
モジュールを使えば、pythonからコマンドを実行できます。 - https://docs.python.org/3/library/subprocess.html
-
subprocess.run([<実行したいコマンド>]
でpythonからコマンドを実行できます。 - コマンドは複数の場合は配列で渡します。
環境:Python 3.11.4
import subprocess
>>> subprocess.run(["ls", "-l", ""])
total 16
total 16
drwx------@ 3 xxxx staff 96B 9 6 2021 Applications
drwx------@ 32 xxxx staff 1.0K 8 6 08:52 Desktop
drwx------+ 4 xxxx staff 128B 10 11 2022 Documents
drwx------@ 163 xxxx staff 5.1K 9 3 21:26 Downloads
drwx------ 7 xxxx staff 224B 3 18 2022 Movies
drwx------+ 5 xxxx staff 160B 7 19 2022 Music
drwx------+ 13 xxxx staff 416B 8 17 19:33 Pictures
...
結果の取得
- 結果を取得するにはrun()の引数に
capture_output=True
を入れます。 - 結果の属性は以下です。
arges
returncode
stdout
stderr
- また、結果はバイナリ形式のため、文字列にするにはrun()の引数に
text=True
を入れます。
>>> res = subprocess.run("ls", capture_output=True, text=True)
>>> print(res.stdout)
Applications
Desktop
Documents
Downloads
Movies
Music
...
shell実行
- run()の引数に
shell=True
を入れればshell実行ができ、shellの機能使えます。 - パイプやワイルドカードを利用できます。
>>> subprocess.run("ls | grep Do", shell=True)
Documents
Downloads
CompletedProcess(args='ls | grep Do', returncode=0)
終わりに
-
subprocess
を学んでから、pythonでコマンド実行できると思い、unzipをsubprocessで書いたら、「pythonに標準モジュールがある」と指摘されました。 - まだまだ勉強不足です。