# 17.4 `popen2` -- Subprocesses with accessible I/O streams

This module allows you to spawn processes and connect to their input/output/error pipes and obtain their return codes under Unix and Windows.

The `subprocess` module provides more powerful facilities for spawning new processes and retrieving their results. Using the `subprocess` module is preferable to using the `popen2` module.

The primary interface offered by this module is a trio of factory functions. For each of these, if bufsize is specified, it specifies the buffer size for the I/O pipes. mode, if provided, should be the string `'b'` or `'t'`; on Windows this is needed to determine whether the file objects should be opened in binary or text mode. The default value for mode is `'t'`.

On Unix, cmd may be a sequence, in which case arguments will be passed directly to the program without shell intervention (as with `os.spawnv()`). If cmd is a string it will be passed to the shell (as with `os.system()`).

The only way to retrieve the return codes for the child processes is by using the `poll()` or `wait()` methods on the `Popen3` and `Popen4` classes; these are only available on Unix. This information is not available when using the `popen2()`, `popen3()`, and `popen4()` functions, or the equivalent functions in the `os` module. (Note that the tuples returned by the `os` module's functions are in a different order from the ones returned by the `popen2` module.)

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

  Executes cmd as a sub-process. Returns the file objects `(child_stdout, child_stdin)`.

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

  Executes cmd as a sub-process. Returns the file objects `(child_stdout, child_stdin, child_stderr)`.

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

  Executes cmd as a sub-process. Returns the file objects `(child_stdout_and_stderr, child_stdin)`. New in version 2.0.

On Unix, a class defining the objects returned by the factory functions is also available. These are not used for the Windows implementation, and are not available on that platform.

class `Popen3`( | cmd[, capturestderr[, bufsize]])

  This class represents a child process. Normally, `Popen3` instances are created using the `popen2()` and `popen3()` factory functions described above.

  If not using one of the helper functions to create `Popen3` objects, the parameter cmd is the shell command to execute in a sub-process. The capturestderr flag, if true, specifies that the object should capture standard error output of the child process. The default is false. If the bufsize parameter is specified, it specifies the size of the I/O buffers to/from the child process.

class `Popen4`( | cmd[, bufsize])

  Similar to `Popen3`, but always captures standard error into the same file object as standard output. These are typically created using `popen4()`. New in version 2.0.