[Phothon]Popenクラス


Subprocessモジュールとは?
サブプロセスモジュールは、Pythonプログラム内で新しいプロセスをサポートし、I/Oパイプを接続してリターンコードを取得するモジュールであり、他の言語で生成されるプログラムを統合・制御できるモジュールである.
使用方法
新しいサブプロセスを作成するための推奨方法は、次の便利な関数です.より詳細な制御のためにPopenインタフェースを直接使用します.
Popenクラス
プロセス生成と管理モジュール内部はPopenクラスで管理される.実際、call-*クラスの関数はすべてこのクラスに基づいています.Popenは柔軟性に優れているため、組み込みの便利な関数だけでは処理できないエンクロージャを上書きする場合は、細かいオプションを直接制御する必要がある場合に使用できます.
Popenの作成
class subprocess.Popen(args, bufsize=-1, excutable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=None, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0, restoreflags=0, restore_signals=True, start_new_session=False, pass_fds=())
argsは、コマンドラインで文字列または入力するパラメータを空白に切り取るリストです.
stdin、stdout、stderrは、標準入力、標準出力、標準エラーの標準I/Oリダイレクトにそれぞれ対応します.ファイルディスクライタを使用して、ファイルの内容を標準I/Oで置き換えることができます.「通常」を省略すると、現在の標準I/Oはそのままになります.
shell=Trueの場合、サブプロセスとして与えられたコマンドを直接実行するのではなく、個別のサブshellを実行し、コマンドを実行します.値がTrueの場合、argsはリストではなく文字列です.ちなみに、Shellを使用すると、Shellが提供するパイプ、リダイレクト、Shellの文字列拡張を同時に使用することができます(FILES*のように、FILES 1 FILES 2 FILES 3…のように作成されます).
デフォルトでは、この関数はサブプロセスが終了するのを待っています.timeout値を設定すると、指定した時間(秒単位)が待機し、待機時間を超えるとTimeoutExpired例外が発生します.
Popenオブジェクトのメソッド
以下の方法は、Popenジェネレータを使用して作成したオブジェクトが提供する方法です.
.poll():サブプロセスを終了するかどうかを確認します.
.wait(timeout=None):サブプロセスの終了を待つ.サブプロセスの戻りコードを返します.
.communication(input=None,timeout=None):標準出力のEOFに遭遇するまで、サブプロセスの標準入力としてデータを送信します.(プロセスの終了を待ちます.)この関数は、(stdout data,stderr data)のtupleを返します.この関数を使用するには、stdin=PIPEオプションを使用してサブプロセスを開始する必要があります.
Popen.send signal(signal):サブプロセスに信号を送信します.
Popen.terminate():サブプロセスに終了信号を送信します.
Popen.kill():サブプロセスを強制的に殺す.
Popen.args:指定したargsを返します.
Popen.stdin:PIPEの場合、オブジェクトは読み書き可能なストリームオブジェクトです.
Popen.stdout:PIPEは読み取り可能なオブジェクトです.
Popen.stderr:PIPEは読み取り可能なオブジェクトです.
Popen.pid:サブプロセスのpid値
Popen.returncode:サブプロセスの終了時に戻りコード値があります.
Quick Demo
サブプロセスを使用してサブプロセスを実行する方法は簡単です.次のコードでは、Popenジェネレータがプロセスを開始します.通信メソッドは、サブプロセスの出力を取得し、サブプロセスの終了を待つ.
import subprocess

proc = subprocess.Popen(
	['echo', 'Hello world'],
    stdout = subprocess.PIPE
    )
out, err = proc.communicate()
print(out)
print(out.decode('utf-8'))

# 결과
# b'Hello world\n'
# Hello world
原文:http://theyoonicon.com/python-popen-%ED%81%B4%EB%9E%98%EC%8A%A4/