Python で外部プログラムを呼び出す
-
Python で
os.system()
関数を使用して外部システムコマンドを実行する -
Python で
os.popen()
関数を使用して外部システムコマンドを実行する -
Python で
subprocess.Popen()
関数を使用して外部システムコマンドを実行する -
Python で
subprocess.call()
関数を使用して外部システムコマンドを実行する -
Python で
subprocess.run()
関数を使用して外部システムコマンドを実行する
Python では、OS と通信して応答を取得するために、さまざまなモジュールと関数を使用できます。Python には、外部プログラムを実行できるメソッドもあります。
このチュートリアルでは、Python で外部プログラムを呼び出す方法について説明します。
Python で os.system()
関数を使用して外部システムコマンドを実行する
Python の os
モジュールは、デバイスの OS と対話でき、シェルコマンドを実行するために使用できる関数を備えています。system()
関数は、サブシェルで文字列として渡されるコマンドを実装します。シェルの終了ステータスを返します。これは、指定されたコマンドの実行後に OS が返します。シェルコマンドではなく、一度に複数のコマンドを実行して外部プログラムを呼び出すことができます。
例えば、
import os
os.system("echo Hello World")
Python で os.popen()
関数を使用して外部システムコマンドを実行する
外部プログラムコマンドを実行するための os
モジュールのもう 1つの関数は、popen()
関数です。このメソッドは、コマンドに関連するパイプを開きます。os.system()
関数に似ていますが、コマンドに関連する入出力操作を支援するファイルタイプのオブジェクトを提供します。関数のパラメーターとして、ファイルのファイルモードとバフサイズを指定できます。
例えば、
import os
os.popen("echo Hello World")
Python 2 で使用できる popen()
関数には 4つのタイプがあることに注意してください。それらの違いは、これら 4つの関数の出力にあります。
Python で subprocess.Popen()
関数を使用して外部システムコマンドを実行する
subprocess
モジュールは os
モジュールに似ており、外部プログラムを呼び出すための関数とメソッドが改善されています。Popen
はクラスであり、メソッドではありません。必要なコマンドとともに指定する必要のあるさまざまなパラメーターがあるため、これを使用するのは少し複雑です。4つの os.popen()
関数をすべて 1つにまとめています。また、外部プログラムを別のプロセスとして実行します。次のコードは、これを使用する方法を示しています。
import subprocess
subprocess.Popen("echo Hello World", shell=True, stdout=subprocess.PIPE).stdout.read()
Python で subprocess.call()
関数を使用して外部システムコマンドを実行する
call()
関数は、popen()
関数を改良したものです。ただし、popen()
関数とは異なり、コマンドが実行されるのを待ってからリターンコードを提供します。コマンドを引数として関数に渡します。
例えば、
import subprocess
subprocess.call("echo Hello World", shell=True)
Python で subprocess.run()
関数を使用して外部システムコマンドを実行する
Python v3.5 以降では、run()
関数がプログラムコマンドの実行によく使用されます。コマンドの実行後に完了したプロセスオブジェクトを返し、パラメーターとして関数に渡されます。
例えば、
import subprocess
print(subprocess.run("echo Hello World", shell=True))
Python で外部コマンドを実行するには、os
モジュールよりも subprocess
モジュールの方が優先されることに注意してください。
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn