# 9 `popen2` -- アクセス可能な I/O ストリームを持つ子プロセス生成

Unix, Windowsプラットフォームで利用できます。

このモジュールにより、Unix および Windows でプロセスを起動し、 その入力／出力／エラー出力パイプに接続し、そのリターンコード を取得することができます。

Python 2.0 から、この機能は `os` モジュールにある 関数を使って得ることができるので注意してください。 `os` にある関数はこのモジュールにおけるファクトリ関数 と同じ名前を持ちますが、戻り値に関する取り決めは `os` の関数の方がより直感的です。

このモジュールで提供されている第一のインタフェースは 3 つの ファクトリ関数です。これらの関数のいずれも、bufsize を 指定した場合、 I/O パイプのバッファサイズを決定します。 mode を指定する場合、文字列`'b'` または `'t'` でなければなりません; Windows では、ファイルオブジェクトを バイナリあるいはテキストモードのどちらで開くかを決めなければ なりません。mode の標準の値は `'t'` です。

Unixではcmdはシーケンスでもよく、その場合には (`os.spawnv()`のように)引数はプログラムシェルを経由せず直接渡 されます。 cmdが文字列の場合、(`os.system()`のように)シェルに渡されます。

子プロセスからのリターンコードを取得するには、`Popen3` および `Popen4` クラスの `poll()` あるいは `wait()` メソッドを使うしかありません; これらの機能は Unixでしか利用できません。この情報は `popen2()`、 `popen3()`、および `popen4()` 関数、 あるいは `os` モジュールにおける同等の関数の 使用によっては得ることができません。 (`os`モジュールの関数から返されるタプルは`popen2`モ ジュールの関数から返されるものとは違う順序です。)

`popen2`( | cmd[, bufsize[, mode]])

  cmd をサブプロセスとして実行します。ファイルオブジェクト `(child_stdout, child_stdin)` を返します。

`popen3`( | cmd[, bufsize[, mode]])

  cmd をサブプロセスとして実行します。ファイルオブジェクト `(child_stdout, child_stdin, child_stderr)` を返します。

`popen4`( | cmd[, bufsize[, mode]])

  cmd をサブプロセスとして実行します。ファイルオブジェクト `(child_stdout_and_stderr, child_stdin)`. バージョン 2.0 で 新たに追加 された仕様です。

Unixでは、ファクトリ関数によって返されるオブジェクトを定義している クラスも利用することができます。これらのオブジェクトは Windows 実装 で使われていないため、そのプラットフォーム上で使うことはできません。

クラス `Popen3`( | cmd[, capturestderr[, bufsize]])

  このクラスは子プロセスを表現します。通常、 `Popen3` インスタンスは上で述べた `popen2()` および `popen3()` ファクトリ関数を使って生成されます。

  `Popen3` オブジェクトを生成するためにいずれかのヘルパー関数を 使っていないのなら、cmd パラメタは子プロセスで実行する シェルコマンドになります。capturestderr フラグが真であれば、 このオブジェクトが子プロセスの標準エラー出力を捕獲しなければならない ことを意味します。標準の値は偽です。bufsize パラメタが存在 する場合、子プロセスへの／からの I/O バッファのサイズを指定します。

クラス `Popen4`( | cmd[, bufsize])

  `Popen3` に似ていますが、標準エラー出力を標準出力と同じファイル オブジェクトで捕獲します。このオブジェクトは通常 `popen4()` で 生成されます。 バージョン 2.0 で 新たに追加 された仕様です。