Pythonのシステムコマンド – os.system()、subprocess.call()

このチュートリアルでは、Pythonのシステムコマンドについて学びます。以前に、Pythonの乱数について学びました。

Pythonのシステムコマンド

Pythonプログラムを作成する際に、プログラム内でいくつかのシェルコマンドを実行する必要があるかもしれません。例えば、Pycharm IDEを使用している場合、プロジェクトをgithubで共有するオプションがあることに気付くかもしれません。そして、ファイルの転送がgitを使用してコマンドラインで操作されていることをおそらく知っています。したがって、Pycharmはそれを行うためにバックグラウンドでいくつかのシェルコマンドを実行します。しかし、このチュートリアルでは、Pythonコードからシェルコマンドを実行する基本について学びます。

Pythonのos.system()関数

os.system()関数を使用してシステムコマンドを実行できます。公式ドキュメントによると、これはStandard C関数system()を呼び出して実装されており、同じ制限があると述べられています。

ただし、コマンドが出力を生成した場合、それはインタプリタの標準出力ストリームに送信されます。このコマンドの使用は推奨されません。次のコードでは、システムコマンドgit --versionを使用して、gitのバージョンを知ろうとします。

import os

cmd = "git --version"

returned_value = os.system(cmd)  # returns the exit code in unix
print('returned value:', returned_value)

gitが既にインストールされているubuntu 16.04で見つかった次の出力。

git version 2.14.2
returned value: 0

gitバージョンコマンドの出力をコンソールに印刷していないことに注意してください。ここでは、コンソールが標準出力ストリームであるため、出力されています。

Python subprocess.call() 関数

前のセクションでは、os.system() 関数が正常に機能することを見ました。ただし、これはシェルコマンドを実行するための推奨されない方法です。Python subprocess モジュールを使用してシステムコマンドを実行します。subprocess.call() 関数を使用してシェルコマンドを実行できます。次のコードを参照してください。これは以前のコードと同等です。

import subprocess

cmd = "git --version"

returned_value = subprocess.call(cmd, shell=True)  # returns the exit code in unix
print('returned value:', returned_value)

そして、出力も同じになります。

Python subprocess.check_output() 関数

これまで、Pythonのシステムコマンドを実行してきました。しかし、それらのコマンドが生成する出力を操作することができませんでした。subprocess.check_output()関数を使用して、出力を変数に格納することができます。

import subprocess

cmd = "date"

# バイト文字列として出力を返す
returned_output = subprocess.check_output(cmd)

# decode() 関数を使用してバイト文字列を文字列に変換する
print('Current date is:', returned_output.decode("utf-8"))

次のような出力が生成されます

Current date is: Thu Oct  5 16:31:41 IST 2017

以上のセクションでは、Pythonシステムコマンドの基本的なアイデアについて説明しました。しかし、学ぶことには限りがありません。もしご希望であれば、公式ドキュメントのsubprocessモジュールを使用したPythonシステムコマンドについてもっと学ぶことができます。

Source:
https://www.digitalocean.com/community/tutorials/python-system-command-os-subprocess-call