Pythonでコマンドラインの実行を行う方法をご紹介します。
「subprocess」を使用します。
目次
条件
- Python 3.5以降
subprocessによるコマンド実行
run() 関数を使用します。
サンプルソース
「ls -l」を実行するサンプルです。
import subprocess subprocess.run(["ls", "-l"])
実行結果
$ python3 subprocessTest.py total 4 -rw-rw-r-- 1 user user 48 Dec 6 14:03 subprocessTest.py
Windowsで使用する場合(Linuxでも使える)
windowsの「dir」コマンドを使用する場合、シェルを通して実行する必要があります。
subprocess.run()に、「shell=True」というパラメタを渡します。
以下では、さらに2つのパラメタを追加しています。
- stdout=subprocess.PIPE:標準出力を取得する。
- universal_newlines=True:結果を文字列で返す。
import subprocess
result = subprocess.run('dir *.py', shell=True, stdout=subprocess.PIPE, universal_newlines=True)
for line in result.stdout.splitlines():
print(line)
関数化
関数化すると、より使いやすくなります。
以下では「stderr=subprocess.PIPE」というパラメタも追加して、エラー発生時の文字列を取得するようにしています。
import subprocess
import sys
def command(cmd):
try:
result = subprocess.run(cmd, shell=True, check=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
universal_newlines=True)
for line in result.stdout.splitlines():
yield line
except subprocess.CalledProcessError:
print('Command [' + cmd + '] was failed.', file=sys.stderr)
sys.exit(1)
def main():
"""
main関数
"""
cmd = 'dir *.py' # 実行するコマンド
for result in command(cmd):
print(result)
if __name__ == "__main__":
main()
参考
Python:subprocess — サブプロセス管理
https://docs.python.org/ja/3/library/subprocess.html
Python から外部プログラムを起動する (subprocess.run)
https://maku77.github.io/python/env/call-external-program.html

