自動化によって推進される世界では、システムレベルのコマンドを制御できる能力は時間と労力の両方を節約することができます。多機能な言語である Python は、システムコマンドを実行し外部プログラムを実行するためのいくつかの方法を提供しています。このガイドでは、os.system
、os.popen
、および subprocess
モジュールの使用に焦点を当てて、システムレベルのインタラクションを正確に制御する方法を説明します。
os.system
コマンドを使用すると、シェルコマンドを直接実行できます。
import os
exit_code = os.system('echo Hello, World!')
print("Exit code:", exit_code)
出力
Hello, World!
Exit code: 0
上記の例では、os.system
を使用して echo
コマンドを呼び出しています。終了コードは操作の成功に関する情報を提供します。
os.popen
関数を使用すると、サブシェルでコマンドを実行し、読み取りまたは書き込みのためのファイルインタフェースを提供できます。
import os
file = os.popen('echo Hello, World!', 'r')
output = file.read()
print("Output:", output)
file.close()
出力
Output: Hello, World!
このスニペットは、os.popen
を使用してコマンドの出力を変数に読み込む方法を示しています。
subprocess
モジュールはコマンドの実行プロセスをより詳細に制御できます。subprocess.Popen
を使用すると、コマンドを実行し、その出力を取得し、プロセスをより柔軟に管理できます。
import subprocess
process = subprocess.Popen(['echo', 'Hello, World!'], stdout=subprocess.PIPE)
output, error = process.communicate()
print("Output:", output.decode())
出力
Output: Hello, World!
ここでは、subprocess.Popen
を使用して echo
コマンドを実行し、出力をキャプチャしてさらなる処理に利用しています。
subprocess.call
と subprocess.run
はシェルコマンドを実行するための便利な方法です。以下は使用法を示す例です。
# subprocess.call の使用
exit_code = subprocess.call(['echo', 'Using call'])
print("Exit code using call:", exit_code)
# subprocess.run の使用
result = subprocess.run(['echo', 'Using run'], stdout=subprocess.PIPE)
print("Output using run:", result.stdout.decode())
出力
Using call
Exit code using call: 0
Using run
Output using run: Using run
これらのメソッドにより、コマンドの実行が簡単になります。subprocess.run
は Python 3.5 以降でより多くの機能を提供します。
システムコマンドを実行し外部プログラムを実行することは、多くの自動化と統合のタスクの重要な一部です。Python の柔軟性と os
、subprocess
などのモジュールによって、これらのタスクがよりアクセス可能で保守しやすくなります。os.system
、os.popen
、またはより強力な subprocess
メソッドを選択するかどうかは、アプリケーションの具体的なニーズによります。これらの例を試してみることで、機能を理解しプロジェクトで活用することができるでしょう。
os.system
と subprocess
の主な違いは何ですか?
os.system
はよりシンプルですが、制御が少なく、subprocess
はより多くの機能とプロセス制御を提供します。subprocess.Popen
および subprocess.run
は標準出力と標準エラー ストリームの両方をキャプチャすることができます。[Python] 多彩な実例を通じてビット演算子を深く理解 |
---|
[Python] 多彩な実例を通じて関係演算子を深く理解 |
[Python] 'zsh: command not found: python' エラーの解決法 |
[Python] 多彩な実例を通じて代入演算子を深く理解 |
[Python] 多彩な実例を通じて算術演算子を深く理解 |
CloneCoding
1行のコードから始まる革新!