python で subprocess を使ってコマンドを実行する方法のメモ。
■実行するコマンドと引数をリストで指定し、コマンドの実行結果を stdout、stderr に出力する場合:
実行すると、ls -a の結果が stdout に出力されます。
■実行するコマンドと引数を文字列で指定し、コマンドの実行結果を stdout、stderr に出力する場合:
実行すると、ls -a の結果が stdout に出力されます。
返却値の args が 'ls -a' という文字列になっています。
■コマンドの実行結果をプログラム側で取得する場合:
実行すると、res.stdout、res.stderr に実行結果がバイト列で格納されます。
バイト列ではなく、文字列として取得する場合には、encoding を指定します。
出力結果が文字列となっていることがわかります。
■実行するコマンドと引数をリストで指定し、コマンドの実行結果を stdout、stderr に出力する場合:
import subprocess res = subprocess.run(['ls', '-a']) print(res)
実行すると、ls -a の結果が stdout に出力されます。
. .. test1.py CompletedProcess(args=['ls', '-a'], returncode=0)
■実行するコマンドと引数を文字列で指定し、コマンドの実行結果を stdout、stderr に出力する場合:
res = subprocess.run('ls -a', shell=True) print(res)
実行すると、ls -a の結果が stdout に出力されます。
返却値の args が 'ls -a' という文字列になっています。
. .. test1.py CompletedProcess(args='ls -a', returncode=0)
■コマンドの実行結果をプログラム側で取得する場合:
res = subprocess.run('ls -a', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) print(res) print(res.stdout) print(res.stderr)
実行すると、res.stdout、res.stderr に実行結果がバイト列で格納されます。
CompletedProcess(args='ls -a', returncode=0, stdout=b'.\n..\ntest1.py\n', stderr=b'') b'.\n..\ntest1.py\n' b''
バイト列ではなく、文字列として取得する場合には、encoding を指定します。
res = subprocess.run('ls -a', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='utf-8') print(res) print(res.stdout) print(res.stderr)
出力結果が文字列となっていることがわかります。
CompletedProcess(args='ls -a', returncode=0, stdout='.\n..\ntest1.py\n', stderr='') . .. test1.py