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