17db96d56Sopenharmony_ci:mod:`subprocess` --- Subprocess management
27db96d56Sopenharmony_ci===========================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: subprocess
57db96d56Sopenharmony_ci   :synopsis: Subprocess management.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci.. moduleauthor:: Peter Åstrand <astrand@lysator.liu.se>
87db96d56Sopenharmony_ci.. sectionauthor:: Peter Åstrand <astrand@lysator.liu.se>
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ci**Source code:** :source:`Lib/subprocess.py`
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci--------------
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ciThe :mod:`subprocess` module allows you to spawn new processes, connect to their
157db96d56Sopenharmony_ciinput/output/error pipes, and obtain their return codes.  This module intends to
167db96d56Sopenharmony_cireplace several older modules and functions::
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ci   os.system
197db96d56Sopenharmony_ci   os.spawn*
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ciInformation about how the :mod:`subprocess` module can be used to replace these
227db96d56Sopenharmony_cimodules and functions can be found in the following sections.
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci.. seealso::
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci   :pep:`324` -- PEP proposing the subprocess module
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ci.. include:: ../includes/wasm-notavail.rst
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ciUsing the :mod:`subprocess` Module
317db96d56Sopenharmony_ci----------------------------------
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ciThe recommended approach to invoking subprocesses is to use the :func:`run`
347db96d56Sopenharmony_cifunction for all use cases it can handle. For more advanced use cases, the
357db96d56Sopenharmony_ciunderlying :class:`Popen` interface can be used directly.
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci.. function:: run(args, *, stdin=None, input=None, stdout=None, stderr=None,\
397db96d56Sopenharmony_ci                  capture_output=False, shell=False, cwd=None, timeout=None, \
407db96d56Sopenharmony_ci                  check=False, encoding=None, errors=None, text=None, env=None, \
417db96d56Sopenharmony_ci                  universal_newlines=None, **other_popen_kwargs)
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ci   Run the command described by *args*.  Wait for command to complete, then
447db96d56Sopenharmony_ci   return a :class:`CompletedProcess` instance.
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ci   The arguments shown above are merely the most common ones, described below
477db96d56Sopenharmony_ci   in :ref:`frequently-used-arguments` (hence the use of keyword-only notation
487db96d56Sopenharmony_ci   in the abbreviated signature). The full function signature is largely the
497db96d56Sopenharmony_ci   same as that of the :class:`Popen` constructor - most of the arguments to
507db96d56Sopenharmony_ci   this function are passed through to that interface. (*timeout*,  *input*,
517db96d56Sopenharmony_ci   *check*, and *capture_output* are not.)
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci   If *capture_output* is true, stdout and stderr will be captured.
547db96d56Sopenharmony_ci   When used, the internal :class:`Popen` object is automatically created with
557db96d56Sopenharmony_ci   ``stdout=PIPE`` and ``stderr=PIPE``. The *stdout* and *stderr* arguments may
567db96d56Sopenharmony_ci   not be supplied at the same time as *capture_output*.  If you wish to capture
577db96d56Sopenharmony_ci   and combine both streams into one, use ``stdout=PIPE`` and ``stderr=STDOUT``
587db96d56Sopenharmony_ci   instead of *capture_output*.
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ci   The *timeout* argument is passed to :meth:`Popen.communicate`. If the timeout
617db96d56Sopenharmony_ci   expires, the child process will be killed and waited for.  The
627db96d56Sopenharmony_ci   :exc:`TimeoutExpired` exception will be re-raised after the child process
637db96d56Sopenharmony_ci   has terminated.
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci   The *input* argument is passed to :meth:`Popen.communicate` and thus to the
667db96d56Sopenharmony_ci   subprocess's stdin.  If used it must be a byte sequence, or a string if
677db96d56Sopenharmony_ci   *encoding* or *errors* is specified or *text* is true.  When
687db96d56Sopenharmony_ci   used, the internal :class:`Popen` object is automatically created with
697db96d56Sopenharmony_ci   ``stdin=PIPE``, and the *stdin* argument may not be used as well.
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci   If *check* is true, and the process exits with a non-zero exit code, a
727db96d56Sopenharmony_ci   :exc:`CalledProcessError` exception will be raised. Attributes of that
737db96d56Sopenharmony_ci   exception hold the arguments, the exit code, and stdout and stderr if they
747db96d56Sopenharmony_ci   were captured.
757db96d56Sopenharmony_ci
767db96d56Sopenharmony_ci   If *encoding* or *errors* are specified, or *text* is true,
777db96d56Sopenharmony_ci   file objects for stdin, stdout and stderr are opened in text mode using the
787db96d56Sopenharmony_ci   specified *encoding* and *errors* or the :class:`io.TextIOWrapper` default.
797db96d56Sopenharmony_ci   The *universal_newlines* argument is equivalent  to *text* and is provided
807db96d56Sopenharmony_ci   for backwards compatibility. By default, file objects are opened in binary mode.
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ci   If *env* is not ``None``, it must be a mapping that defines the environment
837db96d56Sopenharmony_ci   variables for the new process; these are used instead of the default
847db96d56Sopenharmony_ci   behavior of inheriting the current process' environment. It is passed
857db96d56Sopenharmony_ci   directly to :class:`Popen`. This mapping can be str to str on any platform
867db96d56Sopenharmony_ci   or bytes to bytes on POSIX platforms much like :data:`os.environ` or
877db96d56Sopenharmony_ci   :data:`os.environb`.
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci   Examples::
907db96d56Sopenharmony_ci
917db96d56Sopenharmony_ci      >>> subprocess.run(["ls", "-l"])  # doesn't capture output
927db96d56Sopenharmony_ci      CompletedProcess(args=['ls', '-l'], returncode=0)
937db96d56Sopenharmony_ci
947db96d56Sopenharmony_ci      >>> subprocess.run("exit 1", shell=True, check=True)
957db96d56Sopenharmony_ci      Traceback (most recent call last):
967db96d56Sopenharmony_ci        ...
977db96d56Sopenharmony_ci      subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci      >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True)
1007db96d56Sopenharmony_ci      CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0,
1017db96d56Sopenharmony_ci      stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')
1027db96d56Sopenharmony_ci
1037db96d56Sopenharmony_ci   .. versionadded:: 3.5
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_ci   .. versionchanged:: 3.6
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ci      Added *encoding* and *errors* parameters
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ci   .. versionchanged:: 3.7
1107db96d56Sopenharmony_ci
1117db96d56Sopenharmony_ci      Added the *text* parameter, as a more understandable alias of *universal_newlines*.
1127db96d56Sopenharmony_ci      Added the *capture_output* parameter.
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci   .. versionchanged:: 3.11.3
1157db96d56Sopenharmony_ci
1167db96d56Sopenharmony_ci      Changed Windows shell search order for ``shell=True``. The current
1177db96d56Sopenharmony_ci      directory and ``%PATH%`` are replaced with ``%COMSPEC%`` and
1187db96d56Sopenharmony_ci      ``%SystemRoot%\System32\cmd.exe``. As a result, dropping a
1197db96d56Sopenharmony_ci      malicious program named ``cmd.exe`` into a current directory no
1207db96d56Sopenharmony_ci      longer works.
1217db96d56Sopenharmony_ci
1227db96d56Sopenharmony_ci.. class:: CompletedProcess
1237db96d56Sopenharmony_ci
1247db96d56Sopenharmony_ci   The return value from :func:`run`, representing a process that has finished.
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci   .. attribute:: args
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci      The arguments used to launch the process. This may be a list or a string.
1297db96d56Sopenharmony_ci
1307db96d56Sopenharmony_ci   .. attribute:: returncode
1317db96d56Sopenharmony_ci
1327db96d56Sopenharmony_ci      Exit status of the child process. Typically, an exit status of 0 indicates
1337db96d56Sopenharmony_ci      that it ran successfully.
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ci      A negative value ``-N`` indicates that the child was terminated by signal
1367db96d56Sopenharmony_ci      ``N`` (POSIX only).
1377db96d56Sopenharmony_ci
1387db96d56Sopenharmony_ci   .. attribute:: stdout
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci      Captured stdout from the child process. A bytes sequence, or a string if
1417db96d56Sopenharmony_ci      :func:`run` was called with an encoding, errors, or text=True.
1427db96d56Sopenharmony_ci      ``None`` if stdout was not captured.
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ci      If you ran the process with ``stderr=subprocess.STDOUT``, stdout and
1457db96d56Sopenharmony_ci      stderr will be combined in this attribute, and :attr:`stderr` will be
1467db96d56Sopenharmony_ci      ``None``.
1477db96d56Sopenharmony_ci
1487db96d56Sopenharmony_ci   .. attribute:: stderr
1497db96d56Sopenharmony_ci
1507db96d56Sopenharmony_ci      Captured stderr from the child process. A bytes sequence, or a string if
1517db96d56Sopenharmony_ci      :func:`run` was called with an encoding, errors, or text=True.
1527db96d56Sopenharmony_ci      ``None`` if stderr was not captured.
1537db96d56Sopenharmony_ci
1547db96d56Sopenharmony_ci   .. method:: check_returncode()
1557db96d56Sopenharmony_ci
1567db96d56Sopenharmony_ci      If :attr:`returncode` is non-zero, raise a :exc:`CalledProcessError`.
1577db96d56Sopenharmony_ci
1587db96d56Sopenharmony_ci   .. versionadded:: 3.5
1597db96d56Sopenharmony_ci
1607db96d56Sopenharmony_ci.. data:: DEVNULL
1617db96d56Sopenharmony_ci
1627db96d56Sopenharmony_ci   Special value that can be used as the *stdin*, *stdout* or *stderr* argument
1637db96d56Sopenharmony_ci   to :class:`Popen` and indicates that the special file :data:`os.devnull`
1647db96d56Sopenharmony_ci   will be used.
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci   .. versionadded:: 3.3
1677db96d56Sopenharmony_ci
1687db96d56Sopenharmony_ci
1697db96d56Sopenharmony_ci.. data:: PIPE
1707db96d56Sopenharmony_ci
1717db96d56Sopenharmony_ci   Special value that can be used as the *stdin*, *stdout* or *stderr* argument
1727db96d56Sopenharmony_ci   to :class:`Popen` and indicates that a pipe to the standard stream should be
1737db96d56Sopenharmony_ci   opened.  Most useful with :meth:`Popen.communicate`.
1747db96d56Sopenharmony_ci
1757db96d56Sopenharmony_ci
1767db96d56Sopenharmony_ci.. data:: STDOUT
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ci   Special value that can be used as the *stderr* argument to :class:`Popen` and
1797db96d56Sopenharmony_ci   indicates that standard error should go into the same handle as standard
1807db96d56Sopenharmony_ci   output.
1817db96d56Sopenharmony_ci
1827db96d56Sopenharmony_ci
1837db96d56Sopenharmony_ci.. exception:: SubprocessError
1847db96d56Sopenharmony_ci
1857db96d56Sopenharmony_ci    Base class for all other exceptions from this module.
1867db96d56Sopenharmony_ci
1877db96d56Sopenharmony_ci    .. versionadded:: 3.3
1887db96d56Sopenharmony_ci
1897db96d56Sopenharmony_ci
1907db96d56Sopenharmony_ci.. exception:: TimeoutExpired
1917db96d56Sopenharmony_ci
1927db96d56Sopenharmony_ci    Subclass of :exc:`SubprocessError`, raised when a timeout expires
1937db96d56Sopenharmony_ci    while waiting for a child process.
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_ci    .. attribute:: cmd
1967db96d56Sopenharmony_ci
1977db96d56Sopenharmony_ci        Command that was used to spawn the child process.
1987db96d56Sopenharmony_ci
1997db96d56Sopenharmony_ci    .. attribute:: timeout
2007db96d56Sopenharmony_ci
2017db96d56Sopenharmony_ci        Timeout in seconds.
2027db96d56Sopenharmony_ci
2037db96d56Sopenharmony_ci    .. attribute:: output
2047db96d56Sopenharmony_ci
2057db96d56Sopenharmony_ci        Output of the child process if it was captured by :func:`run` or
2067db96d56Sopenharmony_ci        :func:`check_output`.  Otherwise, ``None``.  This is always
2077db96d56Sopenharmony_ci        :class:`bytes` when any output was captured regardless of the
2087db96d56Sopenharmony_ci        ``text=True`` setting.  It may remain ``None`` instead of ``b''``
2097db96d56Sopenharmony_ci        when no output was observed.
2107db96d56Sopenharmony_ci
2117db96d56Sopenharmony_ci    .. attribute:: stdout
2127db96d56Sopenharmony_ci
2137db96d56Sopenharmony_ci        Alias for output, for symmetry with :attr:`stderr`.
2147db96d56Sopenharmony_ci
2157db96d56Sopenharmony_ci    .. attribute:: stderr
2167db96d56Sopenharmony_ci
2177db96d56Sopenharmony_ci        Stderr output of the child process if it was captured by :func:`run`.
2187db96d56Sopenharmony_ci        Otherwise, ``None``.  This is always :class:`bytes` when stderr output
2197db96d56Sopenharmony_ci        was captured regardless of the ``text=True`` setting.  It may remain
2207db96d56Sopenharmony_ci        ``None`` instead of ``b''`` when no stderr output was observed.
2217db96d56Sopenharmony_ci
2227db96d56Sopenharmony_ci    .. versionadded:: 3.3
2237db96d56Sopenharmony_ci
2247db96d56Sopenharmony_ci    .. versionchanged:: 3.5
2257db96d56Sopenharmony_ci        *stdout* and *stderr* attributes added
2267db96d56Sopenharmony_ci
2277db96d56Sopenharmony_ci.. exception:: CalledProcessError
2287db96d56Sopenharmony_ci
2297db96d56Sopenharmony_ci    Subclass of :exc:`SubprocessError`, raised when a process run by
2307db96d56Sopenharmony_ci    :func:`check_call`, :func:`check_output`, or :func:`run` (with ``check=True``)
2317db96d56Sopenharmony_ci    returns a non-zero exit status.
2327db96d56Sopenharmony_ci
2337db96d56Sopenharmony_ci
2347db96d56Sopenharmony_ci    .. attribute:: returncode
2357db96d56Sopenharmony_ci
2367db96d56Sopenharmony_ci        Exit status of the child process.  If the process exited due to a
2377db96d56Sopenharmony_ci        signal, this will be the negative signal number.
2387db96d56Sopenharmony_ci
2397db96d56Sopenharmony_ci    .. attribute:: cmd
2407db96d56Sopenharmony_ci
2417db96d56Sopenharmony_ci        Command that was used to spawn the child process.
2427db96d56Sopenharmony_ci
2437db96d56Sopenharmony_ci    .. attribute:: output
2447db96d56Sopenharmony_ci
2457db96d56Sopenharmony_ci        Output of the child process if it was captured by :func:`run` or
2467db96d56Sopenharmony_ci        :func:`check_output`.  Otherwise, ``None``.
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ci    .. attribute:: stdout
2497db96d56Sopenharmony_ci
2507db96d56Sopenharmony_ci        Alias for output, for symmetry with :attr:`stderr`.
2517db96d56Sopenharmony_ci
2527db96d56Sopenharmony_ci    .. attribute:: stderr
2537db96d56Sopenharmony_ci
2547db96d56Sopenharmony_ci        Stderr output of the child process if it was captured by :func:`run`.
2557db96d56Sopenharmony_ci        Otherwise, ``None``.
2567db96d56Sopenharmony_ci
2577db96d56Sopenharmony_ci    .. versionchanged:: 3.5
2587db96d56Sopenharmony_ci        *stdout* and *stderr* attributes added
2597db96d56Sopenharmony_ci
2607db96d56Sopenharmony_ci
2617db96d56Sopenharmony_ci.. _frequently-used-arguments:
2627db96d56Sopenharmony_ci
2637db96d56Sopenharmony_ciFrequently Used Arguments
2647db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^
2657db96d56Sopenharmony_ci
2667db96d56Sopenharmony_ciTo support a wide variety of use cases, the :class:`Popen` constructor (and
2677db96d56Sopenharmony_cithe convenience functions) accept a large number of optional arguments. For
2687db96d56Sopenharmony_cimost typical use cases, many of these arguments can be safely left at their
2697db96d56Sopenharmony_cidefault values. The arguments that are most commonly needed are:
2707db96d56Sopenharmony_ci
2717db96d56Sopenharmony_ci   *args* is required for all calls and should be a string, or a sequence of
2727db96d56Sopenharmony_ci   program arguments. Providing a sequence of arguments is generally
2737db96d56Sopenharmony_ci   preferred, as it allows the module to take care of any required escaping
2747db96d56Sopenharmony_ci   and quoting of arguments (e.g. to permit spaces in file names). If passing
2757db96d56Sopenharmony_ci   a single string, either *shell* must be :const:`True` (see below) or else
2767db96d56Sopenharmony_ci   the string must simply name the program to be executed without specifying
2777db96d56Sopenharmony_ci   any arguments.
2787db96d56Sopenharmony_ci
2797db96d56Sopenharmony_ci   *stdin*, *stdout* and *stderr* specify the executed program's standard input,
2807db96d56Sopenharmony_ci   standard output and standard error file handles, respectively.  Valid values
2817db96d56Sopenharmony_ci   are :data:`PIPE`, :data:`DEVNULL`, an existing file descriptor (a positive
2827db96d56Sopenharmony_ci   integer), an existing file object with a valid file descriptor, and ``None``.
2837db96d56Sopenharmony_ci   :data:`PIPE` indicates that a new pipe to the child should be created.
2847db96d56Sopenharmony_ci   :data:`DEVNULL` indicates that the special file :data:`os.devnull` will
2857db96d56Sopenharmony_ci   be used.  With the default settings of ``None``, no redirection will occur;
2867db96d56Sopenharmony_ci   the child's file handles will be inherited from the parent.
2877db96d56Sopenharmony_ci   Additionally, *stderr* can be :data:`STDOUT`, which indicates that the
2887db96d56Sopenharmony_ci   stderr data from the child process should be captured into the same file
2897db96d56Sopenharmony_ci   handle as for *stdout*.
2907db96d56Sopenharmony_ci
2917db96d56Sopenharmony_ci   .. index::
2927db96d56Sopenharmony_ci      single: universal newlines; subprocess module
2937db96d56Sopenharmony_ci
2947db96d56Sopenharmony_ci   If *encoding* or *errors* are specified, or *text* (also known as
2957db96d56Sopenharmony_ci   *universal_newlines*) is true,
2967db96d56Sopenharmony_ci   the file objects *stdin*, *stdout* and *stderr* will be opened in text
2977db96d56Sopenharmony_ci   mode using the *encoding* and *errors* specified in the call or the
2987db96d56Sopenharmony_ci   defaults for :class:`io.TextIOWrapper`.
2997db96d56Sopenharmony_ci
3007db96d56Sopenharmony_ci   For *stdin*, line ending characters ``'\n'`` in the input will be converted
3017db96d56Sopenharmony_ci   to the default line separator :data:`os.linesep`. For *stdout* and *stderr*,
3027db96d56Sopenharmony_ci   all line endings in the output will be converted to ``'\n'``.  For more
3037db96d56Sopenharmony_ci   information see the documentation of the :class:`io.TextIOWrapper` class
3047db96d56Sopenharmony_ci   when the *newline* argument to its constructor is ``None``.
3057db96d56Sopenharmony_ci
3067db96d56Sopenharmony_ci   If text mode is not used, *stdin*, *stdout* and *stderr* will be opened as
3077db96d56Sopenharmony_ci   binary streams. No encoding or line ending conversion is performed.
3087db96d56Sopenharmony_ci
3097db96d56Sopenharmony_ci   .. versionadded:: 3.6
3107db96d56Sopenharmony_ci      Added *encoding* and *errors* parameters.
3117db96d56Sopenharmony_ci
3127db96d56Sopenharmony_ci   .. versionadded:: 3.7
3137db96d56Sopenharmony_ci      Added the *text* parameter as an alias for *universal_newlines*.
3147db96d56Sopenharmony_ci
3157db96d56Sopenharmony_ci   .. note::
3167db96d56Sopenharmony_ci
3177db96d56Sopenharmony_ci      The newlines attribute of the file objects :attr:`Popen.stdin`,
3187db96d56Sopenharmony_ci      :attr:`Popen.stdout` and :attr:`Popen.stderr` are not updated by
3197db96d56Sopenharmony_ci      the :meth:`Popen.communicate` method.
3207db96d56Sopenharmony_ci
3217db96d56Sopenharmony_ci   If *shell* is ``True``, the specified command will be executed through
3227db96d56Sopenharmony_ci   the shell.  This can be useful if you are using Python primarily for the
3237db96d56Sopenharmony_ci   enhanced control flow it offers over most system shells and still want
3247db96d56Sopenharmony_ci   convenient access to other shell features such as shell pipes, filename
3257db96d56Sopenharmony_ci   wildcards, environment variable expansion, and expansion of ``~`` to a
3267db96d56Sopenharmony_ci   user's home directory.  However, note that Python itself offers
3277db96d56Sopenharmony_ci   implementations of many shell-like features (in particular, :mod:`glob`,
3287db96d56Sopenharmony_ci   :mod:`fnmatch`, :func:`os.walk`, :func:`os.path.expandvars`,
3297db96d56Sopenharmony_ci   :func:`os.path.expanduser`, and :mod:`shutil`).
3307db96d56Sopenharmony_ci
3317db96d56Sopenharmony_ci   .. versionchanged:: 3.3
3327db96d56Sopenharmony_ci      When *universal_newlines* is ``True``, the class uses the encoding
3337db96d56Sopenharmony_ci      :func:`locale.getpreferredencoding(False) <locale.getpreferredencoding>`
3347db96d56Sopenharmony_ci      instead of ``locale.getpreferredencoding()``.  See the
3357db96d56Sopenharmony_ci      :class:`io.TextIOWrapper` class for more information on this change.
3367db96d56Sopenharmony_ci
3377db96d56Sopenharmony_ci   .. note::
3387db96d56Sopenharmony_ci
3397db96d56Sopenharmony_ci      Read the `Security Considerations`_ section before using ``shell=True``.
3407db96d56Sopenharmony_ci
3417db96d56Sopenharmony_ciThese options, along with all of the other options, are described in more
3427db96d56Sopenharmony_cidetail in the :class:`Popen` constructor documentation.
3437db96d56Sopenharmony_ci
3447db96d56Sopenharmony_ci
3457db96d56Sopenharmony_ciPopen Constructor
3467db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^
3477db96d56Sopenharmony_ci
3487db96d56Sopenharmony_ciThe underlying process creation and management in this module is handled by
3497db96d56Sopenharmony_cithe :class:`Popen` class. It offers a lot of flexibility so that developers
3507db96d56Sopenharmony_ciare able to handle the less common cases not covered by the convenience
3517db96d56Sopenharmony_cifunctions.
3527db96d56Sopenharmony_ci
3537db96d56Sopenharmony_ci
3547db96d56Sopenharmony_ci.. class:: Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, \
3557db96d56Sopenharmony_ci                 stderr=None, preexec_fn=None, close_fds=True, shell=False, \
3567db96d56Sopenharmony_ci                 cwd=None, env=None, universal_newlines=None, \
3577db96d56Sopenharmony_ci                 startupinfo=None, creationflags=0, restore_signals=True, \
3587db96d56Sopenharmony_ci                 start_new_session=False, pass_fds=(), *, group=None, \
3597db96d56Sopenharmony_ci                 extra_groups=None, user=None, umask=-1, \
3607db96d56Sopenharmony_ci                 encoding=None, errors=None, text=None, pipesize=-1, \
3617db96d56Sopenharmony_ci                 process_group=None)
3627db96d56Sopenharmony_ci
3637db96d56Sopenharmony_ci   Execute a child program in a new process.  On POSIX, the class uses
3647db96d56Sopenharmony_ci   :meth:`os.execvpe`-like behavior to execute the child program.  On Windows,
3657db96d56Sopenharmony_ci   the class uses the Windows ``CreateProcess()`` function.  The arguments to
3667db96d56Sopenharmony_ci   :class:`Popen` are as follows.
3677db96d56Sopenharmony_ci
3687db96d56Sopenharmony_ci   *args* should be a sequence of program arguments or else a single string
3697db96d56Sopenharmony_ci   or :term:`path-like object`.
3707db96d56Sopenharmony_ci   By default, the program to execute is the first item in *args* if *args* is
3717db96d56Sopenharmony_ci   a sequence.  If *args* is a string, the interpretation is
3727db96d56Sopenharmony_ci   platform-dependent and described below.  See the *shell* and *executable*
3737db96d56Sopenharmony_ci   arguments for additional differences from the default behavior.  Unless
3747db96d56Sopenharmony_ci   otherwise stated, it is recommended to pass *args* as a sequence.
3757db96d56Sopenharmony_ci
3767db96d56Sopenharmony_ci   .. warning::
3777db96d56Sopenharmony_ci
3787db96d56Sopenharmony_ci      For maximum reliability, use a fully qualified path for the executable.
3797db96d56Sopenharmony_ci      To search for an unqualified name on :envvar:`PATH`, use
3807db96d56Sopenharmony_ci      :meth:`shutil.which`. On all platforms, passing :data:`sys.executable`
3817db96d56Sopenharmony_ci      is the recommended way to launch the current Python interpreter again,
3827db96d56Sopenharmony_ci      and use the ``-m`` command-line format to launch an installed module.
3837db96d56Sopenharmony_ci
3847db96d56Sopenharmony_ci      Resolving the path of *executable* (or the first item of *args*) is
3857db96d56Sopenharmony_ci      platform dependent. For POSIX, see :meth:`os.execvpe`, and note that
3867db96d56Sopenharmony_ci      when resolving or searching for the executable path, *cwd* overrides the
3877db96d56Sopenharmony_ci      current working directory and *env* can override the ``PATH``
3887db96d56Sopenharmony_ci      environment variable. For Windows, see the documentation of the
3897db96d56Sopenharmony_ci      ``lpApplicationName`` and ``lpCommandLine`` parameters of WinAPI
3907db96d56Sopenharmony_ci      ``CreateProcess``, and note that when resolving or searching for the
3917db96d56Sopenharmony_ci      executable path with ``shell=False``, *cwd* does not override the
3927db96d56Sopenharmony_ci      current working directory and *env* cannot override the ``PATH``
3937db96d56Sopenharmony_ci      environment variable. Using a full path avoids all of these variations.
3947db96d56Sopenharmony_ci
3957db96d56Sopenharmony_ci   An example of passing some arguments to an external program
3967db96d56Sopenharmony_ci   as a sequence is::
3977db96d56Sopenharmony_ci
3987db96d56Sopenharmony_ci     Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])
3997db96d56Sopenharmony_ci
4007db96d56Sopenharmony_ci   On POSIX, if *args* is a string, the string is interpreted as the name or
4017db96d56Sopenharmony_ci   path of the program to execute.  However, this can only be done if not
4027db96d56Sopenharmony_ci   passing arguments to the program.
4037db96d56Sopenharmony_ci
4047db96d56Sopenharmony_ci   .. note::
4057db96d56Sopenharmony_ci
4067db96d56Sopenharmony_ci      It may not be obvious how to break a shell command into a sequence of arguments,
4077db96d56Sopenharmony_ci      especially in complex cases. :meth:`shlex.split` can illustrate how to
4087db96d56Sopenharmony_ci      determine the correct tokenization for *args*::
4097db96d56Sopenharmony_ci
4107db96d56Sopenharmony_ci         >>> import shlex, subprocess
4117db96d56Sopenharmony_ci         >>> command_line = input()
4127db96d56Sopenharmony_ci         /bin/vikings -input eggs.txt -output "spam spam.txt" -cmd "echo '$MONEY'"
4137db96d56Sopenharmony_ci         >>> args = shlex.split(command_line)
4147db96d56Sopenharmony_ci         >>> print(args)
4157db96d56Sopenharmony_ci         ['/bin/vikings', '-input', 'eggs.txt', '-output', 'spam spam.txt', '-cmd', "echo '$MONEY'"]
4167db96d56Sopenharmony_ci         >>> p = subprocess.Popen(args) # Success!
4177db96d56Sopenharmony_ci
4187db96d56Sopenharmony_ci      Note in particular that options (such as *-input*) and arguments (such
4197db96d56Sopenharmony_ci      as *eggs.txt*) that are separated by whitespace in the shell go in separate
4207db96d56Sopenharmony_ci      list elements, while arguments that need quoting or backslash escaping when
4217db96d56Sopenharmony_ci      used in the shell (such as filenames containing spaces or the *echo* command
4227db96d56Sopenharmony_ci      shown above) are single list elements.
4237db96d56Sopenharmony_ci
4247db96d56Sopenharmony_ci   On Windows, if *args* is a sequence, it will be converted to a string in a
4257db96d56Sopenharmony_ci   manner described in :ref:`converting-argument-sequence`.  This is because
4267db96d56Sopenharmony_ci   the underlying ``CreateProcess()`` operates on strings.
4277db96d56Sopenharmony_ci
4287db96d56Sopenharmony_ci   .. versionchanged:: 3.6
4297db96d56Sopenharmony_ci      *args* parameter accepts a :term:`path-like object` if *shell* is
4307db96d56Sopenharmony_ci      ``False`` and a sequence containing path-like objects on POSIX.
4317db96d56Sopenharmony_ci
4327db96d56Sopenharmony_ci   .. versionchanged:: 3.8
4337db96d56Sopenharmony_ci      *args* parameter accepts a :term:`path-like object` if *shell* is
4347db96d56Sopenharmony_ci      ``False`` and a sequence containing bytes and path-like objects
4357db96d56Sopenharmony_ci      on Windows.
4367db96d56Sopenharmony_ci
4377db96d56Sopenharmony_ci   The *shell* argument (which defaults to ``False``) specifies whether to use
4387db96d56Sopenharmony_ci   the shell as the program to execute.  If *shell* is ``True``, it is
4397db96d56Sopenharmony_ci   recommended to pass *args* as a string rather than as a sequence.
4407db96d56Sopenharmony_ci
4417db96d56Sopenharmony_ci   On POSIX with ``shell=True``, the shell defaults to :file:`/bin/sh`.  If
4427db96d56Sopenharmony_ci   *args* is a string, the string specifies the command
4437db96d56Sopenharmony_ci   to execute through the shell.  This means that the string must be
4447db96d56Sopenharmony_ci   formatted exactly as it would be when typed at the shell prompt.  This
4457db96d56Sopenharmony_ci   includes, for example, quoting or backslash escaping filenames with spaces in
4467db96d56Sopenharmony_ci   them.  If *args* is a sequence, the first item specifies the command string, and
4477db96d56Sopenharmony_ci   any additional items will be treated as additional arguments to the shell
4487db96d56Sopenharmony_ci   itself.  That is to say, :class:`Popen` does the equivalent of::
4497db96d56Sopenharmony_ci
4507db96d56Sopenharmony_ci      Popen(['/bin/sh', '-c', args[0], args[1], ...])
4517db96d56Sopenharmony_ci
4527db96d56Sopenharmony_ci   On Windows with ``shell=True``, the :envvar:`COMSPEC` environment variable
4537db96d56Sopenharmony_ci   specifies the default shell.  The only time you need to specify
4547db96d56Sopenharmony_ci   ``shell=True`` on Windows is when the command you wish to execute is built
4557db96d56Sopenharmony_ci   into the shell (e.g. :command:`dir` or :command:`copy`).  You do not need
4567db96d56Sopenharmony_ci   ``shell=True`` to run a batch file or console-based executable.
4577db96d56Sopenharmony_ci
4587db96d56Sopenharmony_ci   .. note::
4597db96d56Sopenharmony_ci
4607db96d56Sopenharmony_ci      Read the `Security Considerations`_ section before using ``shell=True``.
4617db96d56Sopenharmony_ci
4627db96d56Sopenharmony_ci   *bufsize* will be supplied as the corresponding argument to the
4637db96d56Sopenharmony_ci   :func:`open` function when creating the stdin/stdout/stderr pipe
4647db96d56Sopenharmony_ci   file objects:
4657db96d56Sopenharmony_ci
4667db96d56Sopenharmony_ci   - :const:`0` means unbuffered (read and write are one
4677db96d56Sopenharmony_ci     system call and can return short)
4687db96d56Sopenharmony_ci   - :const:`1` means line buffered
4697db96d56Sopenharmony_ci     (only usable if ``text=True`` or ``universal_newlines=True``)
4707db96d56Sopenharmony_ci   - any other positive value means use a buffer of approximately that
4717db96d56Sopenharmony_ci     size
4727db96d56Sopenharmony_ci   - negative bufsize (the default) means the system default of
4737db96d56Sopenharmony_ci     io.DEFAULT_BUFFER_SIZE will be used.
4747db96d56Sopenharmony_ci
4757db96d56Sopenharmony_ci   .. versionchanged:: 3.3.1
4767db96d56Sopenharmony_ci      *bufsize* now defaults to -1 to enable buffering by default to match the
4777db96d56Sopenharmony_ci      behavior that most code expects.  In versions prior to Python 3.2.4 and
4787db96d56Sopenharmony_ci      3.3.1 it incorrectly defaulted to :const:`0` which was unbuffered
4797db96d56Sopenharmony_ci      and allowed short reads.  This was unintentional and did not match the
4807db96d56Sopenharmony_ci      behavior of Python 2 as most code expected.
4817db96d56Sopenharmony_ci
4827db96d56Sopenharmony_ci   The *executable* argument specifies a replacement program to execute.   It
4837db96d56Sopenharmony_ci   is very seldom needed.  When ``shell=False``, *executable* replaces the
4847db96d56Sopenharmony_ci   program to execute specified by *args*.  However, the original *args* is
4857db96d56Sopenharmony_ci   still passed to the program.  Most programs treat the program specified
4867db96d56Sopenharmony_ci   by *args* as the command name, which can then be different from the program
4877db96d56Sopenharmony_ci   actually executed.  On POSIX, the *args* name
4887db96d56Sopenharmony_ci   becomes the display name for the executable in utilities such as
4897db96d56Sopenharmony_ci   :program:`ps`.  If ``shell=True``, on POSIX the *executable* argument
4907db96d56Sopenharmony_ci   specifies a replacement shell for the default :file:`/bin/sh`.
4917db96d56Sopenharmony_ci
4927db96d56Sopenharmony_ci   .. versionchanged:: 3.6
4937db96d56Sopenharmony_ci      *executable* parameter accepts a :term:`path-like object` on POSIX.
4947db96d56Sopenharmony_ci
4957db96d56Sopenharmony_ci   .. versionchanged:: 3.8
4967db96d56Sopenharmony_ci      *executable* parameter accepts a bytes and :term:`path-like object`
4977db96d56Sopenharmony_ci      on Windows.
4987db96d56Sopenharmony_ci
4997db96d56Sopenharmony_ci   .. versionchanged:: 3.11.3
5007db96d56Sopenharmony_ci
5017db96d56Sopenharmony_ci      Changed Windows shell search order for ``shell=True``. The current
5027db96d56Sopenharmony_ci      directory and ``%PATH%`` are replaced with ``%COMSPEC%`` and
5037db96d56Sopenharmony_ci      ``%SystemRoot%\System32\cmd.exe``. As a result, dropping a
5047db96d56Sopenharmony_ci      malicious program named ``cmd.exe`` into a current directory no
5057db96d56Sopenharmony_ci      longer works.
5067db96d56Sopenharmony_ci
5077db96d56Sopenharmony_ci   *stdin*, *stdout* and *stderr* specify the executed program's standard input,
5087db96d56Sopenharmony_ci   standard output and standard error file handles, respectively.  Valid values
5097db96d56Sopenharmony_ci   are :data:`PIPE`, :data:`DEVNULL`, an existing file descriptor (a positive
5107db96d56Sopenharmony_ci   integer), an existing :term:`file object` with a valid file descriptor,
5117db96d56Sopenharmony_ci   and ``None``.  :data:`PIPE` indicates that a new pipe to the child should
5127db96d56Sopenharmony_ci   be created.  :data:`DEVNULL` indicates that the special file
5137db96d56Sopenharmony_ci   :data:`os.devnull` will be used. With the default settings of ``None``,
5147db96d56Sopenharmony_ci   no redirection will occur; the child's file handles will be inherited from
5157db96d56Sopenharmony_ci   the parent.  Additionally, *stderr* can be :data:`STDOUT`, which indicates
5167db96d56Sopenharmony_ci   that the stderr data from the applications should be captured into the same
5177db96d56Sopenharmony_ci   file handle as for stdout.
5187db96d56Sopenharmony_ci
5197db96d56Sopenharmony_ci   If *preexec_fn* is set to a callable object, this object will be called in the
5207db96d56Sopenharmony_ci   child process just before the child is executed.
5217db96d56Sopenharmony_ci   (POSIX only)
5227db96d56Sopenharmony_ci
5237db96d56Sopenharmony_ci   .. warning::
5247db96d56Sopenharmony_ci
5257db96d56Sopenharmony_ci      The *preexec_fn* parameter is NOT SAFE to use in the presence of threads
5267db96d56Sopenharmony_ci      in your application.  The child process could deadlock before exec is
5277db96d56Sopenharmony_ci      called.
5287db96d56Sopenharmony_ci
5297db96d56Sopenharmony_ci   .. note::
5307db96d56Sopenharmony_ci
5317db96d56Sopenharmony_ci      If you need to modify the environment for the child use the *env*
5327db96d56Sopenharmony_ci      parameter rather than doing it in a *preexec_fn*.
5337db96d56Sopenharmony_ci      The *start_new_session* and *process_group* parameters should take the place of
5347db96d56Sopenharmony_ci      code using *preexec_fn* to call :func:`os.setsid` or :func:`os.setpgid` in the child.
5357db96d56Sopenharmony_ci
5367db96d56Sopenharmony_ci   .. versionchanged:: 3.8
5377db96d56Sopenharmony_ci
5387db96d56Sopenharmony_ci      The *preexec_fn* parameter is no longer supported in subinterpreters.
5397db96d56Sopenharmony_ci      The use of the parameter in a subinterpreter raises
5407db96d56Sopenharmony_ci      :exc:`RuntimeError`. The new restriction may affect applications that
5417db96d56Sopenharmony_ci      are deployed in mod_wsgi, uWSGI, and other embedded environments.
5427db96d56Sopenharmony_ci
5437db96d56Sopenharmony_ci   If *close_fds* is true, all file descriptors except :const:`0`, :const:`1` and
5447db96d56Sopenharmony_ci   :const:`2` will be closed before the child process is executed.  Otherwise
5457db96d56Sopenharmony_ci   when *close_fds* is false, file descriptors obey their inheritable flag
5467db96d56Sopenharmony_ci   as described in :ref:`fd_inheritance`.
5477db96d56Sopenharmony_ci
5487db96d56Sopenharmony_ci   On Windows, if *close_fds* is true then no handles will be inherited by the
5497db96d56Sopenharmony_ci   child process unless explicitly passed in the ``handle_list`` element of
5507db96d56Sopenharmony_ci   :attr:`STARTUPINFO.lpAttributeList`, or by standard handle redirection.
5517db96d56Sopenharmony_ci
5527db96d56Sopenharmony_ci   .. versionchanged:: 3.2
5537db96d56Sopenharmony_ci      The default for *close_fds* was changed from :const:`False` to
5547db96d56Sopenharmony_ci      what is described above.
5557db96d56Sopenharmony_ci
5567db96d56Sopenharmony_ci   .. versionchanged:: 3.7
5577db96d56Sopenharmony_ci      On Windows the default for *close_fds* was changed from :const:`False` to
5587db96d56Sopenharmony_ci      :const:`True` when redirecting the standard handles. It's now possible to
5597db96d56Sopenharmony_ci      set *close_fds* to :const:`True` when redirecting the standard handles.
5607db96d56Sopenharmony_ci
5617db96d56Sopenharmony_ci   *pass_fds* is an optional sequence of file descriptors to keep open
5627db96d56Sopenharmony_ci   between the parent and child.  Providing any *pass_fds* forces
5637db96d56Sopenharmony_ci   *close_fds* to be :const:`True`.  (POSIX only)
5647db96d56Sopenharmony_ci
5657db96d56Sopenharmony_ci   .. versionchanged:: 3.2
5667db96d56Sopenharmony_ci      The *pass_fds* parameter was added.
5677db96d56Sopenharmony_ci
5687db96d56Sopenharmony_ci   If *cwd* is not ``None``, the function changes the working directory to
5697db96d56Sopenharmony_ci   *cwd* before executing the child.  *cwd* can be a string, bytes or
5707db96d56Sopenharmony_ci   :term:`path-like <path-like object>` object.  On POSIX, the function
5717db96d56Sopenharmony_ci   looks for *executable* (or for the first item in *args*) relative to *cwd*
5727db96d56Sopenharmony_ci   if the executable path is a relative path.
5737db96d56Sopenharmony_ci
5747db96d56Sopenharmony_ci   .. versionchanged:: 3.6
5757db96d56Sopenharmony_ci      *cwd* parameter accepts a :term:`path-like object` on POSIX.
5767db96d56Sopenharmony_ci
5777db96d56Sopenharmony_ci   .. versionchanged:: 3.7
5787db96d56Sopenharmony_ci      *cwd* parameter accepts a :term:`path-like object` on Windows.
5797db96d56Sopenharmony_ci
5807db96d56Sopenharmony_ci   .. versionchanged:: 3.8
5817db96d56Sopenharmony_ci      *cwd* parameter accepts a bytes object on Windows.
5827db96d56Sopenharmony_ci
5837db96d56Sopenharmony_ci   If *restore_signals* is true (the default) all signals that Python has set to
5847db96d56Sopenharmony_ci   SIG_IGN are restored to SIG_DFL in the child process before the exec.
5857db96d56Sopenharmony_ci   Currently this includes the SIGPIPE, SIGXFZ and SIGXFSZ signals.
5867db96d56Sopenharmony_ci   (POSIX only)
5877db96d56Sopenharmony_ci
5887db96d56Sopenharmony_ci   .. versionchanged:: 3.2
5897db96d56Sopenharmony_ci      *restore_signals* was added.
5907db96d56Sopenharmony_ci
5917db96d56Sopenharmony_ci   If *start_new_session* is true the ``setsid()`` system call will be made in the
5927db96d56Sopenharmony_ci   child process prior to the execution of the subprocess.
5937db96d56Sopenharmony_ci
5947db96d56Sopenharmony_ci   .. availability:: POSIX
5957db96d56Sopenharmony_ci   .. versionchanged:: 3.2
5967db96d56Sopenharmony_ci      *start_new_session* was added.
5977db96d56Sopenharmony_ci
5987db96d56Sopenharmony_ci   If *process_group* is a non-negative integer, the ``setpgid(0, value)`` system call will
5997db96d56Sopenharmony_ci   be made in the child process prior to the execution of the subprocess.
6007db96d56Sopenharmony_ci
6017db96d56Sopenharmony_ci   .. availability:: POSIX
6027db96d56Sopenharmony_ci   .. versionchanged:: 3.11
6037db96d56Sopenharmony_ci      *process_group* was added.
6047db96d56Sopenharmony_ci
6057db96d56Sopenharmony_ci   If *group* is not ``None``, the setregid() system call will be made in the
6067db96d56Sopenharmony_ci   child process prior to the execution of the subprocess. If the provided
6077db96d56Sopenharmony_ci   value is a string, it will be looked up via :func:`grp.getgrnam()` and
6087db96d56Sopenharmony_ci   the value in ``gr_gid`` will be used. If the value is an integer, it
6097db96d56Sopenharmony_ci   will be passed verbatim. (POSIX only)
6107db96d56Sopenharmony_ci
6117db96d56Sopenharmony_ci   .. availability:: POSIX
6127db96d56Sopenharmony_ci   .. versionadded:: 3.9
6137db96d56Sopenharmony_ci
6147db96d56Sopenharmony_ci   If *extra_groups* is not ``None``, the setgroups() system call will be
6157db96d56Sopenharmony_ci   made in the child process prior to the execution of the subprocess.
6167db96d56Sopenharmony_ci   Strings provided in *extra_groups* will be looked up via
6177db96d56Sopenharmony_ci   :func:`grp.getgrnam()` and the values in ``gr_gid`` will be used.
6187db96d56Sopenharmony_ci   Integer values will be passed verbatim. (POSIX only)
6197db96d56Sopenharmony_ci
6207db96d56Sopenharmony_ci   .. availability:: POSIX
6217db96d56Sopenharmony_ci   .. versionadded:: 3.9
6227db96d56Sopenharmony_ci
6237db96d56Sopenharmony_ci   If *user* is not ``None``, the setreuid() system call will be made in the
6247db96d56Sopenharmony_ci   child process prior to the execution of the subprocess. If the provided
6257db96d56Sopenharmony_ci   value is a string, it will be looked up via :func:`pwd.getpwnam()` and
6267db96d56Sopenharmony_ci   the value in ``pw_uid`` will be used. If the value is an integer, it will
6277db96d56Sopenharmony_ci   be passed verbatim. (POSIX only)
6287db96d56Sopenharmony_ci
6297db96d56Sopenharmony_ci   .. availability:: POSIX
6307db96d56Sopenharmony_ci   .. versionadded:: 3.9
6317db96d56Sopenharmony_ci
6327db96d56Sopenharmony_ci   If *umask* is not negative, the umask() system call will be made in the
6337db96d56Sopenharmony_ci   child process prior to the execution of the subprocess.
6347db96d56Sopenharmony_ci
6357db96d56Sopenharmony_ci   .. availability:: POSIX
6367db96d56Sopenharmony_ci   .. versionadded:: 3.9
6377db96d56Sopenharmony_ci
6387db96d56Sopenharmony_ci   If *env* is not ``None``, it must be a mapping that defines the environment
6397db96d56Sopenharmony_ci   variables for the new process; these are used instead of the default
6407db96d56Sopenharmony_ci   behavior of inheriting the current process' environment. This mapping can be
6417db96d56Sopenharmony_ci   str to str on any platform or bytes to bytes on POSIX platforms much like
6427db96d56Sopenharmony_ci   :data:`os.environ` or :data:`os.environb`.
6437db96d56Sopenharmony_ci
6447db96d56Sopenharmony_ci   .. note::
6457db96d56Sopenharmony_ci
6467db96d56Sopenharmony_ci      If specified, *env* must provide any variables required for the program to
6477db96d56Sopenharmony_ci      execute.  On Windows, in order to run a `side-by-side assembly`_ the
6487db96d56Sopenharmony_ci      specified *env* **must** include a valid :envvar:`SystemRoot`.
6497db96d56Sopenharmony_ci
6507db96d56Sopenharmony_ci   .. _side-by-side assembly: https://en.wikipedia.org/wiki/Side-by-Side_Assembly
6517db96d56Sopenharmony_ci
6527db96d56Sopenharmony_ci   If *encoding* or *errors* are specified, or *text* is true, the file objects
6537db96d56Sopenharmony_ci   *stdin*, *stdout* and *stderr* are opened in text mode with the specified
6547db96d56Sopenharmony_ci   *encoding* and *errors*, as described above in :ref:`frequently-used-arguments`.
6557db96d56Sopenharmony_ci   The *universal_newlines* argument is equivalent  to *text* and is provided
6567db96d56Sopenharmony_ci   for backwards compatibility. By default, file objects are opened in binary mode.
6577db96d56Sopenharmony_ci
6587db96d56Sopenharmony_ci   .. versionadded:: 3.6
6597db96d56Sopenharmony_ci      *encoding* and *errors* were added.
6607db96d56Sopenharmony_ci
6617db96d56Sopenharmony_ci   .. versionadded:: 3.7
6627db96d56Sopenharmony_ci      *text* was added as a more readable alias for *universal_newlines*.
6637db96d56Sopenharmony_ci
6647db96d56Sopenharmony_ci   If given, *startupinfo* will be a :class:`STARTUPINFO` object, which is
6657db96d56Sopenharmony_ci   passed to the underlying ``CreateProcess`` function.
6667db96d56Sopenharmony_ci   *creationflags*, if given, can be one or more of the following flags:
6677db96d56Sopenharmony_ci
6687db96d56Sopenharmony_ci      * :data:`CREATE_NEW_CONSOLE`
6697db96d56Sopenharmony_ci      * :data:`CREATE_NEW_PROCESS_GROUP`
6707db96d56Sopenharmony_ci      * :data:`ABOVE_NORMAL_PRIORITY_CLASS`
6717db96d56Sopenharmony_ci      * :data:`BELOW_NORMAL_PRIORITY_CLASS`
6727db96d56Sopenharmony_ci      * :data:`HIGH_PRIORITY_CLASS`
6737db96d56Sopenharmony_ci      * :data:`IDLE_PRIORITY_CLASS`
6747db96d56Sopenharmony_ci      * :data:`NORMAL_PRIORITY_CLASS`
6757db96d56Sopenharmony_ci      * :data:`REALTIME_PRIORITY_CLASS`
6767db96d56Sopenharmony_ci      * :data:`CREATE_NO_WINDOW`
6777db96d56Sopenharmony_ci      * :data:`DETACHED_PROCESS`
6787db96d56Sopenharmony_ci      * :data:`CREATE_DEFAULT_ERROR_MODE`
6797db96d56Sopenharmony_ci      * :data:`CREATE_BREAKAWAY_FROM_JOB`
6807db96d56Sopenharmony_ci
6817db96d56Sopenharmony_ci   *pipesize* can be used to change the size of the pipe when
6827db96d56Sopenharmony_ci   :data:`PIPE` is used for *stdin*, *stdout* or *stderr*. The size of the pipe
6837db96d56Sopenharmony_ci   is only changed on platforms that support this (only Linux at this time of
6847db96d56Sopenharmony_ci   writing). Other platforms will ignore this parameter.
6857db96d56Sopenharmony_ci
6867db96d56Sopenharmony_ci   .. versionadded:: 3.10
6877db96d56Sopenharmony_ci      The ``pipesize`` parameter was added.
6887db96d56Sopenharmony_ci
6897db96d56Sopenharmony_ci   Popen objects are supported as context managers via the :keyword:`with` statement:
6907db96d56Sopenharmony_ci   on exit, standard file descriptors are closed, and the process is waited for.
6917db96d56Sopenharmony_ci   ::
6927db96d56Sopenharmony_ci
6937db96d56Sopenharmony_ci      with Popen(["ifconfig"], stdout=PIPE) as proc:
6947db96d56Sopenharmony_ci          log.write(proc.stdout.read())
6957db96d56Sopenharmony_ci
6967db96d56Sopenharmony_ci   .. audit-event:: subprocess.Popen executable,args,cwd,env subprocess.Popen
6977db96d56Sopenharmony_ci
6987db96d56Sopenharmony_ci      Popen and the other functions in this module that use it raise an
6997db96d56Sopenharmony_ci      :ref:`auditing event <auditing>` ``subprocess.Popen`` with arguments
7007db96d56Sopenharmony_ci      ``executable``, ``args``, ``cwd``, and ``env``. The value for ``args``
7017db96d56Sopenharmony_ci      may be a single string or a list of strings, depending on platform.
7027db96d56Sopenharmony_ci
7037db96d56Sopenharmony_ci   .. versionchanged:: 3.2
7047db96d56Sopenharmony_ci      Added context manager support.
7057db96d56Sopenharmony_ci
7067db96d56Sopenharmony_ci   .. versionchanged:: 3.6
7077db96d56Sopenharmony_ci      Popen destructor now emits a :exc:`ResourceWarning` warning if the child
7087db96d56Sopenharmony_ci      process is still running.
7097db96d56Sopenharmony_ci
7107db96d56Sopenharmony_ci   .. versionchanged:: 3.8
7117db96d56Sopenharmony_ci      Popen can use :func:`os.posix_spawn` in some cases for better
7127db96d56Sopenharmony_ci      performance. On Windows Subsystem for Linux and QEMU User Emulation,
7137db96d56Sopenharmony_ci      Popen constructor using :func:`os.posix_spawn` no longer raise an
7147db96d56Sopenharmony_ci      exception on errors like missing program, but the child process fails
7157db96d56Sopenharmony_ci      with a non-zero :attr:`~Popen.returncode`.
7167db96d56Sopenharmony_ci
7177db96d56Sopenharmony_ci
7187db96d56Sopenharmony_ciExceptions
7197db96d56Sopenharmony_ci^^^^^^^^^^
7207db96d56Sopenharmony_ci
7217db96d56Sopenharmony_ciExceptions raised in the child process, before the new program has started to
7227db96d56Sopenharmony_ciexecute, will be re-raised in the parent.
7237db96d56Sopenharmony_ci
7247db96d56Sopenharmony_ciThe most common exception raised is :exc:`OSError`.  This occurs, for example,
7257db96d56Sopenharmony_ciwhen trying to execute a non-existent file.  Applications should prepare for
7267db96d56Sopenharmony_ci:exc:`OSError` exceptions. Note that, when ``shell=True``, :exc:`OSError`
7277db96d56Sopenharmony_ciwill be raised by the child only if the selected shell itself was not found.
7287db96d56Sopenharmony_ciTo determine if the shell failed to find the requested application, it is
7297db96d56Sopenharmony_cinecessary to check the return code or output from the subprocess.
7307db96d56Sopenharmony_ci
7317db96d56Sopenharmony_ciA :exc:`ValueError` will be raised if :class:`Popen` is called with invalid
7327db96d56Sopenharmony_ciarguments.
7337db96d56Sopenharmony_ci
7347db96d56Sopenharmony_ci:func:`check_call` and :func:`check_output` will raise
7357db96d56Sopenharmony_ci:exc:`CalledProcessError` if the called process returns a non-zero return
7367db96d56Sopenharmony_cicode.
7377db96d56Sopenharmony_ci
7387db96d56Sopenharmony_ciAll of the functions and methods that accept a *timeout* parameter, such as
7397db96d56Sopenharmony_ci:func:`call` and :meth:`Popen.communicate` will raise :exc:`TimeoutExpired` if
7407db96d56Sopenharmony_cithe timeout expires before the process exits.
7417db96d56Sopenharmony_ci
7427db96d56Sopenharmony_ciExceptions defined in this module all inherit from :exc:`SubprocessError`.
7437db96d56Sopenharmony_ci
7447db96d56Sopenharmony_ci   .. versionadded:: 3.3
7457db96d56Sopenharmony_ci      The :exc:`SubprocessError` base class was added.
7467db96d56Sopenharmony_ci
7477db96d56Sopenharmony_ci.. _subprocess-security:
7487db96d56Sopenharmony_ci
7497db96d56Sopenharmony_ciSecurity Considerations
7507db96d56Sopenharmony_ci-----------------------
7517db96d56Sopenharmony_ci
7527db96d56Sopenharmony_ciUnlike some other popen functions, this implementation will never
7537db96d56Sopenharmony_ciimplicitly call a system shell.  This means that all characters,
7547db96d56Sopenharmony_ciincluding shell metacharacters, can safely be passed to child processes.
7557db96d56Sopenharmony_ciIf the shell is invoked explicitly, via ``shell=True``, it is the application's
7567db96d56Sopenharmony_ciresponsibility to ensure that all whitespace and metacharacters are
7577db96d56Sopenharmony_ciquoted appropriately to avoid
7587db96d56Sopenharmony_ci`shell injection <https://en.wikipedia.org/wiki/Shell_injection#Shell_injection>`_
7597db96d56Sopenharmony_civulnerabilities. On :ref:`some platforms <shlex-quote-warning>`, it is possible
7607db96d56Sopenharmony_cito use :func:`shlex.quote` for this escaping.
7617db96d56Sopenharmony_ci
7627db96d56Sopenharmony_ci
7637db96d56Sopenharmony_ciPopen Objects
7647db96d56Sopenharmony_ci-------------
7657db96d56Sopenharmony_ci
7667db96d56Sopenharmony_ciInstances of the :class:`Popen` class have the following methods:
7677db96d56Sopenharmony_ci
7687db96d56Sopenharmony_ci
7697db96d56Sopenharmony_ci.. method:: Popen.poll()
7707db96d56Sopenharmony_ci
7717db96d56Sopenharmony_ci   Check if child process has terminated.  Set and return
7727db96d56Sopenharmony_ci   :attr:`~Popen.returncode` attribute. Otherwise, returns ``None``.
7737db96d56Sopenharmony_ci
7747db96d56Sopenharmony_ci
7757db96d56Sopenharmony_ci.. method:: Popen.wait(timeout=None)
7767db96d56Sopenharmony_ci
7777db96d56Sopenharmony_ci   Wait for child process to terminate.  Set and return
7787db96d56Sopenharmony_ci   :attr:`~Popen.returncode` attribute.
7797db96d56Sopenharmony_ci
7807db96d56Sopenharmony_ci   If the process does not terminate after *timeout* seconds, raise a
7817db96d56Sopenharmony_ci   :exc:`TimeoutExpired` exception.  It is safe to catch this exception and
7827db96d56Sopenharmony_ci   retry the wait.
7837db96d56Sopenharmony_ci
7847db96d56Sopenharmony_ci   .. note::
7857db96d56Sopenharmony_ci
7867db96d56Sopenharmony_ci      This will deadlock when using ``stdout=PIPE`` or ``stderr=PIPE``
7877db96d56Sopenharmony_ci      and the child process generates enough output to a pipe such that
7887db96d56Sopenharmony_ci      it blocks waiting for the OS pipe buffer to accept more data.
7897db96d56Sopenharmony_ci      Use :meth:`Popen.communicate` when using pipes to avoid that.
7907db96d56Sopenharmony_ci
7917db96d56Sopenharmony_ci   .. note::
7927db96d56Sopenharmony_ci
7937db96d56Sopenharmony_ci      The function is implemented using a busy loop (non-blocking call and
7947db96d56Sopenharmony_ci      short sleeps). Use the :mod:`asyncio` module for an asynchronous wait:
7957db96d56Sopenharmony_ci      see :class:`asyncio.create_subprocess_exec`.
7967db96d56Sopenharmony_ci
7977db96d56Sopenharmony_ci   .. versionchanged:: 3.3
7987db96d56Sopenharmony_ci      *timeout* was added.
7997db96d56Sopenharmony_ci
8007db96d56Sopenharmony_ci.. method:: Popen.communicate(input=None, timeout=None)
8017db96d56Sopenharmony_ci
8027db96d56Sopenharmony_ci   Interact with process: Send data to stdin.  Read data from stdout and stderr,
8037db96d56Sopenharmony_ci   until end-of-file is reached.  Wait for process to terminate and set the
8047db96d56Sopenharmony_ci   :attr:`~Popen.returncode` attribute.  The optional *input* argument should be
8057db96d56Sopenharmony_ci   data to be sent to the child process, or ``None``, if no data should be sent
8067db96d56Sopenharmony_ci   to the child.  If streams were opened in text mode, *input* must be a string.
8077db96d56Sopenharmony_ci   Otherwise, it must be bytes.
8087db96d56Sopenharmony_ci
8097db96d56Sopenharmony_ci   :meth:`communicate` returns a tuple ``(stdout_data, stderr_data)``.
8107db96d56Sopenharmony_ci   The data will be strings if streams were opened in text mode; otherwise,
8117db96d56Sopenharmony_ci   bytes.
8127db96d56Sopenharmony_ci
8137db96d56Sopenharmony_ci   Note that if you want to send data to the process's stdin, you need to create
8147db96d56Sopenharmony_ci   the Popen object with ``stdin=PIPE``.  Similarly, to get anything other than
8157db96d56Sopenharmony_ci   ``None`` in the result tuple, you need to give ``stdout=PIPE`` and/or
8167db96d56Sopenharmony_ci   ``stderr=PIPE`` too.
8177db96d56Sopenharmony_ci
8187db96d56Sopenharmony_ci   If the process does not terminate after *timeout* seconds, a
8197db96d56Sopenharmony_ci   :exc:`TimeoutExpired` exception will be raised.  Catching this exception and
8207db96d56Sopenharmony_ci   retrying communication will not lose any output.
8217db96d56Sopenharmony_ci
8227db96d56Sopenharmony_ci   The child process is not killed if the timeout expires, so in order to
8237db96d56Sopenharmony_ci   cleanup properly a well-behaved application should kill the child process and
8247db96d56Sopenharmony_ci   finish communication::
8257db96d56Sopenharmony_ci
8267db96d56Sopenharmony_ci      proc = subprocess.Popen(...)
8277db96d56Sopenharmony_ci      try:
8287db96d56Sopenharmony_ci          outs, errs = proc.communicate(timeout=15)
8297db96d56Sopenharmony_ci      except TimeoutExpired:
8307db96d56Sopenharmony_ci          proc.kill()
8317db96d56Sopenharmony_ci          outs, errs = proc.communicate()
8327db96d56Sopenharmony_ci
8337db96d56Sopenharmony_ci   .. note::
8347db96d56Sopenharmony_ci
8357db96d56Sopenharmony_ci      The data read is buffered in memory, so do not use this method if the data
8367db96d56Sopenharmony_ci      size is large or unlimited.
8377db96d56Sopenharmony_ci
8387db96d56Sopenharmony_ci   .. versionchanged:: 3.3
8397db96d56Sopenharmony_ci      *timeout* was added.
8407db96d56Sopenharmony_ci
8417db96d56Sopenharmony_ci
8427db96d56Sopenharmony_ci.. method:: Popen.send_signal(signal)
8437db96d56Sopenharmony_ci
8447db96d56Sopenharmony_ci   Sends the signal *signal* to the child.
8457db96d56Sopenharmony_ci
8467db96d56Sopenharmony_ci   Do nothing if the process completed.
8477db96d56Sopenharmony_ci
8487db96d56Sopenharmony_ci   .. note::
8497db96d56Sopenharmony_ci
8507db96d56Sopenharmony_ci      On Windows, SIGTERM is an alias for :meth:`terminate`. CTRL_C_EVENT and
8517db96d56Sopenharmony_ci      CTRL_BREAK_EVENT can be sent to processes started with a *creationflags*
8527db96d56Sopenharmony_ci      parameter which includes ``CREATE_NEW_PROCESS_GROUP``.
8537db96d56Sopenharmony_ci
8547db96d56Sopenharmony_ci
8557db96d56Sopenharmony_ci.. method:: Popen.terminate()
8567db96d56Sopenharmony_ci
8577db96d56Sopenharmony_ci   Stop the child. On POSIX OSs the method sends SIGTERM to the
8587db96d56Sopenharmony_ci   child. On Windows the Win32 API function :c:func:`TerminateProcess` is called
8597db96d56Sopenharmony_ci   to stop the child.
8607db96d56Sopenharmony_ci
8617db96d56Sopenharmony_ci
8627db96d56Sopenharmony_ci.. method:: Popen.kill()
8637db96d56Sopenharmony_ci
8647db96d56Sopenharmony_ci   Kills the child. On POSIX OSs the function sends SIGKILL to the child.
8657db96d56Sopenharmony_ci   On Windows :meth:`kill` is an alias for :meth:`terminate`.
8667db96d56Sopenharmony_ci
8677db96d56Sopenharmony_ci
8687db96d56Sopenharmony_ciThe following attributes are also set by the class for you to access.
8697db96d56Sopenharmony_ciReassigning them to new values is unsupported:
8707db96d56Sopenharmony_ci
8717db96d56Sopenharmony_ci.. attribute:: Popen.args
8727db96d56Sopenharmony_ci
8737db96d56Sopenharmony_ci   The *args* argument as it was passed to :class:`Popen` -- a
8747db96d56Sopenharmony_ci   sequence of program arguments or else a single string.
8757db96d56Sopenharmony_ci
8767db96d56Sopenharmony_ci   .. versionadded:: 3.3
8777db96d56Sopenharmony_ci
8787db96d56Sopenharmony_ci.. attribute:: Popen.stdin
8797db96d56Sopenharmony_ci
8807db96d56Sopenharmony_ci   If the *stdin* argument was :data:`PIPE`, this attribute is a writeable
8817db96d56Sopenharmony_ci   stream object as returned by :func:`open`. If the *encoding* or *errors*
8827db96d56Sopenharmony_ci   arguments were specified or the *text* or *universal_newlines* argument
8837db96d56Sopenharmony_ci   was ``True``, the stream is a text stream, otherwise it is a byte stream.
8847db96d56Sopenharmony_ci   If the *stdin* argument was not :data:`PIPE`, this attribute is ``None``.
8857db96d56Sopenharmony_ci
8867db96d56Sopenharmony_ci
8877db96d56Sopenharmony_ci.. attribute:: Popen.stdout
8887db96d56Sopenharmony_ci
8897db96d56Sopenharmony_ci   If the *stdout* argument was :data:`PIPE`, this attribute is a readable
8907db96d56Sopenharmony_ci   stream object as returned by :func:`open`. Reading from the stream provides
8917db96d56Sopenharmony_ci   output from the child process. If the *encoding* or *errors* arguments were
8927db96d56Sopenharmony_ci   specified or the *text* or *universal_newlines* argument was ``True``, the
8937db96d56Sopenharmony_ci   stream is a text stream, otherwise it is a byte stream. If the *stdout*
8947db96d56Sopenharmony_ci   argument was not :data:`PIPE`, this attribute is ``None``.
8957db96d56Sopenharmony_ci
8967db96d56Sopenharmony_ci
8977db96d56Sopenharmony_ci.. attribute:: Popen.stderr
8987db96d56Sopenharmony_ci
8997db96d56Sopenharmony_ci   If the *stderr* argument was :data:`PIPE`, this attribute is a readable
9007db96d56Sopenharmony_ci   stream object as returned by :func:`open`. Reading from the stream provides
9017db96d56Sopenharmony_ci   error output from the child process. If the *encoding* or *errors* arguments
9027db96d56Sopenharmony_ci   were specified or the *text* or *universal_newlines* argument was ``True``, the
9037db96d56Sopenharmony_ci   stream is a text stream, otherwise it is a byte stream. If the *stderr* argument
9047db96d56Sopenharmony_ci   was not :data:`PIPE`, this attribute is ``None``.
9057db96d56Sopenharmony_ci
9067db96d56Sopenharmony_ci.. warning::
9077db96d56Sopenharmony_ci
9087db96d56Sopenharmony_ci   Use :meth:`~Popen.communicate` rather than :attr:`.stdin.write <Popen.stdin>`,
9097db96d56Sopenharmony_ci   :attr:`.stdout.read <Popen.stdout>` or :attr:`.stderr.read <Popen.stderr>` to avoid
9107db96d56Sopenharmony_ci   deadlocks due to any of the other OS pipe buffers filling up and blocking the
9117db96d56Sopenharmony_ci   child process.
9127db96d56Sopenharmony_ci
9137db96d56Sopenharmony_ci
9147db96d56Sopenharmony_ci.. attribute:: Popen.pid
9157db96d56Sopenharmony_ci
9167db96d56Sopenharmony_ci   The process ID of the child process.
9177db96d56Sopenharmony_ci
9187db96d56Sopenharmony_ci   Note that if you set the *shell* argument to ``True``, this is the process ID
9197db96d56Sopenharmony_ci   of the spawned shell.
9207db96d56Sopenharmony_ci
9217db96d56Sopenharmony_ci
9227db96d56Sopenharmony_ci.. attribute:: Popen.returncode
9237db96d56Sopenharmony_ci
9247db96d56Sopenharmony_ci   The child return code. Initially ``None``, :attr:`returncode` is set by
9257db96d56Sopenharmony_ci   a call to the :meth:`poll`, :meth:`wait`, or :meth:`communicate` methods
9267db96d56Sopenharmony_ci   if they detect that the process has terminated.
9277db96d56Sopenharmony_ci
9287db96d56Sopenharmony_ci   A ``None`` value indicates that the process hadn't yet terminated at the
9297db96d56Sopenharmony_ci   time of the last method call.
9307db96d56Sopenharmony_ci
9317db96d56Sopenharmony_ci   A negative value ``-N`` indicates that the child was terminated by signal
9327db96d56Sopenharmony_ci   ``N`` (POSIX only).
9337db96d56Sopenharmony_ci
9347db96d56Sopenharmony_ci
9357db96d56Sopenharmony_ciWindows Popen Helpers
9367db96d56Sopenharmony_ci---------------------
9377db96d56Sopenharmony_ci
9387db96d56Sopenharmony_ciThe :class:`STARTUPINFO` class and following constants are only available
9397db96d56Sopenharmony_cion Windows.
9407db96d56Sopenharmony_ci
9417db96d56Sopenharmony_ci.. class:: STARTUPINFO(*, dwFlags=0, hStdInput=None, hStdOutput=None, \
9427db96d56Sopenharmony_ci                       hStdError=None, wShowWindow=0, lpAttributeList=None)
9437db96d56Sopenharmony_ci
9447db96d56Sopenharmony_ci   Partial support of the Windows
9457db96d56Sopenharmony_ci   `STARTUPINFO <https://msdn.microsoft.com/en-us/library/ms686331(v=vs.85).aspx>`__
9467db96d56Sopenharmony_ci   structure is used for :class:`Popen` creation.  The following attributes can
9477db96d56Sopenharmony_ci   be set by passing them as keyword-only arguments.
9487db96d56Sopenharmony_ci
9497db96d56Sopenharmony_ci   .. versionchanged:: 3.7
9507db96d56Sopenharmony_ci      Keyword-only argument support was added.
9517db96d56Sopenharmony_ci
9527db96d56Sopenharmony_ci   .. attribute:: dwFlags
9537db96d56Sopenharmony_ci
9547db96d56Sopenharmony_ci      A bit field that determines whether certain :class:`STARTUPINFO`
9557db96d56Sopenharmony_ci      attributes are used when the process creates a window. ::
9567db96d56Sopenharmony_ci
9577db96d56Sopenharmony_ci         si = subprocess.STARTUPINFO()
9587db96d56Sopenharmony_ci         si.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW
9597db96d56Sopenharmony_ci
9607db96d56Sopenharmony_ci   .. attribute:: hStdInput
9617db96d56Sopenharmony_ci
9627db96d56Sopenharmony_ci      If :attr:`dwFlags` specifies :data:`STARTF_USESTDHANDLES`, this attribute
9637db96d56Sopenharmony_ci      is the standard input handle for the process. If
9647db96d56Sopenharmony_ci      :data:`STARTF_USESTDHANDLES` is not specified, the default for standard
9657db96d56Sopenharmony_ci      input is the keyboard buffer.
9667db96d56Sopenharmony_ci
9677db96d56Sopenharmony_ci   .. attribute:: hStdOutput
9687db96d56Sopenharmony_ci
9697db96d56Sopenharmony_ci      If :attr:`dwFlags` specifies :data:`STARTF_USESTDHANDLES`, this attribute
9707db96d56Sopenharmony_ci      is the standard output handle for the process. Otherwise, this attribute
9717db96d56Sopenharmony_ci      is ignored and the default for standard output is the console window's
9727db96d56Sopenharmony_ci      buffer.
9737db96d56Sopenharmony_ci
9747db96d56Sopenharmony_ci   .. attribute:: hStdError
9757db96d56Sopenharmony_ci
9767db96d56Sopenharmony_ci      If :attr:`dwFlags` specifies :data:`STARTF_USESTDHANDLES`, this attribute
9777db96d56Sopenharmony_ci      is the standard error handle for the process. Otherwise, this attribute is
9787db96d56Sopenharmony_ci      ignored and the default for standard error is the console window's buffer.
9797db96d56Sopenharmony_ci
9807db96d56Sopenharmony_ci   .. attribute:: wShowWindow
9817db96d56Sopenharmony_ci
9827db96d56Sopenharmony_ci      If :attr:`dwFlags` specifies :data:`STARTF_USESHOWWINDOW`, this attribute
9837db96d56Sopenharmony_ci      can be any of the values that can be specified in the ``nCmdShow``
9847db96d56Sopenharmony_ci      parameter for the
9857db96d56Sopenharmony_ci      `ShowWindow <https://msdn.microsoft.com/en-us/library/ms633548(v=vs.85).aspx>`__
9867db96d56Sopenharmony_ci      function, except for ``SW_SHOWDEFAULT``. Otherwise, this attribute is
9877db96d56Sopenharmony_ci      ignored.
9887db96d56Sopenharmony_ci
9897db96d56Sopenharmony_ci      :data:`SW_HIDE` is provided for this attribute. It is used when
9907db96d56Sopenharmony_ci      :class:`Popen` is called with ``shell=True``.
9917db96d56Sopenharmony_ci
9927db96d56Sopenharmony_ci   .. attribute:: lpAttributeList
9937db96d56Sopenharmony_ci
9947db96d56Sopenharmony_ci      A dictionary of additional attributes for process creation as given in
9957db96d56Sopenharmony_ci      ``STARTUPINFOEX``, see
9967db96d56Sopenharmony_ci      `UpdateProcThreadAttribute <https://msdn.microsoft.com/en-us/library/windows/desktop/ms686880(v=vs.85).aspx>`__.
9977db96d56Sopenharmony_ci
9987db96d56Sopenharmony_ci      Supported attributes:
9997db96d56Sopenharmony_ci
10007db96d56Sopenharmony_ci      **handle_list**
10017db96d56Sopenharmony_ci         Sequence of handles that will be inherited. *close_fds* must be true if
10027db96d56Sopenharmony_ci         non-empty.
10037db96d56Sopenharmony_ci
10047db96d56Sopenharmony_ci         The handles must be temporarily made inheritable by
10057db96d56Sopenharmony_ci         :func:`os.set_handle_inheritable` when passed to the :class:`Popen`
10067db96d56Sopenharmony_ci         constructor, else :class:`OSError` will be raised with Windows error
10077db96d56Sopenharmony_ci         ``ERROR_INVALID_PARAMETER`` (87).
10087db96d56Sopenharmony_ci
10097db96d56Sopenharmony_ci         .. warning::
10107db96d56Sopenharmony_ci
10117db96d56Sopenharmony_ci            In a multithreaded process, use caution to avoid leaking handles
10127db96d56Sopenharmony_ci            that are marked inheritable when combining this feature with
10137db96d56Sopenharmony_ci            concurrent calls to other process creation functions that inherit
10147db96d56Sopenharmony_ci            all handles such as :func:`os.system`.  This also applies to
10157db96d56Sopenharmony_ci            standard handle redirection, which temporarily creates inheritable
10167db96d56Sopenharmony_ci            handles.
10177db96d56Sopenharmony_ci
10187db96d56Sopenharmony_ci      .. versionadded:: 3.7
10197db96d56Sopenharmony_ci
10207db96d56Sopenharmony_ciWindows Constants
10217db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^
10227db96d56Sopenharmony_ci
10237db96d56Sopenharmony_ciThe :mod:`subprocess` module exposes the following constants.
10247db96d56Sopenharmony_ci
10257db96d56Sopenharmony_ci.. data:: STD_INPUT_HANDLE
10267db96d56Sopenharmony_ci
10277db96d56Sopenharmony_ci   The standard input device. Initially, this is the console input buffer,
10287db96d56Sopenharmony_ci   ``CONIN$``.
10297db96d56Sopenharmony_ci
10307db96d56Sopenharmony_ci.. data:: STD_OUTPUT_HANDLE
10317db96d56Sopenharmony_ci
10327db96d56Sopenharmony_ci   The standard output device. Initially, this is the active console screen
10337db96d56Sopenharmony_ci   buffer, ``CONOUT$``.
10347db96d56Sopenharmony_ci
10357db96d56Sopenharmony_ci.. data:: STD_ERROR_HANDLE
10367db96d56Sopenharmony_ci
10377db96d56Sopenharmony_ci   The standard error device. Initially, this is the active console screen
10387db96d56Sopenharmony_ci   buffer, ``CONOUT$``.
10397db96d56Sopenharmony_ci
10407db96d56Sopenharmony_ci.. data:: SW_HIDE
10417db96d56Sopenharmony_ci
10427db96d56Sopenharmony_ci   Hides the window. Another window will be activated.
10437db96d56Sopenharmony_ci
10447db96d56Sopenharmony_ci.. data:: STARTF_USESTDHANDLES
10457db96d56Sopenharmony_ci
10467db96d56Sopenharmony_ci   Specifies that the :attr:`STARTUPINFO.hStdInput`,
10477db96d56Sopenharmony_ci   :attr:`STARTUPINFO.hStdOutput`, and :attr:`STARTUPINFO.hStdError` attributes
10487db96d56Sopenharmony_ci   contain additional information.
10497db96d56Sopenharmony_ci
10507db96d56Sopenharmony_ci.. data:: STARTF_USESHOWWINDOW
10517db96d56Sopenharmony_ci
10527db96d56Sopenharmony_ci   Specifies that the :attr:`STARTUPINFO.wShowWindow` attribute contains
10537db96d56Sopenharmony_ci   additional information.
10547db96d56Sopenharmony_ci
10557db96d56Sopenharmony_ci.. data:: CREATE_NEW_CONSOLE
10567db96d56Sopenharmony_ci
10577db96d56Sopenharmony_ci   The new process has a new console, instead of inheriting its parent's
10587db96d56Sopenharmony_ci   console (the default).
10597db96d56Sopenharmony_ci
10607db96d56Sopenharmony_ci.. data:: CREATE_NEW_PROCESS_GROUP
10617db96d56Sopenharmony_ci
10627db96d56Sopenharmony_ci   A :class:`Popen` ``creationflags`` parameter to specify that a new process
10637db96d56Sopenharmony_ci   group will be created. This flag is necessary for using :func:`os.kill`
10647db96d56Sopenharmony_ci   on the subprocess.
10657db96d56Sopenharmony_ci
10667db96d56Sopenharmony_ci   This flag is ignored if :data:`CREATE_NEW_CONSOLE` is specified.
10677db96d56Sopenharmony_ci
10687db96d56Sopenharmony_ci.. data:: ABOVE_NORMAL_PRIORITY_CLASS
10697db96d56Sopenharmony_ci
10707db96d56Sopenharmony_ci   A :class:`Popen` ``creationflags`` parameter to specify that a new process
10717db96d56Sopenharmony_ci   will have an above average priority.
10727db96d56Sopenharmony_ci
10737db96d56Sopenharmony_ci   .. versionadded:: 3.7
10747db96d56Sopenharmony_ci
10757db96d56Sopenharmony_ci.. data:: BELOW_NORMAL_PRIORITY_CLASS
10767db96d56Sopenharmony_ci
10777db96d56Sopenharmony_ci   A :class:`Popen` ``creationflags`` parameter to specify that a new process
10787db96d56Sopenharmony_ci   will have a below average priority.
10797db96d56Sopenharmony_ci
10807db96d56Sopenharmony_ci   .. versionadded:: 3.7
10817db96d56Sopenharmony_ci
10827db96d56Sopenharmony_ci.. data:: HIGH_PRIORITY_CLASS
10837db96d56Sopenharmony_ci
10847db96d56Sopenharmony_ci   A :class:`Popen` ``creationflags`` parameter to specify that a new process
10857db96d56Sopenharmony_ci   will have a high priority.
10867db96d56Sopenharmony_ci
10877db96d56Sopenharmony_ci   .. versionadded:: 3.7
10887db96d56Sopenharmony_ci
10897db96d56Sopenharmony_ci.. data:: IDLE_PRIORITY_CLASS
10907db96d56Sopenharmony_ci
10917db96d56Sopenharmony_ci   A :class:`Popen` ``creationflags`` parameter to specify that a new process
10927db96d56Sopenharmony_ci   will have an idle (lowest) priority.
10937db96d56Sopenharmony_ci
10947db96d56Sopenharmony_ci   .. versionadded:: 3.7
10957db96d56Sopenharmony_ci
10967db96d56Sopenharmony_ci.. data:: NORMAL_PRIORITY_CLASS
10977db96d56Sopenharmony_ci
10987db96d56Sopenharmony_ci   A :class:`Popen` ``creationflags`` parameter to specify that a new process
10997db96d56Sopenharmony_ci   will have an normal priority. (default)
11007db96d56Sopenharmony_ci
11017db96d56Sopenharmony_ci   .. versionadded:: 3.7
11027db96d56Sopenharmony_ci
11037db96d56Sopenharmony_ci.. data:: REALTIME_PRIORITY_CLASS
11047db96d56Sopenharmony_ci
11057db96d56Sopenharmony_ci   A :class:`Popen` ``creationflags`` parameter to specify that a new process
11067db96d56Sopenharmony_ci   will have realtime priority.
11077db96d56Sopenharmony_ci   You should almost never use REALTIME_PRIORITY_CLASS, because this interrupts
11087db96d56Sopenharmony_ci   system threads that manage mouse input, keyboard input, and background disk
11097db96d56Sopenharmony_ci   flushing. This class can be appropriate for applications that "talk" directly
11107db96d56Sopenharmony_ci   to hardware or that perform brief tasks that should have limited interruptions.
11117db96d56Sopenharmony_ci
11127db96d56Sopenharmony_ci   .. versionadded:: 3.7
11137db96d56Sopenharmony_ci
11147db96d56Sopenharmony_ci.. data:: CREATE_NO_WINDOW
11157db96d56Sopenharmony_ci
11167db96d56Sopenharmony_ci   A :class:`Popen` ``creationflags`` parameter to specify that a new process
11177db96d56Sopenharmony_ci   will not create a window.
11187db96d56Sopenharmony_ci
11197db96d56Sopenharmony_ci   .. versionadded:: 3.7
11207db96d56Sopenharmony_ci
11217db96d56Sopenharmony_ci.. data:: DETACHED_PROCESS
11227db96d56Sopenharmony_ci
11237db96d56Sopenharmony_ci   A :class:`Popen` ``creationflags`` parameter to specify that a new process
11247db96d56Sopenharmony_ci   will not inherit its parent's console.
11257db96d56Sopenharmony_ci   This value cannot be used with CREATE_NEW_CONSOLE.
11267db96d56Sopenharmony_ci
11277db96d56Sopenharmony_ci   .. versionadded:: 3.7
11287db96d56Sopenharmony_ci
11297db96d56Sopenharmony_ci.. data:: CREATE_DEFAULT_ERROR_MODE
11307db96d56Sopenharmony_ci
11317db96d56Sopenharmony_ci   A :class:`Popen` ``creationflags`` parameter to specify that a new process
11327db96d56Sopenharmony_ci   does not inherit the error mode of the calling process. Instead, the new
11337db96d56Sopenharmony_ci   process gets the default error mode.
11347db96d56Sopenharmony_ci   This feature is particularly useful for multithreaded shell applications
11357db96d56Sopenharmony_ci   that run with hard errors disabled.
11367db96d56Sopenharmony_ci
11377db96d56Sopenharmony_ci   .. versionadded:: 3.7
11387db96d56Sopenharmony_ci
11397db96d56Sopenharmony_ci.. data:: CREATE_BREAKAWAY_FROM_JOB
11407db96d56Sopenharmony_ci
11417db96d56Sopenharmony_ci   A :class:`Popen` ``creationflags`` parameter to specify that a new process
11427db96d56Sopenharmony_ci   is not associated with the job.
11437db96d56Sopenharmony_ci
11447db96d56Sopenharmony_ci   .. versionadded:: 3.7
11457db96d56Sopenharmony_ci
11467db96d56Sopenharmony_ci.. _call-function-trio:
11477db96d56Sopenharmony_ci
11487db96d56Sopenharmony_ciOlder high-level API
11497db96d56Sopenharmony_ci--------------------
11507db96d56Sopenharmony_ci
11517db96d56Sopenharmony_ciPrior to Python 3.5, these three functions comprised the high level API to
11527db96d56Sopenharmony_cisubprocess. You can now use :func:`run` in many cases, but lots of existing code
11537db96d56Sopenharmony_cicalls these functions.
11547db96d56Sopenharmony_ci
11557db96d56Sopenharmony_ci.. function:: call(args, *, stdin=None, stdout=None, stderr=None, \
11567db96d56Sopenharmony_ci                   shell=False, cwd=None, timeout=None, **other_popen_kwargs)
11577db96d56Sopenharmony_ci
11587db96d56Sopenharmony_ci   Run the command described by *args*.  Wait for command to complete, then
11597db96d56Sopenharmony_ci   return the :attr:`~Popen.returncode` attribute.
11607db96d56Sopenharmony_ci
11617db96d56Sopenharmony_ci   Code needing to capture stdout or stderr should use :func:`run` instead::
11627db96d56Sopenharmony_ci
11637db96d56Sopenharmony_ci       run(...).returncode
11647db96d56Sopenharmony_ci
11657db96d56Sopenharmony_ci   To suppress stdout or stderr, supply a value of :data:`DEVNULL`.
11667db96d56Sopenharmony_ci
11677db96d56Sopenharmony_ci   The arguments shown above are merely some common ones.
11687db96d56Sopenharmony_ci   The full function signature is the
11697db96d56Sopenharmony_ci   same as that of the :class:`Popen` constructor - this function passes all
11707db96d56Sopenharmony_ci   supplied arguments other than *timeout* directly through to that interface.
11717db96d56Sopenharmony_ci
11727db96d56Sopenharmony_ci   .. note::
11737db96d56Sopenharmony_ci
11747db96d56Sopenharmony_ci      Do not use ``stdout=PIPE`` or ``stderr=PIPE`` with this
11757db96d56Sopenharmony_ci      function.  The child process will block if it generates enough
11767db96d56Sopenharmony_ci      output to a pipe to fill up the OS pipe buffer as the pipes are
11777db96d56Sopenharmony_ci      not being read from.
11787db96d56Sopenharmony_ci
11797db96d56Sopenharmony_ci   .. versionchanged:: 3.3
11807db96d56Sopenharmony_ci      *timeout* was added.
11817db96d56Sopenharmony_ci
11827db96d56Sopenharmony_ci   .. versionchanged:: 3.11.3
11837db96d56Sopenharmony_ci
11847db96d56Sopenharmony_ci      Changed Windows shell search order for ``shell=True``. The current
11857db96d56Sopenharmony_ci      directory and ``%PATH%`` are replaced with ``%COMSPEC%`` and
11867db96d56Sopenharmony_ci      ``%SystemRoot%\System32\cmd.exe``. As a result, dropping a
11877db96d56Sopenharmony_ci      malicious program named ``cmd.exe`` into a current directory no
11887db96d56Sopenharmony_ci      longer works.
11897db96d56Sopenharmony_ci
11907db96d56Sopenharmony_ci.. function:: check_call(args, *, stdin=None, stdout=None, stderr=None, \
11917db96d56Sopenharmony_ci                         shell=False, cwd=None, timeout=None, \
11927db96d56Sopenharmony_ci                         **other_popen_kwargs)
11937db96d56Sopenharmony_ci
11947db96d56Sopenharmony_ci   Run command with arguments.  Wait for command to complete. If the return
11957db96d56Sopenharmony_ci   code was zero then return, otherwise raise :exc:`CalledProcessError`. The
11967db96d56Sopenharmony_ci   :exc:`CalledProcessError` object will have the return code in the
11977db96d56Sopenharmony_ci   :attr:`~CalledProcessError.returncode` attribute.
11987db96d56Sopenharmony_ci   If :func:`check_call` was unable to start the process it will propagate the exception
11997db96d56Sopenharmony_ci   that was raised.
12007db96d56Sopenharmony_ci
12017db96d56Sopenharmony_ci   Code needing to capture stdout or stderr should use :func:`run` instead::
12027db96d56Sopenharmony_ci
12037db96d56Sopenharmony_ci       run(..., check=True)
12047db96d56Sopenharmony_ci
12057db96d56Sopenharmony_ci   To suppress stdout or stderr, supply a value of :data:`DEVNULL`.
12067db96d56Sopenharmony_ci
12077db96d56Sopenharmony_ci   The arguments shown above are merely some common ones.
12087db96d56Sopenharmony_ci   The full function signature is the
12097db96d56Sopenharmony_ci   same as that of the :class:`Popen` constructor - this function passes all
12107db96d56Sopenharmony_ci   supplied arguments other than *timeout* directly through to that interface.
12117db96d56Sopenharmony_ci
12127db96d56Sopenharmony_ci   .. note::
12137db96d56Sopenharmony_ci
12147db96d56Sopenharmony_ci      Do not use ``stdout=PIPE`` or ``stderr=PIPE`` with this
12157db96d56Sopenharmony_ci      function.  The child process will block if it generates enough
12167db96d56Sopenharmony_ci      output to a pipe to fill up the OS pipe buffer as the pipes are
12177db96d56Sopenharmony_ci      not being read from.
12187db96d56Sopenharmony_ci
12197db96d56Sopenharmony_ci   .. versionchanged:: 3.3
12207db96d56Sopenharmony_ci      *timeout* was added.
12217db96d56Sopenharmony_ci
12227db96d56Sopenharmony_ci   .. versionchanged:: 3.11.3
12237db96d56Sopenharmony_ci
12247db96d56Sopenharmony_ci      Changed Windows shell search order for ``shell=True``. The current
12257db96d56Sopenharmony_ci      directory and ``%PATH%`` are replaced with ``%COMSPEC%`` and
12267db96d56Sopenharmony_ci      ``%SystemRoot%\System32\cmd.exe``. As a result, dropping a
12277db96d56Sopenharmony_ci      malicious program named ``cmd.exe`` into a current directory no
12287db96d56Sopenharmony_ci      longer works.
12297db96d56Sopenharmony_ci
12307db96d56Sopenharmony_ci
12317db96d56Sopenharmony_ci.. function:: check_output(args, *, stdin=None, stderr=None, shell=False, \
12327db96d56Sopenharmony_ci                           cwd=None, encoding=None, errors=None, \
12337db96d56Sopenharmony_ci                           universal_newlines=None, timeout=None, text=None, \
12347db96d56Sopenharmony_ci                           **other_popen_kwargs)
12357db96d56Sopenharmony_ci
12367db96d56Sopenharmony_ci   Run command with arguments and return its output.
12377db96d56Sopenharmony_ci
12387db96d56Sopenharmony_ci   If the return code was non-zero it raises a :exc:`CalledProcessError`. The
12397db96d56Sopenharmony_ci   :exc:`CalledProcessError` object will have the return code in the
12407db96d56Sopenharmony_ci   :attr:`~CalledProcessError.returncode` attribute and any output in the
12417db96d56Sopenharmony_ci   :attr:`~CalledProcessError.output` attribute.
12427db96d56Sopenharmony_ci
12437db96d56Sopenharmony_ci   This is equivalent to::
12447db96d56Sopenharmony_ci
12457db96d56Sopenharmony_ci       run(..., check=True, stdout=PIPE).stdout
12467db96d56Sopenharmony_ci
12477db96d56Sopenharmony_ci   The arguments shown above are merely some common ones.
12487db96d56Sopenharmony_ci   The full function signature is largely the same as that of :func:`run` -
12497db96d56Sopenharmony_ci   most arguments are passed directly through to that interface.
12507db96d56Sopenharmony_ci   One API deviation from :func:`run` behavior exists: passing ``input=None``
12517db96d56Sopenharmony_ci   will behave the same as ``input=b''`` (or ``input=''``, depending on other
12527db96d56Sopenharmony_ci   arguments) rather than using the parent's standard input file handle.
12537db96d56Sopenharmony_ci
12547db96d56Sopenharmony_ci   By default, this function will return the data as encoded bytes. The actual
12557db96d56Sopenharmony_ci   encoding of the output data may depend on the command being invoked, so the
12567db96d56Sopenharmony_ci   decoding to text will often need to be handled at the application level.
12577db96d56Sopenharmony_ci
12587db96d56Sopenharmony_ci   This behaviour may be overridden by setting *text*, *encoding*, *errors*,
12597db96d56Sopenharmony_ci   or *universal_newlines* to ``True`` as described in
12607db96d56Sopenharmony_ci   :ref:`frequently-used-arguments` and :func:`run`.
12617db96d56Sopenharmony_ci
12627db96d56Sopenharmony_ci   To also capture standard error in the result, use
12637db96d56Sopenharmony_ci   ``stderr=subprocess.STDOUT``::
12647db96d56Sopenharmony_ci
12657db96d56Sopenharmony_ci      >>> subprocess.check_output(
12667db96d56Sopenharmony_ci      ...     "ls non_existent_file; exit 0",
12677db96d56Sopenharmony_ci      ...     stderr=subprocess.STDOUT,
12687db96d56Sopenharmony_ci      ...     shell=True)
12697db96d56Sopenharmony_ci      'ls: non_existent_file: No such file or directory\n'
12707db96d56Sopenharmony_ci
12717db96d56Sopenharmony_ci   .. versionadded:: 3.1
12727db96d56Sopenharmony_ci
12737db96d56Sopenharmony_ci   .. versionchanged:: 3.3
12747db96d56Sopenharmony_ci      *timeout* was added.
12757db96d56Sopenharmony_ci
12767db96d56Sopenharmony_ci   .. versionchanged:: 3.4
12777db96d56Sopenharmony_ci      Support for the *input* keyword argument was added.
12787db96d56Sopenharmony_ci
12797db96d56Sopenharmony_ci   .. versionchanged:: 3.6
12807db96d56Sopenharmony_ci      *encoding* and *errors* were added.  See :func:`run` for details.
12817db96d56Sopenharmony_ci
12827db96d56Sopenharmony_ci   .. versionadded:: 3.7
12837db96d56Sopenharmony_ci      *text* was added as a more readable alias for *universal_newlines*.
12847db96d56Sopenharmony_ci
12857db96d56Sopenharmony_ci   .. versionchanged:: 3.11.3
12867db96d56Sopenharmony_ci
12877db96d56Sopenharmony_ci      Changed Windows shell search order for ``shell=True``. The current
12887db96d56Sopenharmony_ci      directory and ``%PATH%`` are replaced with ``%COMSPEC%`` and
12897db96d56Sopenharmony_ci      ``%SystemRoot%\System32\cmd.exe``. As a result, dropping a
12907db96d56Sopenharmony_ci      malicious program named ``cmd.exe`` into a current directory no
12917db96d56Sopenharmony_ci      longer works.
12927db96d56Sopenharmony_ci
12937db96d56Sopenharmony_ci
12947db96d56Sopenharmony_ci.. _subprocess-replacements:
12957db96d56Sopenharmony_ci
12967db96d56Sopenharmony_ciReplacing Older Functions with the :mod:`subprocess` Module
12977db96d56Sopenharmony_ci-----------------------------------------------------------
12987db96d56Sopenharmony_ci
12997db96d56Sopenharmony_ciIn this section, "a becomes b" means that b can be used as a replacement for a.
13007db96d56Sopenharmony_ci
13017db96d56Sopenharmony_ci.. note::
13027db96d56Sopenharmony_ci
13037db96d56Sopenharmony_ci   All "a" functions in this section fail (more or less) silently if the
13047db96d56Sopenharmony_ci   executed program cannot be found; the "b" replacements raise :exc:`OSError`
13057db96d56Sopenharmony_ci   instead.
13067db96d56Sopenharmony_ci
13077db96d56Sopenharmony_ci   In addition, the replacements using :func:`check_output` will fail with a
13087db96d56Sopenharmony_ci   :exc:`CalledProcessError` if the requested operation produces a non-zero
13097db96d56Sopenharmony_ci   return code. The output is still available as the
13107db96d56Sopenharmony_ci   :attr:`~CalledProcessError.output` attribute of the raised exception.
13117db96d56Sopenharmony_ci
13127db96d56Sopenharmony_ciIn the following examples, we assume that the relevant functions have already
13137db96d56Sopenharmony_cibeen imported from the :mod:`subprocess` module.
13147db96d56Sopenharmony_ci
13157db96d56Sopenharmony_ci
13167db96d56Sopenharmony_ciReplacing :program:`/bin/sh` shell command substitution
13177db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13187db96d56Sopenharmony_ci
13197db96d56Sopenharmony_ci.. code-block:: bash
13207db96d56Sopenharmony_ci
13217db96d56Sopenharmony_ci   output=$(mycmd myarg)
13227db96d56Sopenharmony_ci
13237db96d56Sopenharmony_cibecomes::
13247db96d56Sopenharmony_ci
13257db96d56Sopenharmony_ci   output = check_output(["mycmd", "myarg"])
13267db96d56Sopenharmony_ci
13277db96d56Sopenharmony_ciReplacing shell pipeline
13287db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^
13297db96d56Sopenharmony_ci
13307db96d56Sopenharmony_ci.. code-block:: bash
13317db96d56Sopenharmony_ci
13327db96d56Sopenharmony_ci   output=$(dmesg | grep hda)
13337db96d56Sopenharmony_ci
13347db96d56Sopenharmony_cibecomes::
13357db96d56Sopenharmony_ci
13367db96d56Sopenharmony_ci   p1 = Popen(["dmesg"], stdout=PIPE)
13377db96d56Sopenharmony_ci   p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
13387db96d56Sopenharmony_ci   p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
13397db96d56Sopenharmony_ci   output = p2.communicate()[0]
13407db96d56Sopenharmony_ci
13417db96d56Sopenharmony_ciThe ``p1.stdout.close()`` call after starting the p2 is important in order for
13427db96d56Sopenharmony_cip1 to receive a SIGPIPE if p2 exits before p1.
13437db96d56Sopenharmony_ci
13447db96d56Sopenharmony_ciAlternatively, for trusted input, the shell's own pipeline support may still
13457db96d56Sopenharmony_cibe used directly:
13467db96d56Sopenharmony_ci
13477db96d56Sopenharmony_ci.. code-block:: bash
13487db96d56Sopenharmony_ci
13497db96d56Sopenharmony_ci   output=$(dmesg | grep hda)
13507db96d56Sopenharmony_ci
13517db96d56Sopenharmony_cibecomes::
13527db96d56Sopenharmony_ci
13537db96d56Sopenharmony_ci   output = check_output("dmesg | grep hda", shell=True)
13547db96d56Sopenharmony_ci
13557db96d56Sopenharmony_ci
13567db96d56Sopenharmony_ciReplacing :func:`os.system`
13577db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^
13587db96d56Sopenharmony_ci
13597db96d56Sopenharmony_ci::
13607db96d56Sopenharmony_ci
13617db96d56Sopenharmony_ci   sts = os.system("mycmd" + " myarg")
13627db96d56Sopenharmony_ci   # becomes
13637db96d56Sopenharmony_ci   retcode = call("mycmd" + " myarg", shell=True)
13647db96d56Sopenharmony_ci
13657db96d56Sopenharmony_ciNotes:
13667db96d56Sopenharmony_ci
13677db96d56Sopenharmony_ci* Calling the program through the shell is usually not required.
13687db96d56Sopenharmony_ci* The :func:`call` return value is encoded differently to that of
13697db96d56Sopenharmony_ci  :func:`os.system`.
13707db96d56Sopenharmony_ci
13717db96d56Sopenharmony_ci* The :func:`os.system` function ignores SIGINT and SIGQUIT signals while
13727db96d56Sopenharmony_ci  the command is running, but the caller must do this separately when
13737db96d56Sopenharmony_ci  using the :mod:`subprocess` module.
13747db96d56Sopenharmony_ci
13757db96d56Sopenharmony_ciA more realistic example would look like this::
13767db96d56Sopenharmony_ci
13777db96d56Sopenharmony_ci   try:
13787db96d56Sopenharmony_ci       retcode = call("mycmd" + " myarg", shell=True)
13797db96d56Sopenharmony_ci       if retcode < 0:
13807db96d56Sopenharmony_ci           print("Child was terminated by signal", -retcode, file=sys.stderr)
13817db96d56Sopenharmony_ci       else:
13827db96d56Sopenharmony_ci           print("Child returned", retcode, file=sys.stderr)
13837db96d56Sopenharmony_ci   except OSError as e:
13847db96d56Sopenharmony_ci       print("Execution failed:", e, file=sys.stderr)
13857db96d56Sopenharmony_ci
13867db96d56Sopenharmony_ci
13877db96d56Sopenharmony_ciReplacing the :func:`os.spawn <os.spawnl>` family
13887db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
13897db96d56Sopenharmony_ci
13907db96d56Sopenharmony_ciP_NOWAIT example::
13917db96d56Sopenharmony_ci
13927db96d56Sopenharmony_ci   pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")
13937db96d56Sopenharmony_ci   ==>
13947db96d56Sopenharmony_ci   pid = Popen(["/bin/mycmd", "myarg"]).pid
13957db96d56Sopenharmony_ci
13967db96d56Sopenharmony_ciP_WAIT example::
13977db96d56Sopenharmony_ci
13987db96d56Sopenharmony_ci   retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg")
13997db96d56Sopenharmony_ci   ==>
14007db96d56Sopenharmony_ci   retcode = call(["/bin/mycmd", "myarg"])
14017db96d56Sopenharmony_ci
14027db96d56Sopenharmony_ciVector example::
14037db96d56Sopenharmony_ci
14047db96d56Sopenharmony_ci   os.spawnvp(os.P_NOWAIT, path, args)
14057db96d56Sopenharmony_ci   ==>
14067db96d56Sopenharmony_ci   Popen([path] + args[1:])
14077db96d56Sopenharmony_ci
14087db96d56Sopenharmony_ciEnvironment example::
14097db96d56Sopenharmony_ci
14107db96d56Sopenharmony_ci   os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env)
14117db96d56Sopenharmony_ci   ==>
14127db96d56Sopenharmony_ci   Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})
14137db96d56Sopenharmony_ci
14147db96d56Sopenharmony_ci
14157db96d56Sopenharmony_ci
14167db96d56Sopenharmony_ciReplacing :func:`os.popen`, :func:`os.popen2`, :func:`os.popen3`
14177db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
14187db96d56Sopenharmony_ci
14197db96d56Sopenharmony_ci::
14207db96d56Sopenharmony_ci
14217db96d56Sopenharmony_ci   (child_stdin, child_stdout) = os.popen2(cmd, mode, bufsize)
14227db96d56Sopenharmony_ci   ==>
14237db96d56Sopenharmony_ci   p = Popen(cmd, shell=True, bufsize=bufsize,
14247db96d56Sopenharmony_ci             stdin=PIPE, stdout=PIPE, close_fds=True)
14257db96d56Sopenharmony_ci   (child_stdin, child_stdout) = (p.stdin, p.stdout)
14267db96d56Sopenharmony_ci
14277db96d56Sopenharmony_ci::
14287db96d56Sopenharmony_ci
14297db96d56Sopenharmony_ci   (child_stdin,
14307db96d56Sopenharmony_ci    child_stdout,
14317db96d56Sopenharmony_ci    child_stderr) = os.popen3(cmd, mode, bufsize)
14327db96d56Sopenharmony_ci   ==>
14337db96d56Sopenharmony_ci   p = Popen(cmd, shell=True, bufsize=bufsize,
14347db96d56Sopenharmony_ci             stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
14357db96d56Sopenharmony_ci   (child_stdin,
14367db96d56Sopenharmony_ci    child_stdout,
14377db96d56Sopenharmony_ci    child_stderr) = (p.stdin, p.stdout, p.stderr)
14387db96d56Sopenharmony_ci
14397db96d56Sopenharmony_ci::
14407db96d56Sopenharmony_ci
14417db96d56Sopenharmony_ci   (child_stdin, child_stdout_and_stderr) = os.popen4(cmd, mode, bufsize)
14427db96d56Sopenharmony_ci   ==>
14437db96d56Sopenharmony_ci   p = Popen(cmd, shell=True, bufsize=bufsize,
14447db96d56Sopenharmony_ci             stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
14457db96d56Sopenharmony_ci   (child_stdin, child_stdout_and_stderr) = (p.stdin, p.stdout)
14467db96d56Sopenharmony_ci
14477db96d56Sopenharmony_ciReturn code handling translates as follows::
14487db96d56Sopenharmony_ci
14497db96d56Sopenharmony_ci   pipe = os.popen(cmd, 'w')
14507db96d56Sopenharmony_ci   ...
14517db96d56Sopenharmony_ci   rc = pipe.close()
14527db96d56Sopenharmony_ci   if rc is not None and rc >> 8:
14537db96d56Sopenharmony_ci       print("There were some errors")
14547db96d56Sopenharmony_ci   ==>
14557db96d56Sopenharmony_ci   process = Popen(cmd, stdin=PIPE)
14567db96d56Sopenharmony_ci   ...
14577db96d56Sopenharmony_ci   process.stdin.close()
14587db96d56Sopenharmony_ci   if process.wait() != 0:
14597db96d56Sopenharmony_ci       print("There were some errors")
14607db96d56Sopenharmony_ci
14617db96d56Sopenharmony_ci
14627db96d56Sopenharmony_ciReplacing functions from the :mod:`popen2` module
14637db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
14647db96d56Sopenharmony_ci
14657db96d56Sopenharmony_ci.. note::
14667db96d56Sopenharmony_ci
14677db96d56Sopenharmony_ci   If the cmd argument to popen2 functions is a string, the command is executed
14687db96d56Sopenharmony_ci   through /bin/sh.  If it is a list, the command is directly executed.
14697db96d56Sopenharmony_ci
14707db96d56Sopenharmony_ci::
14717db96d56Sopenharmony_ci
14727db96d56Sopenharmony_ci   (child_stdout, child_stdin) = popen2.popen2("somestring", bufsize, mode)
14737db96d56Sopenharmony_ci   ==>
14747db96d56Sopenharmony_ci   p = Popen("somestring", shell=True, bufsize=bufsize,
14757db96d56Sopenharmony_ci             stdin=PIPE, stdout=PIPE, close_fds=True)
14767db96d56Sopenharmony_ci   (child_stdout, child_stdin) = (p.stdout, p.stdin)
14777db96d56Sopenharmony_ci
14787db96d56Sopenharmony_ci::
14797db96d56Sopenharmony_ci
14807db96d56Sopenharmony_ci   (child_stdout, child_stdin) = popen2.popen2(["mycmd", "myarg"], bufsize, mode)
14817db96d56Sopenharmony_ci   ==>
14827db96d56Sopenharmony_ci   p = Popen(["mycmd", "myarg"], bufsize=bufsize,
14837db96d56Sopenharmony_ci             stdin=PIPE, stdout=PIPE, close_fds=True)
14847db96d56Sopenharmony_ci   (child_stdout, child_stdin) = (p.stdout, p.stdin)
14857db96d56Sopenharmony_ci
14867db96d56Sopenharmony_ci:class:`popen2.Popen3` and :class:`popen2.Popen4` basically work as
14877db96d56Sopenharmony_ci:class:`subprocess.Popen`, except that:
14887db96d56Sopenharmony_ci
14897db96d56Sopenharmony_ci* :class:`Popen` raises an exception if the execution fails.
14907db96d56Sopenharmony_ci
14917db96d56Sopenharmony_ci* The *capturestderr* argument is replaced with the *stderr* argument.
14927db96d56Sopenharmony_ci
14937db96d56Sopenharmony_ci* ``stdin=PIPE`` and ``stdout=PIPE`` must be specified.
14947db96d56Sopenharmony_ci
14957db96d56Sopenharmony_ci* popen2 closes all file descriptors by default, but you have to specify
14967db96d56Sopenharmony_ci  ``close_fds=True`` with :class:`Popen` to guarantee this behavior on
14977db96d56Sopenharmony_ci  all platforms or past Python versions.
14987db96d56Sopenharmony_ci
14997db96d56Sopenharmony_ci
15007db96d56Sopenharmony_ciLegacy Shell Invocation Functions
15017db96d56Sopenharmony_ci---------------------------------
15027db96d56Sopenharmony_ci
15037db96d56Sopenharmony_ciThis module also provides the following legacy functions from the 2.x
15047db96d56Sopenharmony_ci``commands`` module. These operations implicitly invoke the system shell and
15057db96d56Sopenharmony_cinone of the guarantees described above regarding security and exception
15067db96d56Sopenharmony_cihandling consistency are valid for these functions.
15077db96d56Sopenharmony_ci
15087db96d56Sopenharmony_ci.. function:: getstatusoutput(cmd, *, encoding=None, errors=None)
15097db96d56Sopenharmony_ci
15107db96d56Sopenharmony_ci   Return ``(exitcode, output)`` of executing *cmd* in a shell.
15117db96d56Sopenharmony_ci
15127db96d56Sopenharmony_ci   Execute the string *cmd* in a shell with :meth:`Popen.check_output` and
15137db96d56Sopenharmony_ci   return a 2-tuple ``(exitcode, output)``.
15147db96d56Sopenharmony_ci   *encoding* and *errors* are used to decode output;
15157db96d56Sopenharmony_ci   see the notes on :ref:`frequently-used-arguments` for more details.
15167db96d56Sopenharmony_ci
15177db96d56Sopenharmony_ci   A trailing newline is stripped from the output.
15187db96d56Sopenharmony_ci   The exit code for the command can be interpreted as the return code
15197db96d56Sopenharmony_ci   of subprocess.  Example::
15207db96d56Sopenharmony_ci
15217db96d56Sopenharmony_ci      >>> subprocess.getstatusoutput('ls /bin/ls')
15227db96d56Sopenharmony_ci      (0, '/bin/ls')
15237db96d56Sopenharmony_ci      >>> subprocess.getstatusoutput('cat /bin/junk')
15247db96d56Sopenharmony_ci      (1, 'cat: /bin/junk: No such file or directory')
15257db96d56Sopenharmony_ci      >>> subprocess.getstatusoutput('/bin/junk')
15267db96d56Sopenharmony_ci      (127, 'sh: /bin/junk: not found')
15277db96d56Sopenharmony_ci      >>> subprocess.getstatusoutput('/bin/kill $$')
15287db96d56Sopenharmony_ci      (-15, '')
15297db96d56Sopenharmony_ci
15307db96d56Sopenharmony_ci   .. availability:: Unix, Windows.
15317db96d56Sopenharmony_ci
15327db96d56Sopenharmony_ci   .. versionchanged:: 3.3.4
15337db96d56Sopenharmony_ci      Windows support was added.
15347db96d56Sopenharmony_ci
15357db96d56Sopenharmony_ci      The function now returns (exitcode, output) instead of (status, output)
15367db96d56Sopenharmony_ci      as it did in Python 3.3.3 and earlier.  exitcode has the same value as
15377db96d56Sopenharmony_ci      :attr:`~Popen.returncode`.
15387db96d56Sopenharmony_ci
15397db96d56Sopenharmony_ci   .. versionadded:: 3.11
15407db96d56Sopenharmony_ci      Added *encoding* and *errors* arguments.
15417db96d56Sopenharmony_ci
15427db96d56Sopenharmony_ci.. function:: getoutput(cmd, *, encoding=None, errors=None)
15437db96d56Sopenharmony_ci
15447db96d56Sopenharmony_ci   Return output (stdout and stderr) of executing *cmd* in a shell.
15457db96d56Sopenharmony_ci
15467db96d56Sopenharmony_ci   Like :func:`getstatusoutput`, except the exit code is ignored and the return
15477db96d56Sopenharmony_ci   value is a string containing the command's output.  Example::
15487db96d56Sopenharmony_ci
15497db96d56Sopenharmony_ci      >>> subprocess.getoutput('ls /bin/ls')
15507db96d56Sopenharmony_ci      '/bin/ls'
15517db96d56Sopenharmony_ci
15527db96d56Sopenharmony_ci   .. availability:: Unix, Windows.
15537db96d56Sopenharmony_ci
15547db96d56Sopenharmony_ci   .. versionchanged:: 3.3.4
15557db96d56Sopenharmony_ci      Windows support added
15567db96d56Sopenharmony_ci
15577db96d56Sopenharmony_ci   .. versionadded:: 3.11
15587db96d56Sopenharmony_ci      Added *encoding* and *errors* arguments.
15597db96d56Sopenharmony_ci
15607db96d56Sopenharmony_ci
15617db96d56Sopenharmony_ciNotes
15627db96d56Sopenharmony_ci-----
15637db96d56Sopenharmony_ci
15647db96d56Sopenharmony_ci.. _converting-argument-sequence:
15657db96d56Sopenharmony_ci
15667db96d56Sopenharmony_ciConverting an argument sequence to a string on Windows
15677db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15687db96d56Sopenharmony_ci
15697db96d56Sopenharmony_ciOn Windows, an *args* sequence is converted to a string that can be parsed
15707db96d56Sopenharmony_ciusing the following rules (which correspond to the rules used by the MS C
15717db96d56Sopenharmony_ciruntime):
15727db96d56Sopenharmony_ci
15737db96d56Sopenharmony_ci1. Arguments are delimited by white space, which is either a
15747db96d56Sopenharmony_ci   space or a tab.
15757db96d56Sopenharmony_ci
15767db96d56Sopenharmony_ci2. A string surrounded by double quotation marks is
15777db96d56Sopenharmony_ci   interpreted as a single argument, regardless of white space
15787db96d56Sopenharmony_ci   contained within.  A quoted string can be embedded in an
15797db96d56Sopenharmony_ci   argument.
15807db96d56Sopenharmony_ci
15817db96d56Sopenharmony_ci3. A double quotation mark preceded by a backslash is
15827db96d56Sopenharmony_ci   interpreted as a literal double quotation mark.
15837db96d56Sopenharmony_ci
15847db96d56Sopenharmony_ci4. Backslashes are interpreted literally, unless they
15857db96d56Sopenharmony_ci   immediately precede a double quotation mark.
15867db96d56Sopenharmony_ci
15877db96d56Sopenharmony_ci5. If backslashes immediately precede a double quotation mark,
15887db96d56Sopenharmony_ci   every pair of backslashes is interpreted as a literal
15897db96d56Sopenharmony_ci   backslash.  If the number of backslashes is odd, the last
15907db96d56Sopenharmony_ci   backslash escapes the next double quotation mark as
15917db96d56Sopenharmony_ci   described in rule 3.
15927db96d56Sopenharmony_ci
15937db96d56Sopenharmony_ci
15947db96d56Sopenharmony_ci.. seealso::
15957db96d56Sopenharmony_ci
15967db96d56Sopenharmony_ci   :mod:`shlex`
15977db96d56Sopenharmony_ci      Module which provides function to parse and escape command lines.
15987db96d56Sopenharmony_ci
15997db96d56Sopenharmony_ci
16007db96d56Sopenharmony_ci.. _disable_vfork:
16017db96d56Sopenharmony_ci.. _disable_posix_spawn:
16027db96d56Sopenharmony_ci
16037db96d56Sopenharmony_ciDisabling use of ``vfork()`` or ``posix_spawn()``
16047db96d56Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16057db96d56Sopenharmony_ci
16067db96d56Sopenharmony_ciOn Linux, :mod:`subprocess` defaults to using the ``vfork()`` system call
16077db96d56Sopenharmony_ciinternally when it is safe to do so rather than ``fork()``. This greatly
16087db96d56Sopenharmony_ciimproves performance.
16097db96d56Sopenharmony_ci
16107db96d56Sopenharmony_ciIf you ever encounter a presumed highly unusual situation where you need to
16117db96d56Sopenharmony_ciprevent ``vfork()`` from being used by Python, you can set the
16127db96d56Sopenharmony_ci:attr:`subprocess._USE_VFORK` attribute to a false value.
16137db96d56Sopenharmony_ci
16147db96d56Sopenharmony_ci::
16157db96d56Sopenharmony_ci
16167db96d56Sopenharmony_ci   subprocess._USE_VFORK = False  # See CPython issue gh-NNNNNN.
16177db96d56Sopenharmony_ci
16187db96d56Sopenharmony_ciSetting this has no impact on use of ``posix_spawn()`` which could use
16197db96d56Sopenharmony_ci``vfork()`` internally within its libc implementation.  There is a similar
16207db96d56Sopenharmony_ci:attr:`subprocess._USE_POSIX_SPAWN` attribute if you need to prevent use of
16217db96d56Sopenharmony_cithat.
16227db96d56Sopenharmony_ci
16237db96d56Sopenharmony_ci::
16247db96d56Sopenharmony_ci
16257db96d56Sopenharmony_ci   subprocess._USE_POSIX_SPAWN = False  # See CPython issue gh-NNNNNN.
16267db96d56Sopenharmony_ci
16277db96d56Sopenharmony_ciIt is safe to set these to false on any Python version. They will have no
16287db96d56Sopenharmony_cieffect on older versions when unsupported. Do not assume the attributes are
16297db96d56Sopenharmony_ciavailable to read. Despite their names, a true value does not indicate that the
16307db96d56Sopenharmony_cicorresponding function will be used, only that it may be.
16317db96d56Sopenharmony_ci
16327db96d56Sopenharmony_ciPlease file issues any time you have to use these private knobs with a way to
16337db96d56Sopenharmony_cireproduce the issue you were seeing. Link to that issue from a comment in your
16347db96d56Sopenharmony_cicode.
16357db96d56Sopenharmony_ci
16367db96d56Sopenharmony_ci.. versionadded:: 3.8 ``_USE_POSIX_SPAWN``
16377db96d56Sopenharmony_ci.. versionadded:: 3.11 ``_USE_VFORK``
1638