Python中subprocess.popen的使い方は何ですか。
subprocess.Popenは、新しいプロセスを作成するための関数であり、特定の操作を実行するためにシステムコマンドや他の実行可能ファイルを呼び出します。
subprocess.Popenの一般的な引数は以下の通りです:
- args: コマンドまたは実行ファイルとその引数を指定するための文字列または文字列のリスト。
- bufsizeはオプションの整数パラメータで、バッファのサイズを設定します。デフォルト値は0(バッファなし)です。
- stdin、stdout、stderrはそれぞれ標準入力、標準出力、標準エラーのストリームを指定するために使用されます。これらはファイルオブジェクトまたは対応するファイル記述子を表す整数であることができます。デフォルト値はNoneであり、親プロセスの対応するストリームを継承することを意味します。
- シェル:コマンドを実行する際にシェルを使用するかどうかを指定するオプションのブール値パラメータ。デフォルト値はFalseです。
- universal_newlines:\n変換をするかどうか指定するオプションのブール値パラメータ。デフォルト値はFalseです。
subprocess.Popenは、Popenオブジェクトを返し、そのオブジェクトのメソッドや属性を使用して新しいプロセスとやり取りできます。一般的に使用されるメソッドや属性は次のとおりです。
- communicate(input=None):子プロセスとやり取りし、データを送信(あれば)して完了を待ちます。このメソッドは、標準出力と標準エラー出力を含むタプルを返します。
- wait()関数は、子プロセスの終了を待ち、その終了ステータスを返します。
- poll()関数:子プロセスが終了しているかどうかをチェックし、終了していれば終了状態を返し、そうでない場合はNoneを返す。
- terminate():子プロセスを終了します。
- kill()関数:子プロセスを終了させる。
- 戻り値:子プロセスの終了ステータス。
subprocess.Popenを使用したシンプルな例を以下に示します。
import subprocess
# 执行一个命令并获取输出
result = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE)
output = result.communicate()[0].decode("utf-8")
print(output)
# 执行一个命令并等待其完成
subprocess.Popen(["ls", "-l"]).wait()
print("Done")
上記の例では、最初にsubprocess.Popenを使用してls -lコマンドを実行し、stdout=subprocess.PIPEパラメーターを使用して標準出力をパイプにリダイレクトし、その後、communicate()メソッドを使用してコマンドの出力を取得し、文字列に変換して印刷しました。次に、別のls -lコマンドを実行するためにsubprocess.Popenを使用し、その後、wait()メソッドを使用してコマンドが完了するのを待ち、コマンドが完了した後に”Done”を印刷しました。