dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

python で subprocess を使ってコマンドを実行する方法

2020-08-15 20:44:15 | python
python で subprocess を使ってコマンドを実行する方法のメモ。

■実行するコマンドと引数をリストで指定し、コマンドの実行結果を 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



この記事についてブログを書く
« wordファイル(.docx)から本... | トップ | mysqlのテーブル、カラム名の... »

python」カテゴリの最新記事