blob: f955a292e15d086ca15bd18e4d8481661249fe31 [file] [log] [blame]
Victor Stinner08444382014-02-02 22:43:39 +01001.. currentmodule:: asyncio
2
Victor Stinner778015b2014-07-11 12:13:39 +02003.. _asyncio-subprocess:
4
Yury Selivanov7c7605f2018-09-11 09:54:40 -07005============
6Subprocesses
7============
Victor Stinner08444382014-02-02 22:43:39 +01008
Kyle Stanleyf9000642019-10-10 19:18:46 -04009**Source code:** :source:`Lib/asyncio/subprocess.py`,
10:source:`Lib/asyncio/base_subprocess.py`
11
12----------------------------------------
13
Yury Selivanov7c7605f2018-09-11 09:54:40 -070014This section describes high-level async/await asyncio APIs to
15create and manage subprocesses.
lf627d2c82017-07-25 17:03:51 -060016
Yury Selivanov7372c3b2018-09-14 15:11:24 -070017.. _asyncio_example_subprocess_shell:
18
Yury Selivanov7c7605f2018-09-11 09:54:40 -070019Here's an example of how asyncio can run a shell command and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040020obtain its result::
Victor Stinner984600f2014-03-25 09:40:26 +010021
Yury Selivanov7c7605f2018-09-11 09:54:40 -070022 import asyncio
Victor Stinner984600f2014-03-25 09:40:26 +010023
Yury Selivanov7c7605f2018-09-11 09:54:40 -070024 async def run(cmd):
25 proc = await asyncio.create_subprocess_shell(
26 cmd,
27 stdout=asyncio.subprocess.PIPE,
28 stderr=asyncio.subprocess.PIPE)
Victor Stinneraea82292014-07-08 23:42:38 +020029
Yury Selivanov7c7605f2018-09-11 09:54:40 -070030 stdout, stderr = await proc.communicate()
Victor Stinner984600f2014-03-25 09:40:26 +010031
Yury Selivanov7c7605f2018-09-11 09:54:40 -070032 print(f'[{cmd!r} exited with {proc.returncode}]')
33 if stdout:
34 print(f'[stdout]\n{stdout.decode()}')
35 if stderr:
36 print(f'[stderr]\n{stderr.decode()}')
Victor Stinner778015b2014-07-11 12:13:39 +020037
Yury Selivanov7c7605f2018-09-11 09:54:40 -070038 asyncio.run(run('ls /zzz'))
39
40will print::
41
42 ['ls /zzz' exited with 1]
43 [stderr]
44 ls: /zzz: No such file or directory
45
46Because all asyncio subprocess functions are asynchronous and asyncio
47provides many tools to work with such functions, it is easy to execute
48and monitor multiple subprocesses in parallel. It is indeed trivial
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040049to modify the above example to run several commands simultaneously::
Yury Selivanov7c7605f2018-09-11 09:54:40 -070050
51 async def main():
52 await asyncio.gather(
53 run('ls /zzz'),
54 run('sleep 1; echo "hello"'))
55
56 asyncio.run(main())
57
58See also the `Examples`_ subsection.
Victor Stinner778015b2014-07-11 12:13:39 +020059
Victor Stinner984600f2014-03-25 09:40:26 +010060
Yury Selivanov7c7605f2018-09-11 09:54:40 -070061Creating Subprocesses
62=====================
Victor Stinner08444382014-02-02 22:43:39 +010063
Andre Delfinodcc997c2020-12-16 22:37:28 -030064.. coroutinefunction:: create_subprocess_exec(program, *args, stdin=None, \
65 stdout=None, stderr=None, limit=None, **kwds)
Victor Stinner08444382014-02-02 22:43:39 +010066
Victor Stinner39892052014-10-14 00:52:07 +020067 Create a subprocess.
Victor Stinner08444382014-02-02 22:43:39 +010068
Yury Selivanov7c7605f2018-09-11 09:54:40 -070069 The *limit* argument sets the buffer limit for :class:`StreamReader`
70 wrappers for :attr:`Process.stdout` and :attr:`Process.stderr`
Carol Willing4e824e92018-09-13 18:28:19 -070071 (if :attr:`subprocess.PIPE` is passed to *stdout* and *stderr* arguments).
Victor Stinner39892052014-10-14 00:52:07 +020072
73 Return a :class:`~asyncio.subprocess.Process` instance.
Victor Stinner984600f2014-03-25 09:40:26 +010074
Yury Selivanov7c7605f2018-09-11 09:54:40 -070075 See the documentation of :meth:`loop.subprocess_exec` for other
76 parameters.
Victor Stinner08444382014-02-02 22:43:39 +010077
Andrew Svetlova4888792019-09-12 15:40:40 +030078
Yury Selivanov7c7605f2018-09-11 09:54:40 -070079.. coroutinefunction:: create_subprocess_shell(cmd, stdin=None, \
Andre Delfinodcc997c2020-12-16 22:37:28 -030080 stdout=None, stderr=None, limit=None, **kwds)
Victor Stinner08444382014-02-02 22:43:39 +010081
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040082 Run the *cmd* shell command.
Victor Stinner08444382014-02-02 22:43:39 +010083
Yury Selivanov7c7605f2018-09-11 09:54:40 -070084 The *limit* argument sets the buffer limit for :class:`StreamReader`
85 wrappers for :attr:`Process.stdout` and :attr:`Process.stderr`
Carol Willing4e824e92018-09-13 18:28:19 -070086 (if :attr:`subprocess.PIPE` is passed to *stdout* and *stderr* arguments).
Victor Stinner39892052014-10-14 00:52:07 +020087
88 Return a :class:`~asyncio.subprocess.Process` instance.
89
Yury Selivanov7c7605f2018-09-11 09:54:40 -070090 See the documentation of :meth:`loop.subprocess_shell` for other
91 parameters.
Victor Stinner984600f2014-03-25 09:40:26 +010092
sth4a0ac422020-05-26 06:08:40 +020093 .. important::
Victor Stinner984600f2014-03-25 09:40:26 +010094
sth4a0ac422020-05-26 06:08:40 +020095 It is the application's responsibility to ensure that all whitespace and
96 special characters are quoted appropriately to avoid `shell injection
97 <https://en.wikipedia.org/wiki/Shell_injection#Shell_injection>`_
98 vulnerabilities. The :func:`shlex.quote` function can be used to properly
99 escape whitespace and special shell characters in strings that are going
100 to be used to construct shell commands.
Victor Stinner984600f2014-03-25 09:40:26 +0100101
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700102.. note::
103
Zackery Spytz4dfb1902020-10-19 16:08:34 -0600104 Subprocesses are available for Windows if a :class:`ProactorEventLoop` is
105 used. See :ref:`Subprocess Support on Windows <asyncio-windows-subprocess>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700106 for details.
Victor Stinner984600f2014-03-25 09:40:26 +0100107
Victor Stinner08444382014-02-02 22:43:39 +0100108.. seealso::
109
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400110 asyncio also has the following *low-level* APIs to work with subprocesses:
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700111 :meth:`loop.subprocess_exec`, :meth:`loop.subprocess_shell`,
112 :meth:`loop.connect_read_pipe`, :meth:`loop.connect_write_pipe`,
113 as well as the :ref:`Subprocess Transports <asyncio-subprocess-transports>`
114 and :ref:`Subprocess Protocols <asyncio-subprocess-protocols>`.
Victor Stinner08444382014-02-02 22:43:39 +0100115
116
117Constants
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700118=========
Victor Stinner08444382014-02-02 22:43:39 +0100119
120.. data:: asyncio.subprocess.PIPE
121
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700122 Can be passed to the *stdin*, *stdout* or *stderr* parameters.
123
124 If *PIPE* is passed to *stdin* argument, the
125 :attr:`Process.stdin <asyncio.subprocess.Process.stdin>` attribute
126 will point to a :class:`StreamWriter` instance.
127
128 If *PIPE* is passed to *stdout* or *stderr* arguments, the
129 :attr:`Process.stdout <asyncio.subprocess.Process.stdout>` and
130 :attr:`Process.stderr <asyncio.subprocess.Process.stderr>`
131 attributes will point to :class:`StreamReader` instances.
Victor Stinner08444382014-02-02 22:43:39 +0100132
133.. data:: asyncio.subprocess.STDOUT
134
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400135 Special value that can be used as the *stderr* argument and indicates
136 that standard error should be redirected into standard output.
Victor Stinner08444382014-02-02 22:43:39 +0100137
138.. data:: asyncio.subprocess.DEVNULL
139
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400140 Special value that can be used as the *stdin*, *stdout* or *stderr* argument
141 to process creation functions. It indicates that the special file
142 :data:`os.devnull` will be used for the corresponding subprocess stream.
Victor Stinner08444382014-02-02 22:43:39 +0100143
144
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700145Interacting with Subprocesses
146=============================
147
148Both :func:`create_subprocess_exec` and :func:`create_subprocess_shell`
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400149functions return instances of the *Process* class. *Process* is a high-level
150wrapper that allows communicating with subprocesses and watching for
151their completion.
Victor Stinner08444382014-02-02 22:43:39 +0100152
153.. class:: asyncio.subprocess.Process
154
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700155 An object that wraps OS processes created by the
156 :func:`create_subprocess_exec` and :func:`create_subprocess_shell`
157 functions.
Victor Stinnerb79eb052014-02-03 23:08:14 +0100158
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700159 This class is designed to have a similar API to the
160 :class:`subprocess.Popen` class, but there are some
161 notable differences:
Victor Stinnerb79eb052014-02-03 23:08:14 +0100162
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700163 * unlike Popen, Process instances do not have an equivalent to
164 the :meth:`~subprocess.Popen.poll` method;
Victor Stinnerb79eb052014-02-03 23:08:14 +0100165
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700166 * the :meth:`~asyncio.subprocess.Process.communicate` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400167 :meth:`~asyncio.subprocess.Process.wait` methods don't have a
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700168 *timeout* parameter: use the :func:`wait_for` function;
169
170 * the :meth:`Process.wait() <asyncio.subprocess.Process.wait>` method
171 is asynchronous, whereas :meth:`subprocess.Popen.wait` method
172 is implemented as a blocking busy loop;
173
174 * the *universal_newlines* parameter is not supported.
175
176 This class is :ref:`not thread safe <asyncio-multithreading>`.
177
178 See also the :ref:`Subprocess and Threads <asyncio-subprocess-threads>`
179 section.
Victor Stinner83704962015-02-25 14:24:15 +0100180
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100181 .. coroutinemethod:: wait()
Victor Stinnerb79eb052014-02-03 23:08:14 +0100182
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400183 Wait for the child process to terminate.
Victor Stinnerb79eb052014-02-03 23:08:14 +0100184
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700185 Set and return the :attr:`returncode` attribute.
Victor Stinnerb79eb052014-02-03 23:08:14 +0100186
Victor Stinner39892052014-10-14 00:52:07 +0200187 .. note::
Victor Stinner08444382014-02-02 22:43:39 +0100188
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700189 This method can deadlock when using ``stdout=PIPE`` or
190 ``stderr=PIPE`` and the child process generates so much output
191 that it blocks waiting for the OS pipe buffer to accept
192 more data. Use the :meth:`communicate` method when using pipes
193 to avoid this condition.
Victor Stinner08444382014-02-02 22:43:39 +0100194
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100195 .. coroutinemethod:: communicate(input=None)
Victor Stinner08444382014-02-02 22:43:39 +0100196
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700197 Interact with process:
Victor Stinner08444382014-02-02 22:43:39 +0100198
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700199 1. send data to *stdin* (if *input* is not ``None``);
200 2. read data from *stdout* and *stderr*, until EOF is reached;
201 3. wait for process to terminate.
Victor Stinner39892052014-10-14 00:52:07 +0200202
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700203 The optional *input* argument is the data (:class:`bytes` object)
204 that will be sent to the child process.
Victor Stinnercc996b52014-07-17 12:25:27 +0200205
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700206 Return a tuple ``(stdout_data, stderr_data)``.
Victor Stinner08444382014-02-02 22:43:39 +0100207
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700208 If either :exc:`BrokenPipeError` or :exc:`ConnectionResetError`
209 exception is raised when writing *input* into *stdin*, the
210 exception is ignored. This condition occurs when the process
211 exits before all data are written into *stdin*.
Victor Stinner39892052014-10-14 00:52:07 +0200212
Carol Willing4e824e92018-09-13 18:28:19 -0700213 If it is desired to send data to the process' *stdin*,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700214 the process needs to be created with ``stdin=PIPE``. Similarly,
215 to get anything other than ``None`` in the result tuple, the
216 process has to be created with ``stdout=PIPE`` and/or
217 ``stderr=PIPE`` arguments.
Victor Stinner08444382014-02-02 22:43:39 +0100218
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700219 Note, that the data read is buffered in memory, so do not use
220 this method if the data size is large or unlimited.
Victor Stinnercc996b52014-07-17 12:25:27 +0200221
Brian Curtina1afeec2014-02-08 18:36:14 -0600222 .. method:: send_signal(signal)
Victor Stinner08444382014-02-02 22:43:39 +0100223
224 Sends the signal *signal* to the child process.
225
226 .. note::
227
228 On Windows, :py:data:`SIGTERM` is an alias for :meth:`terminate`.
229 ``CTRL_C_EVENT`` and ``CTRL_BREAK_EVENT`` can be sent to processes
230 started with a *creationflags* parameter which includes
231 ``CREATE_NEW_PROCESS_GROUP``.
232
233 .. method:: terminate()
234
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400235 Stop the child process.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700236
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400237 On POSIX systems this method sends :py:data:`signal.SIGTERM` to the
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700238 child process.
239
240 On Windows the Win32 API function :c:func:`TerminateProcess` is
241 called to stop the child process.
Victor Stinner08444382014-02-02 22:43:39 +0100242
Victor Stinner39892052014-10-14 00:52:07 +0200243 .. method:: kill()
Victor Stinner08444382014-02-02 22:43:39 +0100244
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700245 Kill the child.
246
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400247 On POSIX systems this method sends :py:data:`SIGKILL` to the child
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700248 process.
249
250 On Windows this method is an alias for :meth:`terminate`.
Victor Stinner08444382014-02-02 22:43:39 +0100251
Victor Stinner39892052014-10-14 00:52:07 +0200252 .. attribute:: stdin
253
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700254 Standard input stream (:class:`StreamWriter`) or ``None``
255 if the process was created with ``stdin=None``.
Victor Stinner39892052014-10-14 00:52:07 +0200256
257 .. attribute:: stdout
258
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700259 Standard output stream (:class:`StreamReader`) or ``None``
260 if the process was created with ``stdout=None``.
Victor Stinner39892052014-10-14 00:52:07 +0200261
262 .. attribute:: stderr
263
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700264 Standard error stream (:class:`StreamReader`) or ``None``
265 if the process was created with ``stderr=None``.
Victor Stinner39892052014-10-14 00:52:07 +0200266
267 .. warning::
268
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700269 Use the :meth:`communicate` method rather than
270 :attr:`process.stdin.write() <stdin>`,
271 :attr:`await process.stdout.read() <stdout>` or
Carol Willing4e824e92018-09-13 18:28:19 -0700272 :attr:`await process.stderr.read <stderr>`.
273 This avoids deadlocks due to streams pausing reading or writing
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700274 and blocking the child process.
Victor Stinner39892052014-10-14 00:52:07 +0200275
276 .. attribute:: pid
277
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700278 Process identification number (PID).
Victor Stinner39892052014-10-14 00:52:07 +0200279
280 Note that for processes created by the :func:`create_subprocess_shell`
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700281 function, this attribute is the PID of the spawned shell.
Victor Stinner39892052014-10-14 00:52:07 +0200282
283 .. attribute:: returncode
284
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700285 Return code of the process when it exits.
Victor Stinner39892052014-10-14 00:52:07 +0200286
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700287 A ``None`` value indicates that the process has not terminated yet.
288
289 A negative value ``-N`` indicates that the child was terminated
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400290 by signal ``N`` (POSIX only).
Victor Stinner7bdf7862014-03-16 21:29:31 +0100291
Victor Stinnere48d4db2014-02-03 23:26:28 +0100292
Victor Stinner399c59d2015-01-09 01:32:02 +0100293.. _asyncio-subprocess-threads:
294
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700295Subprocess and Threads
Victor Stinner5492d352015-09-02 15:39:01 +0200296----------------------
Victor Stinner399c59d2015-01-09 01:32:02 +0100297
Andrew Svetlov0d671c02019-06-30 12:54:59 +0300298Standard asyncio event loop supports running subprocesses from different threads by
299default.
Victor Stinner399c59d2015-01-09 01:32:02 +0100300
Andrew Svetlov0d671c02019-06-30 12:54:59 +0300301On Windows subprocesses are provided by :class:`ProactorEventLoop` only (default),
302:class:`SelectorEventLoop` has no subprocess support.
Victor Stinner399c59d2015-01-09 01:32:02 +0100303
Andrew Svetlov0d671c02019-06-30 12:54:59 +0300304On UNIX *child watchers* are used for subprocess finish waiting, see
305:ref:`asyncio-watchers` for more info.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700306
Andrew Svetlov0d671c02019-06-30 12:54:59 +0300307
308.. versionchanged:: 3.8
309
310 UNIX switched to use :class:`ThreadedChildWatcher` for spawning subprocesses from
311 different threads without any limitation.
312
313 Spawning a subprocess with *inactive* current child watcher raises
314 :exc:`RuntimeError`.
315
316Note that alternative event loop implementations might have own limitations;
317please refer to their documentation.
Victor Stinner83704962015-02-25 14:24:15 +0100318
Victor Stinner399c59d2015-01-09 01:32:02 +0100319.. seealso::
320
321 The :ref:`Concurrency and multithreading in asyncio
322 <asyncio-multithreading>` section.
323
324
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700325Examples
326--------
Victor Stinnere48d4db2014-02-03 23:26:28 +0100327
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700328An example using the :class:`~asyncio.subprocess.Process` class to
329control a subprocess and the :class:`StreamReader` class to read from
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400330its standard output.
Victor Stinner39892052014-10-14 00:52:07 +0200331
Yury Selivanov394374e2018-09-17 15:35:24 -0400332.. _asyncio_example_create_subprocess_exec:
333
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700334The subprocess is created by the :func:`create_subprocess_exec`
Victor Stinner39892052014-10-14 00:52:07 +0200335function::
336
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700337 import asyncio
Victor Stinner39892052014-10-14 00:52:07 +0200338 import sys
339
Mikhail Terekhovd2ac4002018-08-07 16:29:06 -0400340 async def get_date():
Victor Stinner39892052014-10-14 00:52:07 +0200341 code = 'import datetime; print(datetime.datetime.now())'
342
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700343 # Create the subprocess; redirect the standard output
344 # into a pipe.
Andrew Svetlov88743422017-12-11 17:35:49 +0200345 proc = await asyncio.create_subprocess_exec(
346 sys.executable, '-c', code,
347 stdout=asyncio.subprocess.PIPE)
Victor Stinner39892052014-10-14 00:52:07 +0200348
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700349 # Read one line of output.
Andrew Svetlov88743422017-12-11 17:35:49 +0200350 data = await proc.stdout.readline()
Victor Stinner39892052014-10-14 00:52:07 +0200351 line = data.decode('ascii').rstrip()
352
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700353 # Wait for the subprocess exit.
Andrew Svetlov88743422017-12-11 17:35:49 +0200354 await proc.wait()
Victor Stinner39892052014-10-14 00:52:07 +0200355 return line
356
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700357 date = asyncio.run(get_date())
358 print(f"Current date: {date}")
359
360
Yury Selivanov394374e2018-09-17 15:35:24 -0400361See also the :ref:`same example <asyncio_example_subprocess_proto>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700362written using low-level APIs.