symbian-qemu-0.9.1-12/python-2.6.1/Doc/library/popen2.rst
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 
       
     2 :mod:`popen2` --- Subprocesses with accessible I/O streams
       
     3 ==========================================================
       
     4 
       
     5 .. module:: popen2
       
     6    :synopsis: Subprocesses with accessible standard I/O streams.
       
     7    :deprecated:
       
     8 .. sectionauthor:: Drew Csillag <drew_csillag@geocities.com>
       
     9 
       
    10 
       
    11 .. deprecated:: 2.6
       
    12    This module is obsolete.  Use the :mod:`subprocess` module.  Check 
       
    13    especially the :ref:`subprocess-replacements` section.
       
    14 
       
    15 This module allows you to spawn processes and connect to their
       
    16 input/output/error pipes and obtain their return codes under Unix and Windows.
       
    17 
       
    18 The :mod:`subprocess` module provides more powerful facilities for spawning new
       
    19 processes and retrieving their results.  Using the :mod:`subprocess` module is
       
    20 preferable to using the :mod:`popen2` module.
       
    21 
       
    22 The primary interface offered by this module is a trio of factory functions.
       
    23 For each of these, if *bufsize* is specified,  it specifies the buffer size for
       
    24 the I/O pipes.  *mode*, if provided, should be the string ``'b'`` or ``'t'``; on
       
    25 Windows this is needed to determine whether the file objects should be opened in
       
    26 binary or text mode.  The default value for *mode* is ``'t'``.
       
    27 
       
    28 On Unix, *cmd* may be a sequence, in which case arguments will be passed
       
    29 directly to the program without shell intervention (as with :func:`os.spawnv`).
       
    30 If *cmd* is a string it will be passed to the shell (as with :func:`os.system`).
       
    31 
       
    32 The only way to retrieve the return codes for the child processes is by using
       
    33 the :meth:`poll` or :meth:`wait` methods on the :class:`Popen3` and
       
    34 :class:`Popen4` classes; these are only available on Unix.  This information is
       
    35 not available when using the :func:`popen2`, :func:`popen3`, and :func:`popen4`
       
    36 functions, or the equivalent functions in the :mod:`os` module. (Note that the
       
    37 tuples returned by the :mod:`os` module's functions are in a different order
       
    38 from the ones returned by the :mod:`popen2` module.)
       
    39 
       
    40 
       
    41 .. function:: popen2(cmd[, bufsize[, mode]])
       
    42 
       
    43    Executes *cmd* as a sub-process.  Returns the file objects ``(child_stdout,
       
    44    child_stdin)``.
       
    45 
       
    46 
       
    47 .. function:: popen3(cmd[, bufsize[, mode]])
       
    48 
       
    49    Executes *cmd* as a sub-process.  Returns the file objects ``(child_stdout,
       
    50    child_stdin, child_stderr)``.
       
    51 
       
    52 
       
    53 .. function:: popen4(cmd[, bufsize[, mode]])
       
    54 
       
    55    Executes *cmd* as a sub-process.  Returns the file objects
       
    56    ``(child_stdout_and_stderr, child_stdin)``.
       
    57 
       
    58    .. versionadded:: 2.0
       
    59 
       
    60 On Unix, a class defining the objects returned by the factory functions is also
       
    61 available.  These are not used for the Windows implementation, and are not
       
    62 available on that platform.
       
    63 
       
    64 
       
    65 .. class:: Popen3(cmd[, capturestderr[, bufsize]])
       
    66 
       
    67    This class represents a child process.  Normally, :class:`Popen3` instances are
       
    68    created using the :func:`popen2` and :func:`popen3` factory functions described
       
    69    above.
       
    70 
       
    71    If not using one of the helper functions to create :class:`Popen3` objects, the
       
    72    parameter *cmd* is the shell command to execute in a sub-process.  The
       
    73    *capturestderr* flag, if true, specifies that the object should capture standard
       
    74    error output of the child process. The default is false.  If the *bufsize*
       
    75    parameter is specified, it specifies the size of the I/O buffers to/from the
       
    76    child process.
       
    77 
       
    78 
       
    79 .. class:: Popen4(cmd[, bufsize])
       
    80 
       
    81    Similar to :class:`Popen3`, but always captures standard error into the same
       
    82    file object as standard output.  These are typically created using
       
    83    :func:`popen4`.
       
    84 
       
    85    .. versionadded:: 2.0
       
    86 
       
    87 
       
    88 .. _popen3-objects:
       
    89 
       
    90 Popen3 and Popen4 Objects
       
    91 -------------------------
       
    92 
       
    93 Instances of the :class:`Popen3` and :class:`Popen4` classes have the following
       
    94 methods:
       
    95 
       
    96 
       
    97 .. method:: Popen3.poll()
       
    98 
       
    99    Returns ``-1`` if child process hasn't completed yet, or its status code
       
   100    (see :meth:`wait`) otherwise.
       
   101 
       
   102 
       
   103 .. method:: Popen3.wait()
       
   104 
       
   105    Waits for and returns the status code of the child process.  The status code
       
   106    encodes both the return code of the process and information about whether it
       
   107    exited using the :cfunc:`exit` system call or died due to a signal.  Functions
       
   108    to help interpret the status code are defined in the :mod:`os` module; see
       
   109    section :ref:`os-process` for the :func:`W\*` family of functions.
       
   110 
       
   111 The following attributes are also available:
       
   112 
       
   113 
       
   114 .. attribute:: Popen3.fromchild
       
   115 
       
   116    A file object that provides output from the child process.  For :class:`Popen4`
       
   117    instances, this will provide both the standard output and standard error
       
   118    streams.
       
   119 
       
   120 
       
   121 .. attribute:: Popen3.tochild
       
   122 
       
   123    A file object that provides input to the child process.
       
   124 
       
   125 
       
   126 .. attribute:: Popen3.childerr
       
   127 
       
   128    A file object that provides error output from the child process, if
       
   129    *capturestderr* was true for the constructor, otherwise ``None``.  This will
       
   130    always be ``None`` for :class:`Popen4` instances.
       
   131 
       
   132 
       
   133 .. attribute:: Popen3.pid
       
   134 
       
   135    The process ID of the child process.
       
   136 
       
   137 
       
   138 .. _popen2-flow-control:
       
   139 
       
   140 Flow Control Issues
       
   141 -------------------
       
   142 
       
   143 Any time you are working with any form of inter-process communication, control
       
   144 flow needs to be carefully thought out.  This remains the case with the file
       
   145 objects provided by this module (or the :mod:`os` module equivalents).
       
   146 
       
   147 When reading output from a child process that writes a lot of data to standard
       
   148 error while the parent is reading from the child's standard output, a deadlock
       
   149 can occur.  A similar situation can occur with other combinations of reads and
       
   150 writes.  The essential factors are that more than :const:`_PC_PIPE_BUF` bytes
       
   151 are being written by one process in a blocking fashion, while the other process
       
   152 is reading from the first process, also in a blocking fashion.
       
   153 
       
   154 .. Example explanation and suggested work-arounds substantially stolen
       
   155    from Martin von Löwis:
       
   156    http://mail.python.org/pipermail/python-dev/2000-September/009460.html
       
   157 
       
   158 There are several ways to deal with this situation.
       
   159 
       
   160 The simplest application change, in many cases, will be to follow this model in
       
   161 the parent process::
       
   162 
       
   163    import popen2
       
   164 
       
   165    r, w, e = popen2.popen3('python slave.py')
       
   166    e.readlines()
       
   167    r.readlines()
       
   168    r.close()
       
   169    e.close()
       
   170    w.close()
       
   171 
       
   172 with code like this in the child::
       
   173 
       
   174    import os
       
   175    import sys
       
   176 
       
   177    # note that each of these print statements
       
   178    # writes a single long string
       
   179 
       
   180    print >>sys.stderr, 400 * 'this is a test\n'
       
   181    os.close(sys.stderr.fileno())
       
   182    print >>sys.stdout, 400 * 'this is another test\n'
       
   183 
       
   184 In particular, note that ``sys.stderr`` must be closed after writing all data,
       
   185 or :meth:`readlines` won't return.  Also note that :func:`os.close` must be
       
   186 used, as ``sys.stderr.close()`` won't close ``stderr`` (otherwise assigning to
       
   187 ``sys.stderr`` will silently close it, so no further errors can be printed).
       
   188 
       
   189 Applications which need to support a more general approach should integrate I/O
       
   190 over pipes with their :func:`select` loops, or use separate threads to read each
       
   191 of the individual files provided by whichever :func:`popen\*` function or
       
   192 :class:`Popen\*` class was used.
       
   193 
       
   194 
       
   195 .. seealso::
       
   196 
       
   197    Module :mod:`subprocess`
       
   198       Module for spawning and managing subprocesses.
       
   199