## 1 subprocess モジュールを使う

このモジュールでは `Popen` と呼ばれるクラスを定義しています:

クラス `Popen`( | args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

  各引数の説明は以下のとおりです:

  args は文字列か、あるいはプログラムへの引数のシーケンスである 必要があります。実行するプログラムは通常 args シーケンスあるいは文字列の 最初の要素ですが、executable 引数を使うことにより明示的に指定することもできます。

  Unix で shell=False の場合 (デフォルト): この場合、 Popen クラスは子プログラムを実行するのに `os.execvp()` を使います。 args は通常シーケンスでなければなりません。文字列の場合は ひとつだけの文字列要素 (= 実行するプログラム名) をもったシーケンスとして 扱われます。

  Unix で shell=True の場合: args が文字列の場合、これは シェルを介して実行されるコマンドライン文字列を指定します。args が シーケンスの場合、その最初の要素はコマンドライン文字列となり、 それ以降の要素はすべてシェルへの追加の引数として扱われます。

  Windows の場合: `Popen` クラスは子プログラムを実行するのに 文字列の扱える CreateProcess() を使います。args が シーケンスの場合、これは `list2cmdline` メソッドをつかって コマンドライン文字列に変換されます。注意: すべての MS Windows アプリケーションがコマンドライン引数を同じやりかたで 解釈するとは限りません。`list2cmdline` は MS C ランタイムと 同じやりかたで文字列を解釈するアプリケーション用に設計されています。

  bufsize は、もしこれが与えられた場合、ビルトインの open() 関数の該当する引数と同じ意味をもちます: `0` はバッファされないことを意味し、 `1` は行ごとにバッファされることを、それ以外の正の値は (ほぼ) その大きさのバッファが使われることを意味します。 負の bufsize はシステムのデフォルト値が使われることを意味し、 通常これはバッファがすべて有効となります。bufsize のデフォルト値は `0` (バッファされない) です。

  executable 引数には実行するプログラムを指定します。 これはほとんど必要ありません: ふつう、実行するプログラムは args 引数で指定されるからです。shell=True の場合、 executable 引数は使用するシェルを指定します。 Unix では、デフォルトのシェルは /bin/sh です。Windows では、デフォルトのシェルは COMSPEC 環境変数で指定されます。

  stdin、 stdout および stderr には、 実行するプログラムの標準入力、標準出力、および標準エラー出力の ファイルハンドルをそれぞれ指定します。とりうる値は `PIPE` 、既存のファイル記述子 (正の整数) 、 既存のファイルオブジェクト、そして `None` です。 `PIPE` を指定すると新しいパイプが子プロセスに向けて作られます。 `None` を指定するとリダイレクトは起こりません。子プロセスの ファイルハンドルはすべて親から受け継がれます。 加えて、stderr を `STDOUT` にすると、アプリケーションの stderr からの出力は stdout と同じファイルハンドルに出力されます。

  preexec_fn に callable オブジェクトが指定されている場合、 このオブジェクトは子プロセスが起動されてから、プログラムが exec される直前に呼ばれます。

  close_fds が真の場合、子プロセスが実行される前に `0`、 `1` および `2` をのぞくすべてのファイル記述子が 閉じられます。

  shell が `True` の場合、 指定されたコマンドはシェルを介して実行されます。

  cwd が `None` 以外の場合、子プロセスが実行される前に カレントディレクトリが cwd に変更されます。

  env が `None` 以外の場合、これは新しいプロセスでの 環境変数を定義します。

  universal_newlines が `True` の場合、 stdout および stderr のファイルオブジェクトはテキストファイルとして open されますが、行の終端は Unix 形式の行末 `'\n'` か、 Macintosh 形式の行末 `'\r'` か、あるいは Windows 形式の行末 `'\r\n'` のいずれも許されます。これらすべての外部表現は Python プログラムには `'\n'` として認識されます。 注意: この機能は Python に universal newline がサポートされている場合 (デフォルト) にのみ 有効です。また、 `stdout`, `stdin` および `stderr` の ファイルオブジェクトの newlines 属性は communicate() メソッドでは 更新されません。

  startupinfo および creationflags が与えられた場合、 これらは内部で呼びだされる CreateProcess() 関数に渡されます。 これらはメインウインドウの形状や新しいプロセスの優先度などを 指定することができます。 (Windows のみ)