### 6 popen2.* を置き換える

注意: popen2 に対するコマンド引数が文字列の場合、 そのコマンドは /bin/sh 経由で実行されます。いっぽうこれが リストの場合、そのコマンドは直接実行されます。

    (child_stdout, child_stdin) = popen2.popen2("somestring", bufsize, mode)
    ==>
    p = Popen(["somestring"], shell=True, bufsize=bufsize,
              stdin=PIPE, stdout=PIPE, close_fds=True)
    (child_stdout, child_stdin) = (p.stdout, p.stdin)

    (child_stdout, child_stdin) = popen2.popen2(["mycmd", "myarg"], bufsize, mode)
    ==>
    p = Popen(["mycmd", "myarg"], bufsize=bufsize,
              stdin=PIPE, stdout=PIPE, close_fds=True)
    (child_stdout, child_stdin) = (p.stdout, p.stdin)

popen2.Popen3 および popen2.Popen4 は基本的には subprocess.Popen と同様です。 ただし、違う点は:

- subprocess.Popen は実行できなかった場合に例外を発生させます。

- capturestderr 引数は stderr 引数に代わりました。

- stdin=PIPE および stdout=PIPE を指定する必要があります。

- popen2 はデフォルトですべてのファイル記述子を閉じますが、subprocess.Popen では 明示的に close_fds=True を指定する必要があります。