Python のサブプロセス モジュールとタイムアウト
サブプロセス モジュールは、外部コマンドを実行し、その出力をキャプチャし、そのライフサイクルを管理する便利な方法を提供します。ただし、デフォルトでは、その communication() メソッドはタイムアウトをサポートしません。これにより、実行時間の長いコマンドを実行するときに、呼び出しプロセスがデッドロックになる可能性があるという課題が生じます。
check_output を使用したタイムアウトの実装
Python 3.3 以降では、check_output() がPopen() および communication() のより効率的な代替手段。この関数はコマンドを評価し、その stdout 出力と stderr 出力をバイト文字列にマージし、コマンドがゼロ以外のステータスで終了した場合は CalledProcessError を発生させます。重要なのは、タイムアウトもサポートしているため、コマンドの最大実行時間を指定できることです。
from subprocess import STDOUT, check_output seconds = 10 # Timeout in seconds output = check_output(cmd, stderr=STDOUT, timeout=seconds)
この例では、check_output() 関数は cmd で指定されたコマンドを実行し、完了するまで待機します。 10秒以内に。コマンドに 10 秒以上かかる場合、TimeoutExpired エラーが発生します。
Python 2.x でのタイムアウトに subprocess32 を使用する
Python 2.x の場合、 subprocess32 バックポートは、Python 3.3 の check_output() と同じタイムアウト機能を提供します。 subprocess32 をインストールするには、pip を使用します:
pip install subprocess32
インストールしたら、subprocess32 の call() 関数を使用してタイムアウト付きでコマンドを実行できます:
import subprocess32 seconds = 10 # Timeout in seconds subprocess32.call(cmd, timeout=seconds)
追加の考慮事項
以上がPython の「subprocess」モジュールを使用するときにタイムアウトを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。