blob: ef8a1cbb4b1c13859971ab3e27dbae04d3fbe3bf [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
Yury Selivanov7c7605f2018-09-11 09:54:40 -07009This section describes high-level async/await asyncio APIs to
10create and manage subprocesses.
lf627d2c82017-07-25 17:03:51 -060011
Yury Selivanov7372c3b2018-09-14 15:11:24 -070012.. _asyncio_example_subprocess_shell:
13
Yury Selivanov7c7605f2018-09-11 09:54:40 -070014Here's an example of how asyncio can run a shell command and
15communicate its result back::
Victor Stinner984600f2014-03-25 09:40:26 +010016
Yury Selivanov7c7605f2018-09-11 09:54:40 -070017 import asyncio
Victor Stinner984600f2014-03-25 09:40:26 +010018
Yury Selivanov7c7605f2018-09-11 09:54:40 -070019 async def run(cmd):
20 proc = await asyncio.create_subprocess_shell(
21 cmd,
22 stdout=asyncio.subprocess.PIPE,
23 stderr=asyncio.subprocess.PIPE)
Victor Stinneraea82292014-07-08 23:42:38 +020024
Yury Selivanov7c7605f2018-09-11 09:54:40 -070025 stdout, stderr = await proc.communicate()
Victor Stinner984600f2014-03-25 09:40:26 +010026
Yury Selivanov7c7605f2018-09-11 09:54:40 -070027 print(f'[{cmd!r} exited with {proc.returncode}]')
28 if stdout:
29 print(f'[stdout]\n{stdout.decode()}')
30 if stderr:
31 print(f'[stderr]\n{stderr.decode()}')
Victor Stinner778015b2014-07-11 12:13:39 +020032
Yury Selivanov7c7605f2018-09-11 09:54:40 -070033 asyncio.run(run('ls /zzz'))
34
35will print::
36
37 ['ls /zzz' exited with 1]
38 [stderr]
39 ls: /zzz: No such file or directory
40
41Because all asyncio subprocess functions are asynchronous and asyncio
42provides many tools to work with such functions, it is easy to execute
43and monitor multiple subprocesses in parallel. It is indeed trivial
44to modify the above example to run a few commands at once::
45
46 async def main():
47 await asyncio.gather(
48 run('ls /zzz'),
49 run('sleep 1; echo "hello"'))
50
51 asyncio.run(main())
52
53See also the `Examples`_ subsection.
Victor Stinner778015b2014-07-11 12:13:39 +020054
Victor Stinner984600f2014-03-25 09:40:26 +010055
Yury Selivanov7c7605f2018-09-11 09:54:40 -070056Creating Subprocesses
57=====================
Victor Stinner08444382014-02-02 22:43:39 +010058
Yury Selivanov7c7605f2018-09-11 09:54:40 -070059.. coroutinefunction:: create_subprocess_exec(\*args, stdin=None, \
60 stdout=None, stderr=None, loop=None, \
61 limit=None, \*\*kwds)
Victor Stinner08444382014-02-02 22:43:39 +010062
Victor Stinner39892052014-10-14 00:52:07 +020063 Create a subprocess.
Victor Stinner08444382014-02-02 22:43:39 +010064
Yury Selivanov7c7605f2018-09-11 09:54:40 -070065 The *limit* argument sets the buffer limit for :class:`StreamReader`
66 wrappers for :attr:`Process.stdout` and :attr:`Process.stderr`
Carol Willing4e824e92018-09-13 18:28:19 -070067 (if :attr:`subprocess.PIPE` is passed to *stdout* and *stderr* arguments).
Victor Stinner39892052014-10-14 00:52:07 +020068
69 Return a :class:`~asyncio.subprocess.Process` instance.
Victor Stinner984600f2014-03-25 09:40:26 +010070
Yury Selivanov7c7605f2018-09-11 09:54:40 -070071 See the documentation of :meth:`loop.subprocess_exec` for other
72 parameters.
Victor Stinner08444382014-02-02 22:43:39 +010073
Yury Selivanov7c7605f2018-09-11 09:54:40 -070074.. coroutinefunction:: create_subprocess_shell(cmd, stdin=None, \
75 stdout=None, stderr=None, loop=None, \
76 limit=None, \*\*kwds)
Victor Stinner08444382014-02-02 22:43:39 +010077
Victor Stinner39892052014-10-14 00:52:07 +020078 Run the shell command *cmd*.
Victor Stinner08444382014-02-02 22:43:39 +010079
Yury Selivanov7c7605f2018-09-11 09:54:40 -070080 The *limit* argument sets the buffer limit for :class:`StreamReader`
81 wrappers for :attr:`Process.stdout` and :attr:`Process.stderr`
Carol Willing4e824e92018-09-13 18:28:19 -070082 (if :attr:`subprocess.PIPE` is passed to *stdout* and *stderr* arguments).
Victor Stinner39892052014-10-14 00:52:07 +020083
84 Return a :class:`~asyncio.subprocess.Process` instance.
85
Yury Selivanov7c7605f2018-09-11 09:54:40 -070086 See the documentation of :meth:`loop.subprocess_shell` for other
87 parameters.
Victor Stinner984600f2014-03-25 09:40:26 +010088
Carol Willing4e824e92018-09-13 18:28:19 -070089.. important::
Victor Stinner984600f2014-03-25 09:40:26 +010090
Victor Stinner39892052014-10-14 00:52:07 +020091 It is the application's responsibility to ensure that all whitespace and
92 metacharacters are quoted appropriately to avoid `shell injection
Georg Brandl5d941342016-02-26 19:37:12 +010093 <https://en.wikipedia.org/wiki/Shell_injection#Shell_injection>`_
Victor Stinner39892052014-10-14 00:52:07 +020094 vulnerabilities. The :func:`shlex.quote` function can be used to properly
95 escape whitespace and shell metacharacters in strings that are going to be
96 used to construct shell commands.
Victor Stinner984600f2014-03-25 09:40:26 +010097
Yury Selivanov7c7605f2018-09-11 09:54:40 -070098.. note::
99
100 The default event loop that asyncio is pre-configured
Carol Willing4e824e92018-09-13 18:28:19 -0700101 to use on **Windows** does not support subprocesses. Subprocesses are
102 available for Windows if the :class:`ProactorEventLoop` is used.
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700103 See :ref:`Subprocess Support on Windows <asyncio-windows-subprocess>`
104 for details.
Victor Stinner984600f2014-03-25 09:40:26 +0100105
Victor Stinner08444382014-02-02 22:43:39 +0100106.. seealso::
107
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700108 asyncio has also *low-level* APIs to work with subprocesses:
109 :meth:`loop.subprocess_exec`, :meth:`loop.subprocess_shell`,
110 :meth:`loop.connect_read_pipe`, :meth:`loop.connect_write_pipe`,
111 as well as the :ref:`Subprocess Transports <asyncio-subprocess-transports>`
112 and :ref:`Subprocess Protocols <asyncio-subprocess-protocols>`.
Victor Stinner08444382014-02-02 22:43:39 +0100113
114
115Constants
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700116=========
Victor Stinner08444382014-02-02 22:43:39 +0100117
118.. data:: asyncio.subprocess.PIPE
119
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700120 Can be passed to the *stdin*, *stdout* or *stderr* parameters.
121
122 If *PIPE* is passed to *stdin* argument, the
123 :attr:`Process.stdin <asyncio.subprocess.Process.stdin>` attribute
124 will point to a :class:`StreamWriter` instance.
125
126 If *PIPE* is passed to *stdout* or *stderr* arguments, the
127 :attr:`Process.stdout <asyncio.subprocess.Process.stdout>` and
128 :attr:`Process.stderr <asyncio.subprocess.Process.stderr>`
129 attributes will point to :class:`StreamReader` instances.
Victor Stinner08444382014-02-02 22:43:39 +0100130
131.. data:: asyncio.subprocess.STDOUT
132
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700133 Can be passed to the *stderr* parameter to redirect process'
134 *stderr* to *stdout*.
Victor Stinner08444382014-02-02 22:43:39 +0100135
136.. data:: asyncio.subprocess.DEVNULL
137
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700138 Can be passed as the *stdin*, *stdout* or *stderr* parameters
139 to redirect the corresponding subprocess' IO to :data:`os.devnull`.
Victor Stinner08444382014-02-02 22:43:39 +0100140
141
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700142Interacting with Subprocesses
143=============================
144
145Both :func:`create_subprocess_exec` and :func:`create_subprocess_shell`
146functions return instances of the *Process* class. It is a high-level
147wrapper that allows to watch for subprocesses completion and
148communicate with them.
Victor Stinner08444382014-02-02 22:43:39 +0100149
150.. class:: asyncio.subprocess.Process
151
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700152 An object that wraps OS processes created by the
153 :func:`create_subprocess_exec` and :func:`create_subprocess_shell`
154 functions.
Victor Stinnerb79eb052014-02-03 23:08:14 +0100155
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700156 This class is designed to have a similar API to the
157 :class:`subprocess.Popen` class, but there are some
158 notable differences:
Victor Stinnerb79eb052014-02-03 23:08:14 +0100159
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700160 * unlike Popen, Process instances do not have an equivalent to
161 the :meth:`~subprocess.Popen.poll` method;
Victor Stinnerb79eb052014-02-03 23:08:14 +0100162
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700163 * the :meth:`~asyncio.subprocess.Process.communicate` and
164 :meth:`~asyncio.subprocess.Process.wait` methods don't take a
165 *timeout* parameter: use the :func:`wait_for` function;
166
167 * the :meth:`Process.wait() <asyncio.subprocess.Process.wait>` method
168 is asynchronous, whereas :meth:`subprocess.Popen.wait` method
169 is implemented as a blocking busy loop;
170
171 * the *universal_newlines* parameter is not supported.
172
173 This class is :ref:`not thread safe <asyncio-multithreading>`.
174
175 See also the :ref:`Subprocess and Threads <asyncio-subprocess-threads>`
176 section.
Victor Stinner83704962015-02-25 14:24:15 +0100177
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100178 .. coroutinemethod:: wait()
Victor Stinnerb79eb052014-02-03 23:08:14 +0100179
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700180 Wait for child process to terminate.
Victor Stinnerb79eb052014-02-03 23:08:14 +0100181
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700182 Set and return the :attr:`returncode` attribute.
Victor Stinnerb79eb052014-02-03 23:08:14 +0100183
Victor Stinner39892052014-10-14 00:52:07 +0200184 .. note::
Victor Stinner08444382014-02-02 22:43:39 +0100185
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700186 This method can deadlock when using ``stdout=PIPE`` or
187 ``stderr=PIPE`` and the child process generates so much output
188 that it blocks waiting for the OS pipe buffer to accept
189 more data. Use the :meth:`communicate` method when using pipes
190 to avoid this condition.
Victor Stinner08444382014-02-02 22:43:39 +0100191
Victor Stinnerbdd574d2015-02-12 22:49:18 +0100192 .. coroutinemethod:: communicate(input=None)
Victor Stinner08444382014-02-02 22:43:39 +0100193
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700194 Interact with process:
Victor Stinner08444382014-02-02 22:43:39 +0100195
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700196 1. send data to *stdin* (if *input* is not ``None``);
197 2. read data from *stdout* and *stderr*, until EOF is reached;
198 3. wait for process to terminate.
Victor Stinner39892052014-10-14 00:52:07 +0200199
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700200 The optional *input* argument is the data (:class:`bytes` object)
201 that will be sent to the child process.
Victor Stinnercc996b52014-07-17 12:25:27 +0200202
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700203 Return a tuple ``(stdout_data, stderr_data)``.
Victor Stinner08444382014-02-02 22:43:39 +0100204
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700205 If either :exc:`BrokenPipeError` or :exc:`ConnectionResetError`
206 exception is raised when writing *input* into *stdin*, the
207 exception is ignored. This condition occurs when the process
208 exits before all data are written into *stdin*.
Victor Stinner39892052014-10-14 00:52:07 +0200209
Carol Willing4e824e92018-09-13 18:28:19 -0700210 If it is desired to send data to the process' *stdin*,
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700211 the process needs to be created with ``stdin=PIPE``. Similarly,
212 to get anything other than ``None`` in the result tuple, the
213 process has to be created with ``stdout=PIPE`` and/or
214 ``stderr=PIPE`` arguments.
Victor Stinner08444382014-02-02 22:43:39 +0100215
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700216 Note, that the data read is buffered in memory, so do not use
217 this method if the data size is large or unlimited.
Victor Stinnercc996b52014-07-17 12:25:27 +0200218
Brian Curtina1afeec2014-02-08 18:36:14 -0600219 .. method:: send_signal(signal)
Victor Stinner08444382014-02-02 22:43:39 +0100220
221 Sends the signal *signal* to the child process.
222
223 .. note::
224
225 On Windows, :py:data:`SIGTERM` is an alias for :meth:`terminate`.
226 ``CTRL_C_EVENT`` and ``CTRL_BREAK_EVENT`` can be sent to processes
227 started with a *creationflags* parameter which includes
228 ``CREATE_NEW_PROCESS_GROUP``.
229
230 .. method:: terminate()
231
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700232 Stop the child.
233
234 On Posix OSs the method sends :py:data:`signal.SIGTERM` to the
235 child process.
236
237 On Windows the Win32 API function :c:func:`TerminateProcess` is
238 called to stop the child process.
Victor Stinner08444382014-02-02 22:43:39 +0100239
Victor Stinner39892052014-10-14 00:52:07 +0200240 .. method:: kill()
Victor Stinner08444382014-02-02 22:43:39 +0100241
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700242 Kill the child.
243
244 On Posix OSs the function sends :py:data:`SIGKILL` to the child
245 process.
246
247 On Windows this method is an alias for :meth:`terminate`.
Victor Stinner08444382014-02-02 22:43:39 +0100248
Victor Stinner39892052014-10-14 00:52:07 +0200249 .. attribute:: stdin
250
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700251 Standard input stream (:class:`StreamWriter`) or ``None``
252 if the process was created with ``stdin=None``.
Victor Stinner39892052014-10-14 00:52:07 +0200253
254 .. attribute:: stdout
255
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700256 Standard output stream (:class:`StreamReader`) or ``None``
257 if the process was created with ``stdout=None``.
Victor Stinner39892052014-10-14 00:52:07 +0200258
259 .. attribute:: stderr
260
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700261 Standard error stream (:class:`StreamReader`) or ``None``
262 if the process was created with ``stderr=None``.
Victor Stinner39892052014-10-14 00:52:07 +0200263
264 .. warning::
265
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700266 Use the :meth:`communicate` method rather than
267 :attr:`process.stdin.write() <stdin>`,
268 :attr:`await process.stdout.read() <stdout>` or
Carol Willing4e824e92018-09-13 18:28:19 -0700269 :attr:`await process.stderr.read <stderr>`.
270 This avoids deadlocks due to streams pausing reading or writing
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700271 and blocking the child process.
Victor Stinner39892052014-10-14 00:52:07 +0200272
273 .. attribute:: pid
274
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700275 Process identification number (PID).
Victor Stinner39892052014-10-14 00:52:07 +0200276
277 Note that for processes created by the :func:`create_subprocess_shell`
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700278 function, this attribute is the PID of the spawned shell.
Victor Stinner39892052014-10-14 00:52:07 +0200279
280 .. attribute:: returncode
281
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700282 Return code of the process when it exits.
Victor Stinner39892052014-10-14 00:52:07 +0200283
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700284 A ``None`` value indicates that the process has not terminated yet.
285
286 A negative value ``-N`` indicates that the child was terminated
287 by signal ``N`` (Unix only).
Victor Stinner7bdf7862014-03-16 21:29:31 +0100288
Victor Stinnere48d4db2014-02-03 23:26:28 +0100289
Victor Stinner399c59d2015-01-09 01:32:02 +0100290.. _asyncio-subprocess-threads:
291
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700292Subprocess and Threads
Victor Stinner5492d352015-09-02 15:39:01 +0200293----------------------
Victor Stinner399c59d2015-01-09 01:32:02 +0100294
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700295asyncio built-in event loops support running subprocesses from
296different threads, but there are the following limitations:
Victor Stinner399c59d2015-01-09 01:32:02 +0100297
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700298* An event loop must run in the main thread.
Victor Stinner399c59d2015-01-09 01:32:02 +0100299
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700300* The child watcher must be instantiated in the main thread,
301 before executing subprocesses from other threads. Call the
302 :func:`get_child_watcher` function in the main thread to instantiate
303 the child watcher.
304
305Note, that alternative event loop implementations might not share
306the above limitations; please refer to their documentation.
Victor Stinner83704962015-02-25 14:24:15 +0100307
Victor Stinner399c59d2015-01-09 01:32:02 +0100308.. seealso::
309
310 The :ref:`Concurrency and multithreading in asyncio
311 <asyncio-multithreading>` section.
312
313
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700314Examples
315--------
Victor Stinnere48d4db2014-02-03 23:26:28 +0100316
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700317An example using the :class:`~asyncio.subprocess.Process` class to
318control a subprocess and the :class:`StreamReader` class to read from
319the *stdout*.
Victor Stinner39892052014-10-14 00:52:07 +0200320
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700321The subprocess is created by the :func:`create_subprocess_exec`
Victor Stinner39892052014-10-14 00:52:07 +0200322function::
323
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700324 import asyncio
Victor Stinner39892052014-10-14 00:52:07 +0200325 import sys
326
Mikhail Terekhovd2ac4002018-08-07 16:29:06 -0400327 async def get_date():
Victor Stinner39892052014-10-14 00:52:07 +0200328 code = 'import datetime; print(datetime.datetime.now())'
329
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700330 # Create the subprocess; redirect the standard output
331 # into a pipe.
Andrew Svetlov88743422017-12-11 17:35:49 +0200332 proc = await asyncio.create_subprocess_exec(
333 sys.executable, '-c', code,
334 stdout=asyncio.subprocess.PIPE)
Victor Stinner39892052014-10-14 00:52:07 +0200335
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700336 # Read one line of output.
Andrew Svetlov88743422017-12-11 17:35:49 +0200337 data = await proc.stdout.readline()
Victor Stinner39892052014-10-14 00:52:07 +0200338 line = data.decode('ascii').rstrip()
339
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700340 # Wait for the subprocess exit.
Andrew Svetlov88743422017-12-11 17:35:49 +0200341 await proc.wait()
Victor Stinner39892052014-10-14 00:52:07 +0200342 return line
343
344 if sys.platform == "win32":
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700345 asyncio.set_event_loop_policy(
346 asyncio.WindowsProactorEventLoopPolicy())
Victor Stinner39892052014-10-14 00:52:07 +0200347
Yury Selivanov7c7605f2018-09-11 09:54:40 -0700348 date = asyncio.run(get_date())
349 print(f"Current date: {date}")
350
351
352See also the :ref:`same example <asyncio-subprocess-proto-example>`
353written using low-level APIs.