Pythonでコマンドラインの実行を行う方法

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です