Pythonで外部コマンドを実行するためのモジュールには、os.system
とsubprocess
があります。これらの違いと使い方について解説します。
os.systemとは
os.system
は、PythonでUnixコマンドを記述するための従来のモジュールです。以下にos.system
を使って現在のディレクトリの中身を確認する例を示します。
import os
os.system("ls")
subprocessとは
subprocess
は、os.system
やos.spawn*
といったモジュールや関数を置き換えることを目的にしたモジュールです。以下にsubprocess
を使って同じことを行う例を示します。
import subprocess
subprocess.call("ls")
subprocessの使い方
subprocess
にはいくつかの関数があり、それぞれ異なる目的で使用されます。
subprocess.call()
subprocess.call()
は、シンプルにただコマンドを実行したい時に使います。
import subprocess
subprocess.call("ls")
subprocess.check_call()
subprocess.check_call()
は、コマンドが正常に実行できたかどうか確認し、処理を分岐させたい場合に使います。
import subprocess
try:
subprocess.check_call("ls")
except:
print("subprocess.check_call() failed")
subprocess.check_output()
subprocess.check_output()
は、コマンドを実行した際の出力を返します。
import subprocess
print(subprocess.check_output("ls"))
まとめ
os.system
とsubprocess
の主な違いは、subprocess
がより新しく、より多くの機能を提供していることです。そのため、現在ではsubprocess
の使用が推奨されています。特に、subprocess.run()
は、可能な範囲で全てを任せることが推奨されています。それより複雑な処理が求められる場合は、subprocess.Popen()
を使用します。