18.5.6。 サブプロセス
ソースコード: :source: `Lib / asyncio / subprocess.py`
18.5.6.1。 Windowsイベントループ
Windowsでは、デフォルトのイベントループは SelectorEventLoop であり、サブプロセスをサポートしていません。 代わりに ProactorEventLoop を使用する必要があります。 Windowsでの使用例:
18.5.6.2。 サブプロセスを作成する:プロセスを使用した高レベルAPI
AbstractEventLoop.connect_read_pipe()
およびAbstractEventLoop.connect_write_pipe()
メソッドを使用してパイプを接続します。
18.5.6.3。 サブプロセスを作成します:subprocess.Popenを使用した低レベルAPI
サブプロセスモジュールを使用して、サブプロセスを非同期で実行します。
も参照してください
AbstractEventLoop.connect_read_pipe()
およびAbstractEventLoop.connect_write_pipe()
メソッド。
18.5.6.4。 定数
- asyncio.subprocess.PIPE
- [X31X] および
create_subprocess_exec()
の stdin 、 stdout 、または stderr 引数として使用できる特別な値であり、標準ストリームへのパイプを開く必要があります。
- asyncio.subprocess.STDOUT
create_subprocess_shell()
およびcreate_subprocess_exec()
の stderr 引数として使用できる特別な値であり、標準エラーが標準出力と同じハンドルに入る必要があることを示します。
- asyncio.subprocess.DEVNULL
- stdin 、 stdout 、または stderr 引数として
create_subprocess_shell()
およびcreate_subprocess_exec()
に使用できる特別な値であり、特殊ファイル os.devnull が使用されます。
18.5.6.5。 プロセス
- class asyncio.subprocess.Process
create_subprocess_exec()
またはcreate_subprocess_shell()
関数によって作成されたサブプロセス。Process クラスのAPIは、 subprocess.Popen クラスのAPIに近くなるように設計されていますが、いくつかの違いがあります。
明示的な poll()メソッドはありません
communicate()および wait()メソッドは timeout パラメーターを取りません。
wait_for()
関数を使用してくださいUniversal_newlines パラメーターはサポートされていません(バイト文字列のみがサポートされています)
Process クラスの
wait()
メソッドは非同期ですが、 Popen クラスの wait()メソッドはビジーループとして実装されています。
このクラスはスレッドセーフではありません。 サブプロセスとスレッドセクションも参照してください。
- send_signal(signal)
シグナル signal を子プロセスに送信します。
ノート
Windowsでは、
SIGTERM
は terminate()のエイリアスです。CTRL_C_EVENT
およびCTRL_BREAK_EVENT
は、CREATE_NEW_PROCESS_GROUP
を含む creationflags パラメーターで開始されたプロセスに送信できます。
- terminate()
子供を止めなさい。 Posix OSでは、メソッドは
signal.SIGTERM
を子に送信します。 Windowsでは、Win32API関数TerminateProcess()
が呼び出されて子が停止します。
- kill()
子供を殺します。 Posix OSでは、関数は
SIGKILL
を子に送信します。 Windowsでは、 kill()は terminate()のエイリアスです。
- stdin
標準入力ストリーム( StreamWriter )、プロセスが
stdin=None
で作成された場合はNone
。
- stdout
標準出力ストリーム( StreamReader )、プロセスが
stdout=None
で作成された場合はNone
。
- stderr
標準エラーストリーム( StreamReader )、プロセスが
stderr=None
で作成された場合はNone
。
警告
.stdin.write 、 .stdout.read 、 .stderr.read ではなく、
communicate()
メソッドを使用して、ストリームの一時停止によるデッドロックを回避します。子プロセスの読み取りまたは書き込みとブロック。- pid
プロセスの識別子。
create_subprocess_shell()
関数によって作成されたプロセスの場合、この属性は生成されたシェルのプロセス識別子であることに注意してください。
- returncode
プロセスが終了したときの戻りコード。
None
値は、プロセスがまだ終了していないことを示します。負の値
-N
は、子がシグナルN
(Unixのみ)によって終了したことを示します。
18.5.6.6。 サブプロセスとスレッド
asyncioは、異なるスレッドからのサブプロセスの実行をサポートしていますが、制限があります。
- イベントループはメインスレッドで実行する必要があります
- 子ウォッチャーは、他のスレッドからサブプロセスを実行する前に、メインスレッドでインスタンス化する必要があります。 メインスレッドで
get_child_watcher()
関数を呼び出して、子ウォッチャーをインスタンス化します。
asyncio.subprocess.Process クラスはスレッドセーフではありません。
18.5.6.7。 サブプロセスの例
18.5.6.7.1。 トランスポートとプロトコルを使用したサブプロセス
サブプロセスの出力を取得し、サブプロセスの終了を待機するために使用するサブプロセスプロトコルの例。 サブプロセスは、AbstractEventLoop.subprocess_exec()
メソッドによって作成されます。
18.5.6.7.2。 ストリームを使用したサブプロセス
Process クラスを使用してサブプロセスを制御し、 StreamReader クラスを使用して標準出力から読み取る例。 サブプロセスは、create_subprocess_exec()
関数によって作成されます。