Python で外部コマンドを実行する方法

Python subprocess

Python からのシステム コマンドの実行

Python は、外部プログラムやシステム コマンドをスクリプトから直接実行するための強力な機能を提供します。この機能を使用すると、オペレーティング システムで利用できる膨大なツールを利用しながら、Python のシンプルさを活用できます。

反復的なタスクを自動化する場合でも、複雑なワークフローを統合する場合でも、Python でシステム コマンドを呼び出す方法を理解すると、生産性が大幅に向上します。このガイドでは、これを効果的に達成するためのさまざまな方法を検討します。

指示 説明
subprocess.run サブシェルでコマンドを実行します。出力とエラーをキャプチャできます。
subprocess.run([...], capture_output=True) 実行されたコマンドの標準出力および標準エラーをキャプチャします。
subprocess.run([...], shell=True) シェルを通じてコマンドを実行し、ワイルドカードなどのシェル機能を許可します。
subprocess.Popen 新しいプロセスでコマンドを実行し、その実行をより詳細に制御できるようにします。
process.stdout.readline() プロセスの標準出力から出力を 1 行読み取ります。
os.system サブシェルでコマンドを実行します。これは、単純なコマンドの実行によく使用されます。
subprocess.check_output コマンドを実行し、その出力を返します。コマンドが失敗した場合は例外を発生させます。
os.environ.copy() 現在の環境変数のコピーを作成し、変更できるようにします。
env parameter in subprocess.run 新しいプロセスの環境変数を指定します。

Python でのスクリプト実行を理解する

提供されているスクリプトは、Python を使用して外部コマンドを実行するさまざまな方法を示しています。の コマンドは多用途であり、Python スクリプトからシェル コマンドを直接実行できます。例えば、 メッセージをコンソールに出力しますが、 の出力をキャプチャします ls -l コマンドを実行すると、詳細なディレクトリのリストが表示されます。使用する と ワイルドカード拡張などのシェル機能を使用できるため、より複雑なコマンドに便利です。

の コマンドは、非同期コマンドの実行と、プロセスの入出力ストリームとの対話を可能にすることで、コマンド実行をより詳細に制御します。たとえば、次のようなスクリプトの例は、 ローカル マシンに継続的に ping を送信し、出力の各行を読み取ります。さらに、 単純なコマンドの実行に使用されますが、柔軟性に欠けます。 subprocess。環境変数は、次を使用して変更し、サブプロセスに渡すことができます。 そしてその のパラメータ 、環境に基づいて動的なコマンドの実行が可能になります。

Python での外部コマンドの実行

Pythonのサブプロセスモジュールを使用する

import subprocess
# Example 1: Running a simple shell command
subprocess.run(['echo', 'Hello, World!'])
# Example 2: Capturing the output of a command
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
# Example 3: Running a command with shell=True
subprocess.run('echo Hello from the shell', shell=True)
# Example 4: Checking the return code
result = subprocess.run(['ls', 'nonexistentfile'], capture_output=True)
if result.returncode != 0:
    print('Command failed')
# Example 5: Using subprocess.Popen for more control
process = subprocess.Popen(['ping', 'localhost'], stdout=subprocess.PIPE)
while True:
    output = process.stdout.readline()
    if output == b'' and process.poll() is not None:
        break
    if output:
        print(output.strip().decode())

Python を使用したシステムタスクの自動化

os.system モジュールと subprocess モジュールの使用

import os
import subprocess
# Example 1: Using os.system to run a command
os.system('echo This is a test')
# Example 2: Running a command and capturing output with subprocess
result = subprocess.run(['date'], capture_output=True, text=True)
print('Current date and time:', result.stdout)
# Example 3: Executing multiple commands
commands = ['echo First command', 'echo Second command']
for cmd in commands:
    os.system(cmd)
# Example 4: Running a command with environment variables
env = os.environ.copy()
env['MY_VAR'] = 'Hello'
subprocess.run('echo $MY_VAR', shell=True, env=env)
# Example 5: Handling command errors
try:
    subprocess.check_output(['false_command'], stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
    print('An error occurred:', e.output.decode())

システムコマンド実行のための高度なテクニック

Python でシステム コマンドを実行するもう 1 つの側面には、 シェルコマンドの解析を処理するモジュール。このモジュールは、シェルコマンドをリスト形式に分割する方法を提供し、それを次に渡すことができます。 機能。これにより、スペースを含む引数が正しく処理されるようになります。さらに、 標準入力、出力、およびエラー ストリームを親プロセスに送信し、より複雑なプロセス間通信を可能にします。

たとえば、コマンドを連鎖させてその出力を順次処理するには、次のコマンドを使用して、あるコマンドの出力を別のコマンドにパイプすることで実現できます。 。これにより、シェル スクリプトで行うのと同様の強力なコマンド シーケンスを作成できます。も使用できます 複数のサブプロセス コマンドを同時に実行すると、特に I/O バウンドのタスクを処理する場合に、スクリプトの効率が向上します。

  1. Python でシェル コマンドを実行してその出力を取得するにはどうすればよいですか?
  2. 使用 と コマンドの出力をキャプチャします。
  3. 違いは何ですか そして ?
  4. はコマンドが完了するのを待つ単純なインターフェイスですが、 コマンドの実行をより詳細に制御できるようになり、非同期操作が可能になります。
  5. システムコマンド実行時のエラーはどのように処理すればよいですか?
  6. 使用 そして でブロックする エラーをキャッチして処理します。
  7. 環境変数をコマンドに渡すことはできますか?
  8. はい、使用してください パラメータの または 環境変数を渡すために。
  9. 複数のコマンドを順番に実行するにはどうすればよいですか?
  10. 使用 または ループまたはチェーンコマンドでパイプを使用して 。
  11. ユーザー入力が必要なコマンドを実行するにはどうすればよいですか?
  12. 使用 と を使用してプロセスと通信します 。
  13. 用途は何ですか コマンド実行中?
  14. シェル コマンドを正しく解析し、スペースを含む引数が適切に処理されるようにします。
  15. バックグラウンドでコマンドを実行するにはどうすればよいですか?
  16. 使用 プロセスが完了するのを待たずに、または バックグラウンド実行を管理します。

システムコマンド実行のための高度なテクニック

Python でシステム コマンドを実行するもう 1 つの側面には、 シェルコマンドの解析を処理するモジュール。このモジュールは、シェルコマンドをリスト形式に分割する方法を提供し、それを次に渡すことができます。 機能。これにより、スペースを含む引数が正しく処理されることが保証されます。さらに、 標準入力、出力、およびエラー ストリームを親プロセスに送信し、より複雑なプロセス間通信を可能にします。

たとえば、コマンドを連鎖させてその出力を順次処理するには、次のコマンドを使用して、あるコマンドの出力を別のコマンドにパイプすることで実現できます。 。これにより、シェル スクリプトで行うのと同様の強力なコマンド シーケンスを作成できます。も使用できます 複数のサブプロセス コマンドを同時に実行すると、特に I/O バウンドのタスクを処理する場合に、スクリプトの効率が向上します。

Python での外部コマンドの実行は、スクリプト作成や自動化タスクを大幅に強化できる多用途かつ強力な機能です。を使用することで、 モジュールを使用すると、シェル コマンドを実行し、その出力をキャプチャし、エラーを効果的に処理できます。の function は、基本的なコマンド実行のより簡単な代替手段を提供します。さらに、 モジュールは、複雑なシェル コマンドを適切に解析することを保証します。これらの手法を理解すると、オペレーティング システムのコマンド ライン ツールの可能性を最大限に活用しながら、Python の強みを活用できるようになります。