blob: fd1f9c995787943f09fc33fcf576ba6d43f964ee [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
Miss Islington (bot)150a8e82021-05-26 15:19:42 -070078 .. deprecated-removed:: 3.8 3.10
79
80 The ``loop`` parameter. This function has been implicitly getting the
81 current running loop since 3.7. See
82 :ref:`What's New in 3.10's Removed section <whatsnew310-removed>`
83 for more information.
84
Andrew Svetlova4888792019-09-12 15:40:40 +030085
Yury Selivanov7c7605f2018-09-11 09:54:40 -070086.. coroutinefunction:: create_subprocess_shell(cmd, stdin=None, \
Andre Delfinodcc997c2020-12-16 22:37:28 -030087 stdout=None, stderr=None, limit=None, **kwds)
Victor Stinner08444382014-02-02 22:43:39 +010088
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -040089 Run the *cmd* shell command.
Victor Stinner08444382014-02-02 22:43:39 +010090
Yury Selivanov7c7605f2018-09-11 09:54:40 -070091 The *limit* argument sets the buffer limit for :class:`StreamReader`
92 wrappers for :attr:`Process.stdout` and :attr:`Process.stderr`
Carol Willing4e824e92018-09-13 18:28:19 -070093 (if :attr:`subprocess.PIPE` is passed to *stdout* and *stderr* arguments).
Victor Stinner39892052014-10-14 00:52:07 +020094
95 Return a :class:`~asyncio.subprocess.Process` instance.
96
Yury Selivanov7c7605f2018-09-11 09:54:40 -070097 See the documentation of :meth:`loop.subprocess_shell` for other
98 parameters.
Victor Stinner984600f2014-03-25 09:40:26 +010099
sth4a0ac422020-05-26 06:08:40 +0200100 .. important::
Victor Stinner984600f2014-03-25 09:40:26 +0100101
sth4a0ac422020-05-26 06:08:40 +0200102 It is the application's responsibility to ensure that all whitespace and
103 special characters are quoted appropriately to avoid `shell injection
104 <https://en.wikipedia.org/wiki/Shell_injection#Shell_injection>`_
105 vulnerabilities. The :func:`shlex.quote` function can be used to properly
106 escape whitespace and special shell characters in strings that are going
107 to be used to construct shell commands.
Victor Stinner984600f2014-03-25 09:40:26 +0100108
Miss Islington (bot)150a8e82021-05-26 15:19:42 -0700109 .. deprecated-removed:: 3.8 3.10
110
111 The ``loop`` parameter. This function has been implicitly getting the
112 current running loop since 3.7. See
113 :ref:`What's New in 3.10's Removed section <whatsnew310-removed>`
114 for more information.
115
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700116.. note::
117
Zackery Spytz4dfb1902020-10-19 16:08:34 -0600118 Subprocesses are available for Windows if a :class:`ProactorEventLoop` is
119 used. See :ref:`Subprocess Support on Windows <asyncio-windows-subprocess>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700120 for details.
Victor Stinner984600f2014-03-25 09:40:26 +0100121
Victor Stinner08444382014-02-02 22:43:39 +0100122.. seealso::
123
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400124 asyncio also has the following *low-level* APIs to work with subprocesses:
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700125 :meth:`loop.subprocess_exec`, :meth:`loop.subprocess_shell`,
126 :meth:`loop.connect_read_pipe`, :meth:`loop.connect_write_pipe`,
127 as well as the :ref:`Subprocess Transports <asyncio-subprocess-transports>`
128 and :ref:`Subprocess Protocols <asyncio-subprocess-protocols>`.
Victor Stinner08444382014-02-02 22:43:39 +0100129
130
131Constants
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700132=========
Victor Stinner08444382014-02-02 22:43:39 +0100133
134.. data:: asyncio.subprocess.PIPE
135
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700136 Can be passed to the *stdin*, *stdout* or *stderr* parameters.
137
138 If *PIPE* is passed to *stdin* argument, the
139 :attr:`Process.stdin <asyncio.subprocess.Process.stdin>` attribute
140 will point to a :class:`StreamWriter` instance.
141
142 If *PIPE* is passed to *stdout* or *stderr* arguments, the
143 :attr:`Process.stdout <asyncio.subprocess.Process.stdout>` and
144 :attr:`Process.stderr <asyncio.subprocess.Process.stderr>`
145 attributes will point to :class:`StreamReader` instances.
Victor Stinner08444382014-02-02 22:43:39 +0100146
147.. data:: asyncio.subprocess.STDOUT
148
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400149 Special value that can be used as the *stderr* argument and indicates
150 that standard error should be redirected into standard output.
Victor Stinner08444382014-02-02 22:43:39 +0100151
152.. data:: asyncio.subprocess.DEVNULL
153
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400154 Special value that can be used as the *stdin*, *stdout* or *stderr* argument
155 to process creation functions. It indicates that the special file
156 :data:`os.devnull` will be used for the corresponding subprocess stream.
Victor Stinner08444382014-02-02 22:43:39 +0100157
158
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700159Interacting with Subprocesses
160=============================
161
162Both :func:`create_subprocess_exec` and :func:`create_subprocess_shell`
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400163functions return instances of the *Process* class. *Process* is a high-level
164wrapper that allows communicating with subprocesses and watching for
165their completion.
Victor Stinner08444382014-02-02 22:43:39 +0100166
167.. class:: asyncio.subprocess.Process
168
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700169 An object that wraps OS processes created by the
170 :func:`create_subprocess_exec` and :func:`create_subprocess_shell`
171 functions.
Victor Stinnerb79eb052014-02-03 23:08:14 +0100172
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700173 This class is designed to have a similar API to the
174 :class:`subprocess.Popen` class, but there are some
175 notable differences:
Victor Stinnerb79eb052014-02-03 23:08:14 +0100176
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700177 * unlike Popen, Process instances do not have an equivalent to
178 the :meth:`~subprocess.Popen.poll` method;
Victor Stinnerb79eb052014-02-03 23:08:14 +0100179
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700180 * the :meth:`~asyncio.subprocess.Process.communicate` and
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400181 :meth:`~asyncio.subprocess.Process.wait` methods don't have a
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700182 *timeout* parameter: use the :func:`wait_for` function;
183
184 * the :meth:`Process.wait() <asyncio.subprocess.Process.wait>` method
185 is asynchronous, whereas :meth:`subprocess.Popen.wait` method
186 is implemented as a blocking busy loop;
187
188 * the *universal_newlines* parameter is not supported.
189
190 This class is :ref:`not thread safe <asyncio-multithreading>`.
191
192 See also the :ref:`Subprocess and Threads <asyncio-subprocess-threads>`
193 section.
Victor Stinner83704962015-02-25 14:24:15 +0100194
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100195 .. coroutinemethod:: wait()
Victor Stinnerb79eb052014-02-03 23:08:14 +0100196
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400197 Wait for the child process to terminate.
Victor Stinnerb79eb052014-02-03 23:08:14 +0100198
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700199 Set and return the :attr:`returncode` attribute.
Victor Stinnerb79eb052014-02-03 23:08:14 +0100200
Victor Stinner39892052014-10-14 00:52:07 +0200201 .. note::
Victor Stinner08444382014-02-02 22:43:39 +0100202
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700203 This method can deadlock when using ``stdout=PIPE`` or
204 ``stderr=PIPE`` and the child process generates so much output
205 that it blocks waiting for the OS pipe buffer to accept
206 more data. Use the :meth:`communicate` method when using pipes
207 to avoid this condition.
Victor Stinner08444382014-02-02 22:43:39 +0100208
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100209 .. coroutinemethod:: communicate(input=None)
Victor Stinner08444382014-02-02 22:43:39 +0100210
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700211 Interact with process:
Victor Stinner08444382014-02-02 22:43:39 +0100212
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700213 1. send data to *stdin* (if *input* is not ``None``);
214 2. read data from *stdout* and *stderr*, until EOF is reached;
215 3. wait for process to terminate.
Victor Stinner39892052014-10-14 00:52:07 +0200216
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700217 The optional *input* argument is the data (:class:`bytes` object)
218 that will be sent to the child process.
Victor Stinnercc996b52014-07-17 12:25:27 +0200219
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700220 Return a tuple ``(stdout_data, stderr_data)``.
Victor Stinner08444382014-02-02 22:43:39 +0100221
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700222 If either :exc:`BrokenPipeError` or :exc:`ConnectionResetError`
223 exception is raised when writing *input* into *stdin*, the
224 exception is ignored. This condition occurs when the process
225 exits before all data are written into *stdin*.
Victor Stinner39892052014-10-14 00:52:07 +0200226
Carol Willing4e824e92018-09-13 18:28:19 -0700227 If it is desired to send data to the process' *stdin*,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700228 the process needs to be created with ``stdin=PIPE``. Similarly,
229 to get anything other than ``None`` in the result tuple, the
230 process has to be created with ``stdout=PIPE`` and/or
231 ``stderr=PIPE`` arguments.
Victor Stinner08444382014-02-02 22:43:39 +0100232
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700233 Note, that the data read is buffered in memory, so do not use
234 this method if the data size is large or unlimited.
Victor Stinnercc996b52014-07-17 12:25:27 +0200235
Brian Curtina1afeec2014-02-08 18:36:14 -0600236 .. method:: send_signal(signal)
Victor Stinner08444382014-02-02 22:43:39 +0100237
238 Sends the signal *signal* to the child process.
239
240 .. note::
241
242 On Windows, :py:data:`SIGTERM` is an alias for :meth:`terminate`.
243 ``CTRL_C_EVENT`` and ``CTRL_BREAK_EVENT`` can be sent to processes
244 started with a *creationflags* parameter which includes
245 ``CREATE_NEW_PROCESS_GROUP``.
246
247 .. method:: terminate()
248
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400249 Stop the child process.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700250
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400251 On POSIX systems this method sends :py:data:`signal.SIGTERM` to the
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700252 child process.
253
254 On Windows the Win32 API function :c:func:`TerminateProcess` is
255 called to stop the child process.
Victor Stinner08444382014-02-02 22:43:39 +0100256
Victor Stinner39892052014-10-14 00:52:07 +0200257 .. method:: kill()
Victor Stinner08444382014-02-02 22:43:39 +0100258
Gabriel R F3c4850e2021-04-26 01:38:16 -0300259 Kill the child process.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700260
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400261 On POSIX systems this method sends :py:data:`SIGKILL` to the child
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700262 process.
263
264 On Windows this method is an alias for :meth:`terminate`.
Victor Stinner08444382014-02-02 22:43:39 +0100265
Victor Stinner39892052014-10-14 00:52:07 +0200266 .. attribute:: stdin
267
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700268 Standard input stream (:class:`StreamWriter`) or ``None``
269 if the process was created with ``stdin=None``.
Victor Stinner39892052014-10-14 00:52:07 +0200270
271 .. attribute:: stdout
272
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700273 Standard output stream (:class:`StreamReader`) or ``None``
274 if the process was created with ``stdout=None``.
Victor Stinner39892052014-10-14 00:52:07 +0200275
276 .. attribute:: stderr
277
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700278 Standard error stream (:class:`StreamReader`) or ``None``
279 if the process was created with ``stderr=None``.
Victor Stinner39892052014-10-14 00:52:07 +0200280
281 .. warning::
282
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700283 Use the :meth:`communicate` method rather than
284 :attr:`process.stdin.write() <stdin>`,
285 :attr:`await process.stdout.read() <stdout>` or
Carol Willing4e824e92018-09-13 18:28:19 -0700286 :attr:`await process.stderr.read <stderr>`.
287 This avoids deadlocks due to streams pausing reading or writing
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700288 and blocking the child process.
Victor Stinner39892052014-10-14 00:52:07 +0200289
290 .. attribute:: pid
291
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700292 Process identification number (PID).
Victor Stinner39892052014-10-14 00:52:07 +0200293
294 Note that for processes created by the :func:`create_subprocess_shell`
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700295 function, this attribute is the PID of the spawned shell.
Victor Stinner39892052014-10-14 00:52:07 +0200296
297 .. attribute:: returncode
298
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700299 Return code of the process when it exits.
Victor Stinner39892052014-10-14 00:52:07 +0200300
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700301 A ``None`` value indicates that the process has not terminated yet.
302
303 A negative value ``-N`` indicates that the child was terminated
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400304 by signal ``N`` (POSIX only).
Victor Stinner7bdf7862014-03-16 21:29:31 +0100305
Victor Stinnere48d4db2014-02-03 23:26:28 +0100306
Victor Stinner399c59d2015-01-09 01:32:02 +0100307.. _asyncio-subprocess-threads:
308
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700309Subprocess and Threads
Victor Stinner5492d352015-09-02 15:39:01 +0200310----------------------
Victor Stinner399c59d2015-01-09 01:32:02 +0100311
Andrew Svetlov0d671c02019-06-30 12:54:59 +0300312Standard asyncio event loop supports running subprocesses from different threads by
313default.
Victor Stinner399c59d2015-01-09 01:32:02 +0100314
Andrew Svetlov0d671c02019-06-30 12:54:59 +0300315On Windows subprocesses are provided by :class:`ProactorEventLoop` only (default),
316:class:`SelectorEventLoop` has no subprocess support.
Victor Stinner399c59d2015-01-09 01:32:02 +0100317
Andrew Svetlov0d671c02019-06-30 12:54:59 +0300318On UNIX *child watchers* are used for subprocess finish waiting, see
319:ref:`asyncio-watchers` for more info.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700320
Andrew Svetlov0d671c02019-06-30 12:54:59 +0300321
322.. versionchanged:: 3.8
323
324 UNIX switched to use :class:`ThreadedChildWatcher` for spawning subprocesses from
325 different threads without any limitation.
326
327 Spawning a subprocess with *inactive* current child watcher raises
328 :exc:`RuntimeError`.
329
330Note that alternative event loop implementations might have own limitations;
331please refer to their documentation.
Victor Stinner83704962015-02-25 14:24:15 +0100332
Victor Stinner399c59d2015-01-09 01:32:02 +0100333.. seealso::
334
335 The :ref:`Concurrency and multithreading in asyncio
336 <asyncio-multithreading>` section.
337
338
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700339Examples
340--------
Victor Stinnere48d4db2014-02-03 23:26:28 +0100341
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700342An example using the :class:`~asyncio.subprocess.Process` class to
343control a subprocess and the :class:`StreamReader` class to read from
Elvis Pranskevichus1fa2ec42018-09-17 19:16:44 -0400344its standard output.
Victor Stinner39892052014-10-14 00:52:07 +0200345
Yury Selivanov394374e2018-09-17 15:35:24 -0400346.. _asyncio_example_create_subprocess_exec:
347
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700348The subprocess is created by the :func:`create_subprocess_exec`
Victor Stinner39892052014-10-14 00:52:07 +0200349function::
350
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700351 import asyncio
Victor Stinner39892052014-10-14 00:52:07 +0200352 import sys
353
Mikhail Terekhovd2ac4002018-08-07 16:29:06 -0400354 async def get_date():
Victor Stinner39892052014-10-14 00:52:07 +0200355 code = 'import datetime; print(datetime.datetime.now())'
356
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700357 # Create the subprocess; redirect the standard output
358 # into a pipe.
Andrew Svetlov88743422017-12-11 17:35:49 +0200359 proc = await asyncio.create_subprocess_exec(
360 sys.executable, '-c', code,
361 stdout=asyncio.subprocess.PIPE)
Victor Stinner39892052014-10-14 00:52:07 +0200362
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700363 # Read one line of output.
Andrew Svetlov88743422017-12-11 17:35:49 +0200364 data = await proc.stdout.readline()
Victor Stinner39892052014-10-14 00:52:07 +0200365 line = data.decode('ascii').rstrip()
366
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700367 # Wait for the subprocess exit.
Andrew Svetlov88743422017-12-11 17:35:49 +0200368 await proc.wait()
Victor Stinner39892052014-10-14 00:52:07 +0200369 return line
370
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700371 date = asyncio.run(get_date())
372 print(f"Current date: {date}")
373
374
Yury Selivanov394374e2018-09-17 15:35:24 -0400375See also the :ref:`same example <asyncio_example_subprocess_proto>`
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700376written using low-level APIs.