blob: ba6f1983a5a2273f7ad654b710b27a6ed1557ec1 [file] [log] [blame]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001# subprocess - Subprocesses with accessible I/O streams
2#
Tim Peterse718f612004-10-12 21:51:32 +00003# For more information about this module, see PEP 324.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00004#
Peter Astrand3a708df2005-09-23 17:37:29 +00005# Copyright (c) 2003-2005 by Peter Astrand <astrand@lysator.liu.se>
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00006#
Peter Astrand69bf13f2005-02-14 08:56:32 +00007# Licensed to PSF under a Contributor Agreement.
Peter Astrand3a708df2005-09-23 17:37:29 +00008# See http://www.python.org/2.4/license for licensing details.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00009
Martin Panter4afdca02016-10-25 22:20:48 +000010r"""Subprocesses with accessible I/O streams
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000011
Fredrik Lundh15aaacc2004-10-17 14:47:05 +000012This module allows you to spawn processes, connect to their
Martin Panter4afdca02016-10-25 22:20:48 +000013input/output/error pipes, and obtain their return codes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000014
Martin Panter4afdca02016-10-25 22:20:48 +000015For a complete description of this module see the Python documentation.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000016
Martin Panter4afdca02016-10-25 22:20:48 +000017Main API
18========
19run(...): Runs a command, waits for it to complete, then returns a
20 CompletedProcess instance.
21Popen(...): A class for flexibly executing a command in a new process
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000022
Martin Panter4afdca02016-10-25 22:20:48 +000023Constants
24---------
25DEVNULL: Special value that indicates that os.devnull should be used
26PIPE: Special value that indicates a pipe should be created
27STDOUT: Special value that indicates that stderr should go to stdout
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000028
29
Martin Panter4afdca02016-10-25 22:20:48 +000030Older API
31=========
32call(...): Runs a command, waits for it to complete, then returns
33 the return code.
34check_call(...): Same as call() but raises CalledProcessError()
35 if return code is not 0
36check_output(...): Same as check_call() but returns the contents of
37 stdout instead of a return code
38getoutput(...): Runs a command in the shell, waits for it to complete,
39 then returns the output
40getstatusoutput(...): Runs a command in the shell, waits for it to complete,
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -070041 then returns a (exitcode, output) tuple
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000042"""
43
Zachary Ware880d42a2018-09-10 16:16:08 -070044import builtins
45import errno
Guido van Rossumfa0054a2007-05-24 04:05:35 +000046import io
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000047import os
Reid Kleckner31aa7dd2011-03-14 12:02:10 -040048import time
Christian Heimesa342c012008-04-20 21:01:16 +000049import signal
Zachary Ware880d42a2018-09-10 16:16:08 -070050import sys
51import threading
Gregory P. Smithd23047b2010-12-04 09:10:44 +000052import warnings
Giampaolo Rodolabafa8482019-01-29 22:14:24 +010053import contextlib
Victor Stinnerae586492014-09-02 23:18:25 +020054from time import monotonic as _time
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000055
Patrick McLean2b2ead72019-09-12 10:15:44 -070056try:
57 import pwd
58except ImportError:
59 pwd = None
60try:
61 import grp
62except ImportError:
63 grp = None
Zachary Ware880d42a2018-09-10 16:16:08 -070064
65__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
66 "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL",
67 "SubprocessError", "TimeoutExpired", "CompletedProcess"]
68 # NOTE: We intentionally exclude list2cmdline as it is
69 # considered an internal implementation detail. issue10838.
70
71try:
72 import msvcrt
73 import _winapi
74 _mswindows = True
75except ModuleNotFoundError:
76 _mswindows = False
77 import _posixsubprocess
78 import select
79 import selectors
80else:
81 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
82 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
83 STD_ERROR_HANDLE, SW_HIDE,
84 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW,
85 ABOVE_NORMAL_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS,
86 HIGH_PRIORITY_CLASS, IDLE_PRIORITY_CLASS,
87 NORMAL_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS,
88 CREATE_NO_WINDOW, DETACHED_PROCESS,
89 CREATE_DEFAULT_ERROR_MODE, CREATE_BREAKAWAY_FROM_JOB)
90
91 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
92 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
93 "STD_ERROR_HANDLE", "SW_HIDE",
94 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW",
95 "STARTUPINFO",
96 "ABOVE_NORMAL_PRIORITY_CLASS", "BELOW_NORMAL_PRIORITY_CLASS",
97 "HIGH_PRIORITY_CLASS", "IDLE_PRIORITY_CLASS",
98 "NORMAL_PRIORITY_CLASS", "REALTIME_PRIORITY_CLASS",
99 "CREATE_NO_WINDOW", "DETACHED_PROCESS",
100 "CREATE_DEFAULT_ERROR_MODE", "CREATE_BREAKAWAY_FROM_JOB"])
101
102
Peter Astrand454f7672005-01-01 09:36:35 +0000103# Exception classes used by this module.
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400104class SubprocessError(Exception): pass
105
106
107class CalledProcessError(SubprocessError):
Martin Panter4afdca02016-10-25 22:20:48 +0000108 """Raised when run() is called with check=True and the process
109 returns a non-zero exit status.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)d6da7602016-06-03 06:14:06 +0000110
Martin Panter4afdca02016-10-25 22:20:48 +0000111 Attributes:
112 cmd, returncode, stdout, stderr, output
Georg Brandlf9734072008-12-07 15:30:06 +0000113 """
Gregory P. Smith6e730002015-04-14 16:14:25 -0700114 def __init__(self, returncode, cmd, output=None, stderr=None):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000115 self.returncode = returncode
116 self.cmd = cmd
Georg Brandlf9734072008-12-07 15:30:06 +0000117 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -0700118 self.stderr = stderr
119
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000120 def __str__(self):
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)d6da7602016-06-03 06:14:06 +0000121 if self.returncode and self.returncode < 0:
122 try:
123 return "Command '%s' died with %r." % (
124 self.cmd, signal.Signals(-self.returncode))
125 except ValueError:
126 return "Command '%s' died with unknown signal %d." % (
127 self.cmd, -self.returncode)
128 else:
129 return "Command '%s' returned non-zero exit status %d." % (
130 self.cmd, self.returncode)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000131
Gregory P. Smith6e730002015-04-14 16:14:25 -0700132 @property
133 def stdout(self):
134 """Alias for output attribute, to match stderr"""
135 return self.output
136
137 @stdout.setter
138 def stdout(self, value):
139 # There's no obvious reason to set this, but allow it anyway so
140 # .stdout is a transparent alias for .output
141 self.output = value
142
Peter Astrand454f7672005-01-01 09:36:35 +0000143
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400144class TimeoutExpired(SubprocessError):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400145 """This exception is raised when the timeout expires while waiting for a
146 child process.
Martin Panter4afdca02016-10-25 22:20:48 +0000147
148 Attributes:
149 cmd, output, stdout, stderr, timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400150 """
Gregory P. Smith6e730002015-04-14 16:14:25 -0700151 def __init__(self, cmd, timeout, output=None, stderr=None):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400152 self.cmd = cmd
Reid Kleckner2b228f02011-03-16 16:57:54 -0400153 self.timeout = timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400154 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -0700155 self.stderr = stderr
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400156
157 def __str__(self):
158 return ("Command '%s' timed out after %s seconds" %
159 (self.cmd, self.timeout))
160
Gregory P. Smith6e730002015-04-14 16:14:25 -0700161 @property
162 def stdout(self):
163 return self.output
164
165 @stdout.setter
166 def stdout(self, value):
167 # There's no obvious reason to set this, but allow it anyway so
168 # .stdout is a transparent alias for .output
169 self.output = value
170
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400171
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700172if _mswindows:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000173 class STARTUPINFO:
Subhendu Ghoshae160bb2017-02-25 20:29:05 +0530174 def __init__(self, *, dwFlags=0, hStdInput=None, hStdOutput=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200175 hStdError=None, wShowWindow=0, lpAttributeList=None):
Subhendu Ghoshae160bb2017-02-25 20:29:05 +0530176 self.dwFlags = dwFlags
177 self.hStdInput = hStdInput
178 self.hStdOutput = hStdOutput
179 self.hStdError = hStdError
180 self.wShowWindow = wShowWindow
Segev Finerb2a60832017-12-18 11:28:19 +0200181 self.lpAttributeList = lpAttributeList or {"handle_list": []}
Victor Stinner483422f2018-07-05 22:54:17 +0200182
183 def copy(self):
184 attr_list = self.lpAttributeList.copy()
185 if 'handle_list' in attr_list:
186 attr_list['handle_list'] = list(attr_list['handle_list'])
187
188 return STARTUPINFO(dwFlags=self.dwFlags,
189 hStdInput=self.hStdInput,
190 hStdOutput=self.hStdOutput,
191 hStdError=self.hStdError,
192 wShowWindow=self.wShowWindow,
193 lpAttributeList=attr_list)
194
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200195
196 class Handle(int):
197 closed = False
198
199 def Close(self, CloseHandle=_winapi.CloseHandle):
200 if not self.closed:
201 self.closed = True
202 CloseHandle(self)
203
204 def Detach(self):
205 if not self.closed:
206 self.closed = True
207 return int(self)
208 raise ValueError("already closed")
209
210 def __repr__(self):
Serhiy Storchaka465e60e2014-07-25 23:36:00 +0300211 return "%s(%d)" % (self.__class__.__name__, int(self))
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200212
213 __del__ = Close
Zachary Ware880d42a2018-09-10 16:16:08 -0700214else:
215 # When select or poll has indicated that the file is writable,
216 # we can write up to _PIPE_BUF bytes without risk of blocking.
217 # POSIX defines PIPE_BUF as >= 512.
218 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
219
220 # poll/select have the advantage of not requiring any extra file
221 # descriptor, contrarily to epoll/kqueue (also, they require a single
222 # syscall).
223 if hasattr(selectors, 'PollSelector'):
224 _PopenSelector = selectors.PollSelector
225 else:
226 _PopenSelector = selectors.SelectSelector
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200227
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000228
Ruslan Kuprieiev042821a2019-06-28 19:12:16 +0300229if _mswindows:
230 # On Windows we just need to close `Popen._handle` when we no longer need
231 # it, so that the kernel can free it. `Popen._handle` gets closed
232 # implicitly when the `Popen` instance is finalized (see `Handle.__del__`,
233 # which is calling `CloseHandle` as requested in [1]), so there is nothing
234 # for `_cleanup` to do.
235 #
236 # [1] https://docs.microsoft.com/en-us/windows/desktop/ProcThread/
237 # creating-processes
238 _active = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000239
Ruslan Kuprieiev042821a2019-06-28 19:12:16 +0300240 def _cleanup():
241 pass
242else:
243 # This lists holds Popen instances for which the underlying process had not
244 # exited at the time its __del__ method got called: those processes are
245 # wait()ed for synchronously from _cleanup() when a new Popen object is
246 # created, to avoid zombie processes.
247 _active = []
248
249 def _cleanup():
250 if _active is None:
251 return
252 for inst in _active[:]:
253 res = inst._internal_poll(_deadstate=sys.maxsize)
254 if res is not None:
255 try:
256 _active.remove(inst)
257 except ValueError:
258 # This can happen if two threads create a new Popen instance.
259 # It's harmless that it was already removed, so ignore.
260 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000261
262PIPE = -1
263STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200264DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000265
266
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200267# XXX This function is only used by multiprocessing and the test suite,
268# but it's here so that it can be imported when Python is compiled without
269# threads.
270
Victor Stinner9def2842016-01-18 12:15:08 +0100271def _optim_args_from_interpreter_flags():
272 """Return a list of command-line arguments reproducing the current
273 optimization settings in sys.flags."""
274 args = []
275 value = sys.flags.optimize
276 if value > 0:
277 args.append('-' + 'O' * value)
278 return args
279
280
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200281def _args_from_interpreter_flags():
282 """Return a list of command-line arguments reproducing the current
Victor Stinner747f48e2017-12-12 22:59:48 +0100283 settings in sys.flags, sys.warnoptions and sys._xoptions."""
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200284 flag_opt_map = {
285 'debug': 'd',
286 # 'inspect': 'i',
287 # 'interactive': 'i',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200288 'dont_write_bytecode': 'B',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200289 'no_site': 'S',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200290 'verbose': 'v',
291 'bytes_warning': 'b',
292 'quiet': 'q',
Victor Stinner9def2842016-01-18 12:15:08 +0100293 # -O is handled in _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200294 }
Victor Stinner9def2842016-01-18 12:15:08 +0100295 args = _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200296 for flag, opt in flag_opt_map.items():
297 v = getattr(sys.flags, flag)
298 if v > 0:
299 args.append('-' + opt * v)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800300
Victor Stinner9de36322018-11-23 17:54:20 +0100301 if sys.flags.isolated:
302 args.append('-I')
303 else:
304 if sys.flags.ignore_environment:
305 args.append('-E')
306 if sys.flags.no_user_site:
307 args.append('-s')
308
Victor Stinnerf39b6742017-11-20 15:24:56 -0800309 # -W options
Victor Stinner747f48e2017-12-12 22:59:48 +0100310 warnopts = sys.warnoptions[:]
311 bytes_warning = sys.flags.bytes_warning
312 xoptions = getattr(sys, '_xoptions', {})
313 dev_mode = ('dev' in xoptions)
314
315 if bytes_warning > 1:
316 warnopts.remove("error::BytesWarning")
317 elif bytes_warning:
318 warnopts.remove("default::BytesWarning")
319 if dev_mode:
320 warnopts.remove('default')
321 for opt in warnopts:
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200322 args.append('-W' + opt)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800323
324 # -X options
Victor Stinner747f48e2017-12-12 22:59:48 +0100325 if dev_mode:
Victor Stinnerf39b6742017-11-20 15:24:56 -0800326 args.extend(('-X', 'dev'))
327 for opt in ('faulthandler', 'tracemalloc', 'importtime',
Victor Stinner91106cd2017-12-13 12:29:09 +0100328 'showalloccount', 'showrefcount', 'utf8'):
Victor Stinnerf39b6742017-11-20 15:24:56 -0800329 if opt in xoptions:
330 value = xoptions[opt]
331 if value is True:
332 arg = opt
333 else:
334 arg = '%s=%s' % (opt, value)
335 args.extend(('-X', arg))
336
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200337 return args
338
339
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400340def call(*popenargs, timeout=None, **kwargs):
341 """Run command with arguments. Wait for command to complete or
342 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000343
344 The arguments are the same as for the Popen constructor. Example:
345
346 retcode = call(["ls", "-l"])
347 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200348 with Popen(*popenargs, **kwargs) as p:
349 try:
350 return p.wait(timeout=timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800351 except: # Including KeyboardInterrupt, wait handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200352 p.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800353 # We don't call p.wait() again as p.__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200354 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000355
356
Peter Astrand454f7672005-01-01 09:36:35 +0000357def check_call(*popenargs, **kwargs):
358 """Run command with arguments. Wait for command to complete. If
359 the exit code was zero then return, otherwise raise
360 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000361 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000362
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400363 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000364
365 check_call(["ls", "-l"])
366 """
367 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000368 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000369 cmd = kwargs.get("args")
370 if cmd is None:
371 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000372 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000373 return 0
374
375
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400376def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700377 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000378
379 If the exit code was non-zero it raises a CalledProcessError. The
380 CalledProcessError object will have the return code in the returncode
381 attribute and output in the output attribute.
382
383 The arguments are the same as for the Popen constructor. Example:
384
385 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000386 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000387
388 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000389 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000390
391 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000392 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000393 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000394 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700395
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300396 There is an additional optional argument, "input", allowing you to
397 pass a string to the subprocess's stdin. If you use this argument
398 you may not also use the Popen constructor's "stdin" argument, as
399 it too will be used internally. Example:
400
401 >>> check_output(["sed", "-e", "s/foo/bar/"],
402 ... input=b"when in the course of fooman events\n")
403 b'when in the course of barman events\n'
404
andyclegg7fed7bd2017-10-23 03:01:19 +0100405 By default, all communication is in bytes, and therefore any "input"
Matthias182e1d12019-09-10 15:51:09 +0200406 should be bytes, and the return value will be bytes. If in text mode,
andyclegg7fed7bd2017-10-23 03:01:19 +0100407 any "input" should be a string, and the return value will be a string
408 decoded according to locale encoding, or by "encoding" if set. Text mode
409 is triggered by setting any of text, encoding, errors or universal_newlines.
Georg Brandlf9734072008-12-07 15:30:06 +0000410 """
411 if 'stdout' in kwargs:
412 raise ValueError('stdout argument not allowed, it will be overridden.')
Gregory P. Smith6e730002015-04-14 16:14:25 -0700413
414 if 'input' in kwargs and kwargs['input'] is None:
415 # Explicitly passing input=None was previously equivalent to passing an
416 # empty string. That is maintained here for backwards compatibility.
417 kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
418
419 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
420 **kwargs).stdout
421
422
423class CompletedProcess(object):
424 """A process that has finished running.
425
426 This is returned by run().
427
428 Attributes:
429 args: The list or str args passed to run().
430 returncode: The exit code of the process, negative for signals.
431 stdout: The standard output (None if not captured).
432 stderr: The standard error (None if not captured).
433 """
434 def __init__(self, args, returncode, stdout=None, stderr=None):
435 self.args = args
436 self.returncode = returncode
437 self.stdout = stdout
438 self.stderr = stderr
439
440 def __repr__(self):
441 args = ['args={!r}'.format(self.args),
442 'returncode={!r}'.format(self.returncode)]
443 if self.stdout is not None:
444 args.append('stdout={!r}'.format(self.stdout))
445 if self.stderr is not None:
446 args.append('stderr={!r}'.format(self.stderr))
447 return "{}({})".format(type(self).__name__, ', '.join(args))
448
449 def check_returncode(self):
450 """Raise CalledProcessError if the exit code is non-zero."""
451 if self.returncode:
452 raise CalledProcessError(self.returncode, self.args, self.stdout,
453 self.stderr)
454
455
Bo Baylesce0f33d2018-01-30 00:40:39 -0600456def run(*popenargs,
457 input=None, capture_output=False, timeout=None, check=False, **kwargs):
Gregory P. Smith6e730002015-04-14 16:14:25 -0700458 """Run command with arguments and return a CompletedProcess instance.
459
460 The returned instance will have attributes args, returncode, stdout and
461 stderr. By default, stdout and stderr are not captured, and those attributes
462 will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.
463
464 If check is True and the exit code was non-zero, it raises a
465 CalledProcessError. The CalledProcessError object will have the return code
466 in the returncode attribute, and output & stderr attributes if those streams
467 were captured.
468
469 If timeout is given, and the process takes too long, a TimeoutExpired
470 exception will be raised.
471
472 There is an optional argument "input", allowing you to
andyclegg7fed7bd2017-10-23 03:01:19 +0100473 pass bytes or a string to the subprocess's stdin. If you use this argument
Gregory P. Smith6e730002015-04-14 16:14:25 -0700474 you may not also use the Popen constructor's "stdin" argument, as
475 it will be used internally.
476
andyclegg7fed7bd2017-10-23 03:01:19 +0100477 By default, all communication is in bytes, and therefore any "input" should
478 be bytes, and the stdout and stderr will be bytes. If in text mode, any
479 "input" should be a string, and stdout and stderr will be strings decoded
480 according to locale encoding, or by "encoding" if set. Text mode is
481 triggered by setting any of text, encoding, errors or universal_newlines.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700482
andyclegg7fed7bd2017-10-23 03:01:19 +0100483 The other arguments are the same as for the Popen constructor.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700484 """
485 if input is not None:
Rémi Lapeyre8cc605a2019-06-08 16:56:24 +0200486 if kwargs.get('stdin') is not None:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300487 raise ValueError('stdin and input arguments may not both be used.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300488 kwargs['stdin'] = PIPE
Gregory P. Smith6e730002015-04-14 16:14:25 -0700489
Bo Baylesce0f33d2018-01-30 00:40:39 -0600490 if capture_output:
Rémi Lapeyre8cc605a2019-06-08 16:56:24 +0200491 if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None:
Bo Baylesce0f33d2018-01-30 00:40:39 -0600492 raise ValueError('stdout and stderr arguments may not be used '
493 'with capture_output.')
494 kwargs['stdout'] = PIPE
495 kwargs['stderr'] = PIPE
496
Gregory P. Smith6e730002015-04-14 16:14:25 -0700497 with Popen(*popenargs, **kwargs) as process:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200498 try:
Gregory P. Smith6e730002015-04-14 16:14:25 -0700499 stdout, stderr = process.communicate(input, timeout=timeout)
Gregory P. Smith580d2782019-09-11 04:23:05 -0500500 except TimeoutExpired as exc:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200501 process.kill()
Gregory P. Smith580d2782019-09-11 04:23:05 -0500502 if _mswindows:
503 # Windows accumulates the output in a single blocking
504 # read() call run on child threads, with the timeout
505 # being done in a join() on those threads. communicate()
506 # _after_ kill() is required to collect that and add it
507 # to the exception.
508 exc.stdout, exc.stderr = process.communicate()
509 else:
510 # POSIX _communicate already populated the output so
511 # far into the TimeoutExpired exception.
512 process.wait()
513 raise
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800514 except: # Including KeyboardInterrupt, communicate handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200515 process.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800516 # We don't call process.wait() as .__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200517 raise
518 retcode = process.poll()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700519 if check and retcode:
520 raise CalledProcessError(retcode, process.args,
521 output=stdout, stderr=stderr)
522 return CompletedProcess(process.args, retcode, stdout, stderr)
Peter Astrand454f7672005-01-01 09:36:35 +0000523
524
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000525def list2cmdline(seq):
526 """
527 Translate a sequence of arguments into a command line
528 string, using the same rules as the MS C runtime:
529
530 1) Arguments are delimited by white space, which is either a
531 space or a tab.
532
533 2) A string surrounded by double quotation marks is
534 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000535 contained within. A quoted string can be embedded in an
536 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000537
538 3) A double quotation mark preceded by a backslash is
539 interpreted as a literal double quotation mark.
540
541 4) Backslashes are interpreted literally, unless they
542 immediately precede a double quotation mark.
543
544 5) If backslashes immediately precede a double quotation mark,
545 every pair of backslashes is interpreted as a literal
546 backslash. If the number of backslashes is odd, the last
547 backslash escapes the next double quotation mark as
548 described in rule 3.
549 """
550
551 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000552 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
553 # or search http://msdn.microsoft.com for
554 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000555 result = []
556 needquote = False
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +0300557 for arg in map(os.fsdecode, seq):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000558 bs_buf = []
559
560 # Add a space to separate this argument from the others
561 if result:
562 result.append(' ')
563
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000564 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000565 if needquote:
566 result.append('"')
567
568 for c in arg:
569 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000570 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000571 bs_buf.append(c)
572 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000573 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000574 result.append('\\' * len(bs_buf)*2)
575 bs_buf = []
576 result.append('\\"')
577 else:
578 # Normal char
579 if bs_buf:
580 result.extend(bs_buf)
581 bs_buf = []
582 result.append(c)
583
Christian Heimesfdab48e2008-01-20 09:06:41 +0000584 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000585 if bs_buf:
586 result.extend(bs_buf)
587
588 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000589 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000590 result.append('"')
591
592 return ''.join(result)
593
594
Brett Cannona23810f2008-05-26 19:04:21 +0000595# Various tools for executing commands and looking at their output and status.
596#
Brett Cannona23810f2008-05-26 19:04:21 +0000597
598def getstatusoutput(cmd):
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700599 """Return (exitcode, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000600
Tim Golden60798142013-11-05 12:57:25 +0000601 Execute the string 'cmd' in a shell with 'check_output' and
Steve Dower050acae2016-09-06 20:16:17 -0700602 return a 2-tuple (status, output). The locale encoding is used
603 to decode the output and process newlines.
Tim Golden60798142013-11-05 12:57:25 +0000604
605 A trailing newline is stripped from the output.
606 The exit status for the command can be interpreted
607 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000608
609 >>> import subprocess
610 >>> subprocess.getstatusoutput('ls /bin/ls')
611 (0, '/bin/ls')
612 >>> subprocess.getstatusoutput('cat /bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700613 (1, 'cat: /bin/junk: No such file or directory')
Brett Cannona23810f2008-05-26 19:04:21 +0000614 >>> subprocess.getstatusoutput('/bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700615 (127, 'sh: /bin/junk: not found')
616 >>> subprocess.getstatusoutput('/bin/kill $$')
617 (-15, '')
Brett Cannona23810f2008-05-26 19:04:21 +0000618 """
Tim Goldene0041752013-11-03 12:53:17 +0000619 try:
andyclegg7fed7bd2017-10-23 03:01:19 +0100620 data = check_output(cmd, shell=True, text=True, stderr=STDOUT)
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700621 exitcode = 0
Tim Goldene0041752013-11-03 12:53:17 +0000622 except CalledProcessError as ex:
623 data = ex.output
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700624 exitcode = ex.returncode
Tim Goldene0041752013-11-03 12:53:17 +0000625 if data[-1:] == '\n':
626 data = data[:-1]
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700627 return exitcode, data
Brett Cannona23810f2008-05-26 19:04:21 +0000628
629def getoutput(cmd):
630 """Return output (stdout or stderr) of executing cmd in a shell.
631
632 Like getstatusoutput(), except the exit status is ignored and the return
633 value is a string containing the command's output. Example:
634
635 >>> import subprocess
636 >>> subprocess.getoutput('ls /bin/ls')
637 '/bin/ls'
638 """
639 return getstatusoutput(cmd)[1]
640
641
Victor Stinner9daecf32019-01-16 00:02:35 +0100642def _use_posix_spawn():
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800643 """Check if posix_spawn() can be used for subprocess.
Victor Stinner9daecf32019-01-16 00:02:35 +0100644
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800645 subprocess requires a posix_spawn() implementation that properly reports
646 errors to the parent process, & sets errno on the following failures:
Victor Stinner9daecf32019-01-16 00:02:35 +0100647
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800648 * Process attribute actions failed.
649 * File actions failed.
650 * exec() failed.
Victor Stinner9daecf32019-01-16 00:02:35 +0100651
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800652 Prefer an implementation which can use vfork() in some cases for best
653 performance.
Victor Stinner9daecf32019-01-16 00:02:35 +0100654 """
655 if _mswindows or not hasattr(os, 'posix_spawn'):
656 # os.posix_spawn() is not available
657 return False
658
659 if sys.platform == 'darwin':
660 # posix_spawn() is a syscall on macOS and properly reports errors
661 return True
662
663 # Check libc name and runtime libc version
664 try:
665 ver = os.confstr('CS_GNU_LIBC_VERSION')
666 # parse 'glibc 2.28' as ('glibc', (2, 28))
667 parts = ver.split(maxsplit=1)
668 if len(parts) != 2:
669 # reject unknown format
670 raise ValueError
671 libc = parts[0]
672 version = tuple(map(int, parts[1].split('.')))
673
674 if sys.platform == 'linux' and libc == 'glibc' and version >= (2, 24):
675 # glibc 2.24 has a new Linux posix_spawn implementation using vfork
676 # which properly reports errors to the parent process.
677 return True
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800678 # Note: Don't use the implementation in earlier glibc because it doesn't
Victor Stinner9daecf32019-01-16 00:02:35 +0100679 # use vfork (even if glibc 2.26 added a pipe to properly report errors
680 # to the parent process).
681 except (AttributeError, ValueError, OSError):
682 # os.confstr() or CS_GNU_LIBC_VERSION value not available
683 pass
684
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800685 # By default, assume that posix_spawn() does not properly report errors.
Victor Stinner9daecf32019-01-16 00:02:35 +0100686 return False
687
688
689_USE_POSIX_SPAWN = _use_posix_spawn()
690
691
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000692class Popen(object):
Martin Panter4afdca02016-10-25 22:20:48 +0000693 """ Execute a child program in a new process.
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200694
Martin Panter4afdca02016-10-25 22:20:48 +0000695 For a complete description of the arguments see the Python documentation.
696
697 Arguments:
698 args: A string, or a sequence of program arguments.
699
700 bufsize: supplied as the buffering argument to the open() function when
701 creating the stdin/stdout/stderr pipe file objects
702
703 executable: A replacement program to execute.
704
705 stdin, stdout and stderr: These specify the executed programs' standard
706 input, standard output and standard error file handles, respectively.
707
708 preexec_fn: (POSIX only) An object to be called in the child process
709 just before the child is executed.
710
711 close_fds: Controls closing or inheriting of file descriptors.
712
713 shell: If true, the command will be executed through the shell.
714
715 cwd: Sets the current directory before the child is executed.
716
717 env: Defines the environment variables for the new process.
718
andyclegg7fed7bd2017-10-23 03:01:19 +0100719 text: If true, decode stdin, stdout and stderr using the given encoding
720 (if set) or the system default otherwise.
721
722 universal_newlines: Alias of text, provided for backwards compatibility.
Martin Panter4afdca02016-10-25 22:20:48 +0000723
724 startupinfo and creationflags (Windows only)
725
726 restore_signals (POSIX only)
727
728 start_new_session (POSIX only)
729
Patrick McLean2b2ead72019-09-12 10:15:44 -0700730 group (POSIX only)
731
732 extra_groups (POSIX only)
733
734 user (POSIX only)
735
Gregory P. Smithf3751ef2019-10-12 13:24:56 -0700736 umask (POSIX only)
737
Martin Panter4afdca02016-10-25 22:20:48 +0000738 pass_fds (POSIX only)
739
Martin Panter3dca6242016-10-25 23:41:42 +0000740 encoding and errors: Text mode encoding and error handling to use for
741 file objects stdin, stdout and stderr.
742
Martin Panter4afdca02016-10-25 22:20:48 +0000743 Attributes:
744 stdin, stdout, stderr, pid, returncode
745 """
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200746 _child_created = False # Set here since __del__ checks it
747
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700748 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000749 stdin=None, stdout=None, stderr=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200750 preexec_fn=None, close_fds=True,
andyclegg7fed7bd2017-10-23 03:01:19 +0100751 shell=False, cwd=None, env=None, universal_newlines=None,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000752 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000753 restore_signals=True, start_new_session=False,
Patrick McLean2b2ead72019-09-12 10:15:44 -0700754 pass_fds=(), *, user=None, group=None, extra_groups=None,
Gregory P. Smithf3751ef2019-10-12 13:24:56 -0700755 encoding=None, errors=None, text=None, umask=-1):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000756 """Create new Popen instance."""
757 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700758 # Held while anything is calling waitpid before returncode has been
759 # updated to prevent clobbering returncode if wait() or poll() are
760 # called from multiple threads at once. After acquiring the lock,
761 # code must re-check self.returncode to see if another thread just
762 # finished a waitpid() call.
763 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000764
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400765 self._input = None
766 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000767 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700768 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000769 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000770 raise TypeError("bufsize must be an integer")
771
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700772 if _mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000773 if preexec_fn is not None:
774 raise ValueError("preexec_fn is not supported on Windows "
775 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000776 else:
777 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000778 if pass_fds and not close_fds:
779 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
780 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000781 if startupinfo is not None:
782 raise ValueError("startupinfo is only supported on Windows "
783 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000784 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000785 raise ValueError("creationflags is only supported on Windows "
786 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000787
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400788 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000789 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000790 self.stdout = None
791 self.stderr = None
792 self.pid = None
793 self.returncode = None
Steve Dower050acae2016-09-06 20:16:17 -0700794 self.encoding = encoding
795 self.errors = errors
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000796
andyclegg7fed7bd2017-10-23 03:01:19 +0100797 # Validate the combinations of text and universal_newlines
798 if (text is not None and universal_newlines is not None
799 and bool(universal_newlines) != bool(text)):
800 raise SubprocessError('Cannot disambiguate when both text '
801 'and universal_newlines are supplied but '
802 'different. Pass one or the other.')
803
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000804 # Input and output objects. The general principle is like
805 # this:
806 #
807 # Parent Child
808 # ------ -----
809 # p2cwrite ---stdin---> p2cread
810 # c2pread <--stdout--- c2pwrite
811 # errread <--stderr--- errwrite
812 #
813 # On POSIX, the child objects are file descriptors. On
814 # Windows, these are Windows file handles. The parent objects
815 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000816 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000817 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000818
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000819 (p2cread, p2cwrite,
820 c2pread, c2pwrite,
821 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
822
Antoine Pitrouc9982322011-01-04 19:07:07 +0000823 # We wrap OS handles *before* launching the child, otherwise a
824 # quickly terminating child could make our fds unwrappable
825 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000826
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700827 if _mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000828 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000829 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000830 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000831 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000832 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000833 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000834
andyclegg7fed7bd2017-10-23 03:01:19 +0100835 self.text_mode = encoding or errors or text or universal_newlines
Tim Peterse718f612004-10-12 21:51:32 +0000836
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800837 # How long to resume waiting on a child after the first ^C.
838 # There is no right value for this. The purpose is to be polite
839 # yet remain good for interactive users trying to exit a tool.
840 self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber()
841
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700842 self._closed_child_pipe_fds = False
Steve Dower050acae2016-09-06 20:16:17 -0700843
Alexey Izbysheva2670562018-10-20 03:22:31 +0300844 if self.text_mode:
845 if bufsize == 1:
846 line_buffering = True
847 # Use the default buffer size for the underlying binary streams
848 # since they don't support line buffering.
849 bufsize = -1
850 else:
851 line_buffering = False
852
Patrick McLean2b2ead72019-09-12 10:15:44 -0700853 gid = None
854 if group is not None:
855 if not hasattr(os, 'setregid'):
856 raise ValueError("The 'group' parameter is not supported on the "
857 "current platform")
858
859 elif isinstance(group, str):
860 if grp is None:
861 raise ValueError("The group parameter cannot be a string "
862 "on systems without the grp module")
863
864 gid = grp.getgrnam(group).gr_gid
865 elif isinstance(group, int):
866 gid = group
867 else:
868 raise TypeError("Group must be a string or an integer, not {}"
869 .format(type(group)))
870
871 if gid < 0:
872 raise ValueError(f"Group ID cannot be negative, got {gid}")
873
874 gids = None
875 if extra_groups is not None:
876 if not hasattr(os, 'setgroups'):
877 raise ValueError("The 'extra_groups' parameter is not "
878 "supported on the current platform")
879
880 elif isinstance(extra_groups, str):
881 raise ValueError("Groups must be a list, not a string")
882
883 gids = []
884 for extra_group in extra_groups:
885 if isinstance(extra_group, str):
886 if grp is None:
887 raise ValueError("Items in extra_groups cannot be "
888 "strings on systems without the "
889 "grp module")
890
891 gids.append(grp.getgrnam(extra_group).gr_gid)
892 elif isinstance(extra_group, int):
893 gids.append(extra_group)
894 else:
895 raise TypeError("Items in extra_groups must be a string "
896 "or integer, not {}"
897 .format(type(extra_group)))
898
899 # make sure that the gids are all positive here so we can do less
900 # checking in the C code
901 for gid_check in gids:
902 if gid_check < 0:
903 raise ValueError(f"Group ID cannot be negative, got {gid_check}")
904
905 uid = None
906 if user is not None:
907 if not hasattr(os, 'setreuid'):
908 raise ValueError("The 'user' parameter is not supported on "
909 "the current platform")
910
911 elif isinstance(user, str):
912 if pwd is None:
913 raise ValueError("The user parameter cannot be a string "
914 "on systems without the pwd module")
915
916 uid = pwd.getpwnam(user).pw_uid
917 elif isinstance(user, int):
918 uid = user
919 else:
920 raise TypeError("User must be a string or an integer")
921
922 if uid < 0:
923 raise ValueError(f"User ID cannot be negative, got {uid}")
924
Antoine Pitrouc9982322011-01-04 19:07:07 +0000925 try:
Steve Dower050acae2016-09-06 20:16:17 -0700926 if p2cwrite != -1:
927 self.stdin = io.open(p2cwrite, 'wb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100928 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700929 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
Alexey Izbysheva2670562018-10-20 03:22:31 +0300930 line_buffering=line_buffering,
Steve Dower050acae2016-09-06 20:16:17 -0700931 encoding=encoding, errors=errors)
932 if c2pread != -1:
933 self.stdout = io.open(c2pread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100934 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700935 self.stdout = io.TextIOWrapper(self.stdout,
936 encoding=encoding, errors=errors)
937 if errread != -1:
938 self.stderr = io.open(errread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100939 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700940 self.stderr = io.TextIOWrapper(self.stderr,
941 encoding=encoding, errors=errors)
942
Antoine Pitrouc9982322011-01-04 19:07:07 +0000943 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300944 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000945 startupinfo, creationflags, shell,
946 p2cread, p2cwrite,
947 c2pread, c2pwrite,
948 errread, errwrite,
Patrick McLean2b2ead72019-09-12 10:15:44 -0700949 restore_signals,
Gregory P. Smithf3751ef2019-10-12 13:24:56 -0700950 gid, gids, uid, umask,
Patrick McLean2b2ead72019-09-12 10:15:44 -0700951 start_new_session)
Antoine Pitrouc9982322011-01-04 19:07:07 +0000952 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800953 # Cleanup if the child failed starting.
954 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000955 try:
956 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200957 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800958 pass # Ignore EBADF or other errors.
959
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700960 if not self._closed_child_pipe_fds:
961 to_close = []
962 if stdin == PIPE:
963 to_close.append(p2cread)
964 if stdout == PIPE:
965 to_close.append(c2pwrite)
966 if stderr == PIPE:
967 to_close.append(errwrite)
968 if hasattr(self, '_devnull'):
969 to_close.append(self._devnull)
970 for fd in to_close:
971 try:
Segev Finer4d385172017-08-18 16:18:13 +0300972 if _mswindows and isinstance(fd, Handle):
973 fd.Close()
974 else:
975 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700976 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700977 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800978
Antoine Pitrouc9982322011-01-04 19:07:07 +0000979 raise
980
Andrey Doroschenko645005e2019-11-17 17:08:31 +0300981 def __repr__(self):
982 obj_repr = (
983 f"<{self.__class__.__name__}: "
984 f"returncode: {self.returncode} args: {list(self.args)!r}>"
985 )
986 if len(obj_repr) > 80:
987 obj_repr = obj_repr[:76] + "...>"
988 return obj_repr
989
andyclegg7fed7bd2017-10-23 03:01:19 +0100990 @property
991 def universal_newlines(self):
992 # universal_newlines as retained as an alias of text_mode for API
luzpaza5293b42017-11-05 07:37:50 -0600993 # compatibility. bpo-31756
andyclegg7fed7bd2017-10-23 03:01:19 +0100994 return self.text_mode
995
996 @universal_newlines.setter
997 def universal_newlines(self, universal_newlines):
998 self.text_mode = bool(universal_newlines)
999
Steve Dower050acae2016-09-06 20:16:17 -07001000 def _translate_newlines(self, data, encoding, errors):
1001 data = data.decode(encoding, errors)
Andrew Svetlov82860712012-08-19 22:13:41 +03001002 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001003
Brian Curtin79cdb662010-12-03 02:46:02 +00001004 def __enter__(self):
1005 return self
1006
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001007 def __exit__(self, exc_type, value, traceback):
Brian Curtin79cdb662010-12-03 02:46:02 +00001008 if self.stdout:
1009 self.stdout.close()
1010 if self.stderr:
1011 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +02001012 try: # Flushing a BufferedWriter may raise an error
1013 if self.stdin:
1014 self.stdin.close()
1015 finally:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001016 if exc_type == KeyboardInterrupt:
1017 # https://bugs.python.org/issue25942
1018 # In the case of a KeyboardInterrupt we assume the SIGINT
1019 # was also already sent to our child processes. We can't
1020 # block indefinitely as that is not user friendly.
1021 # If we have not already waited a brief amount of time in
1022 # an interrupted .wait() or .communicate() call, do so here
1023 # for consistency.
1024 if self._sigint_wait_secs > 0:
1025 try:
1026 self._wait(timeout=self._sigint_wait_secs)
1027 except TimeoutExpired:
1028 pass
1029 self._sigint_wait_secs = 0 # Note that this has been done.
1030 return # resume the KeyboardInterrupt
1031
Serhiy Storchakaab900c22015-02-28 12:43:08 +02001032 # Wait for the process to terminate, to avoid zombies.
1033 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001034
Victor Stinner9505b032017-01-06 10:44:44 +01001035 def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn):
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001036 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001037 # We didn't get to successfully create a child process.
1038 return
Victor Stinner5a48e212016-05-20 12:11:15 +02001039 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001040 # Not reading subprocess exit status creates a zombie process which
Victor Stinnerc206f1e2016-06-14 16:42:59 +02001041 # is only destroyed at the parent python process exit
Victor Stinner9505b032017-01-06 10:44:44 +01001042 _warn("subprocess %s is still running" % self.pid,
1043 ResourceWarning, source=self)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001044 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +00001045 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001046 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001047 # Child is still running, keep us alive until we can wait on it.
1048 _active.append(self)
1049
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001050 def _get_devnull(self):
1051 if not hasattr(self, '_devnull'):
1052 self._devnull = os.open(os.devnull, os.O_RDWR)
1053 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001054
Victor Stinnera5e881d2015-01-14 17:07:59 +01001055 def _stdin_write(self, input):
1056 if input:
1057 try:
1058 self.stdin.write(input)
1059 except BrokenPipeError:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001060 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +02001061 except OSError as exc:
1062 if exc.errno == errno.EINVAL:
1063 # bpo-19612, bpo-30418: On Windows, stdin.write() fails
1064 # with EINVAL if the child process exited or if the child
1065 # process is still running but closed the pipe.
Victor Stinnera5e881d2015-01-14 17:07:59 +01001066 pass
1067 else:
1068 raise
Victor Stinnerd52aa312017-06-08 17:30:39 +02001069
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001070 try:
1071 self.stdin.close()
1072 except BrokenPipeError:
1073 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +02001074 except OSError as exc:
1075 if exc.errno == errno.EINVAL:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001076 pass
1077 else:
1078 raise
Victor Stinnera5e881d2015-01-14 17:07:59 +01001079
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001080 def communicate(self, input=None, timeout=None):
Joel Schaerer88031a92017-09-13 21:11:20 +02001081 """Interact with process: Send data to stdin and close it.
1082 Read data from stdout and stderr, until end-of-file is
1083 reached. Wait for process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +00001084
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -04001085 The optional "input" argument should be data to be sent to the
andyclegg7fed7bd2017-10-23 03:01:19 +01001086 child process, or None, if no data should be sent to the child.
1087 communicate() returns a tuple (stdout, stderr).
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -04001088
andyclegg7fed7bd2017-10-23 03:01:19 +01001089 By default, all communication is in bytes, and therefore any
1090 "input" should be bytes, and the (stdout, stderr) will be bytes.
1091 If in text mode (indicated by self.text_mode), any "input" should
1092 be a string, and (stdout, stderr) will be strings decoded
1093 according to locale encoding, or by "encoding" if set. Text mode
1094 is triggered by setting any of text, encoding, errors or
1095 universal_newlines.
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -04001096 """
Peter Astrand23109f02005-03-03 20:28:59 +00001097
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001098 if self._communication_started and input:
1099 raise ValueError("Cannot send input after starting communication")
1100
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001101 # Optimization: If we are not worried about timeouts, we haven't
1102 # started communicating, and we have one or zero pipes, using select()
1103 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +02001104 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001105 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +00001106 stdout = None
1107 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +00001108 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001109 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +00001110 elif self.stdout:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001111 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001112 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +00001113 elif self.stderr:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001114 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001115 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +00001116 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +02001117 else:
1118 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +02001119 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +02001120 else:
1121 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +00001122
Victor Stinner7a8d0812011-04-05 13:13:08 +02001123 try:
1124 stdout, stderr = self._communicate(input, endtime, timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001125 except KeyboardInterrupt:
1126 # https://bugs.python.org/issue25942
1127 # See the detailed comment in .wait().
1128 if timeout is not None:
1129 sigint_timeout = min(self._sigint_wait_secs,
1130 self._remaining_time(endtime))
1131 else:
1132 sigint_timeout = self._sigint_wait_secs
1133 self._sigint_wait_secs = 0 # nothing else should wait.
1134 try:
1135 self._wait(timeout=sigint_timeout)
1136 except TimeoutExpired:
1137 pass
1138 raise # resume the KeyboardInterrupt
1139
Victor Stinner7a8d0812011-04-05 13:13:08 +02001140 finally:
1141 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001142
Victor Stinner7a8d0812011-04-05 13:13:08 +02001143 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001144
1145 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +00001146
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001147
Georg Brandl6aa2d1f2008-08-12 08:35:52 +00001148 def poll(self):
Martin Panter4afdca02016-10-25 22:20:48 +00001149 """Check if child process has terminated. Set and return returncode
1150 attribute."""
Georg Brandl6aa2d1f2008-08-12 08:35:52 +00001151 return self._internal_poll()
1152
1153
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001154 def _remaining_time(self, endtime):
1155 """Convenience for _communicate when computing timeouts."""
1156 if endtime is None:
1157 return None
1158 else:
Victor Stinner949d8c92012-05-30 13:30:32 +02001159 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001160
1161
Gregory P. Smith580d2782019-09-11 04:23:05 -05001162 def _check_timeout(self, endtime, orig_timeout, stdout_seq, stderr_seq,
1163 skip_check_and_raise=False):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001164 """Convenience for checking if a timeout has expired."""
1165 if endtime is None:
1166 return
Gregory P. Smith580d2782019-09-11 04:23:05 -05001167 if skip_check_and_raise or _time() > endtime:
1168 raise TimeoutExpired(
1169 self.args, orig_timeout,
1170 output=b''.join(stdout_seq) if stdout_seq else None,
1171 stderr=b''.join(stderr_seq) if stderr_seq else None)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001172
1173
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001174 def wait(self, timeout=None):
1175 """Wait for child process to terminate; returns self.returncode."""
1176 if timeout is not None:
1177 endtime = _time() + timeout
1178 try:
1179 return self._wait(timeout=timeout)
1180 except KeyboardInterrupt:
1181 # https://bugs.python.org/issue25942
1182 # The first keyboard interrupt waits briefly for the child to
1183 # exit under the common assumption that it also received the ^C
1184 # generated SIGINT and will exit rapidly.
1185 if timeout is not None:
1186 sigint_timeout = min(self._sigint_wait_secs,
1187 self._remaining_time(endtime))
1188 else:
1189 sigint_timeout = self._sigint_wait_secs
1190 self._sigint_wait_secs = 0 # nothing else should wait.
1191 try:
1192 self._wait(timeout=sigint_timeout)
1193 except TimeoutExpired:
1194 pass
1195 raise # resume the KeyboardInterrupt
1196
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001197 def _close_pipe_fds(self,
1198 p2cread, p2cwrite,
1199 c2pread, c2pwrite,
1200 errread, errwrite):
1201 # self._devnull is not always defined.
1202 devnull_fd = getattr(self, '_devnull', None)
1203
Giampaolo Rodolabafa8482019-01-29 22:14:24 +01001204 with contextlib.ExitStack() as stack:
1205 if _mswindows:
1206 if p2cread != -1:
1207 stack.callback(p2cread.Close)
1208 if c2pwrite != -1:
1209 stack.callback(c2pwrite.Close)
1210 if errwrite != -1:
1211 stack.callback(errwrite.Close)
1212 else:
1213 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
1214 stack.callback(os.close, p2cread)
1215 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
1216 stack.callback(os.close, c2pwrite)
1217 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
1218 stack.callback(os.close, errwrite)
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001219
Giampaolo Rodolabafa8482019-01-29 22:14:24 +01001220 if devnull_fd is not None:
1221 stack.callback(os.close, devnull_fd)
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001222
1223 # Prevent a double close of these handles/fds from __init__ on error.
1224 self._closed_child_pipe_fds = True
1225
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -07001226 if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001227 #
1228 # Windows methods
1229 #
1230 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001231 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001232 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1233 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001234 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001235 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +00001236
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001237 p2cread, p2cwrite = -1, -1
1238 c2pread, c2pwrite = -1, -1
1239 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001240
Peter Astrandd38ddf42005-02-10 08:32:50 +00001241 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001242 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001243 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001244 p2cread, _ = _winapi.CreatePipe(None, 0)
1245 p2cread = Handle(p2cread)
1246 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001247 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001248 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
1249 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001250 elif stdin == DEVNULL:
1251 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001252 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001253 p2cread = msvcrt.get_osfhandle(stdin)
1254 else:
1255 # Assuming file-like object
1256 p2cread = msvcrt.get_osfhandle(stdin.fileno())
1257 p2cread = self._make_inheritable(p2cread)
1258
Peter Astrandd38ddf42005-02-10 08:32:50 +00001259 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001260 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001261 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001262 _, c2pwrite = _winapi.CreatePipe(None, 0)
1263 c2pwrite = Handle(c2pwrite)
1264 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001265 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001266 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
1267 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001268 elif stdout == DEVNULL:
1269 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001270 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001271 c2pwrite = msvcrt.get_osfhandle(stdout)
1272 else:
1273 # Assuming file-like object
1274 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1275 c2pwrite = self._make_inheritable(c2pwrite)
1276
Peter Astrandd38ddf42005-02-10 08:32:50 +00001277 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001278 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001279 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001280 _, errwrite = _winapi.CreatePipe(None, 0)
1281 errwrite = Handle(errwrite)
1282 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001283 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001284 errread, errwrite = _winapi.CreatePipe(None, 0)
1285 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001286 elif stderr == STDOUT:
1287 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001288 elif stderr == DEVNULL:
1289 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001290 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001291 errwrite = msvcrt.get_osfhandle(stderr)
1292 else:
1293 # Assuming file-like object
1294 errwrite = msvcrt.get_osfhandle(stderr.fileno())
1295 errwrite = self._make_inheritable(errwrite)
1296
1297 return (p2cread, p2cwrite,
1298 c2pread, c2pwrite,
1299 errread, errwrite)
1300
1301
1302 def _make_inheritable(self, handle):
1303 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001304 h = _winapi.DuplicateHandle(
1305 _winapi.GetCurrentProcess(), handle,
1306 _winapi.GetCurrentProcess(), 0, 1,
1307 _winapi.DUPLICATE_SAME_ACCESS)
1308 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001309
1310
Segev Finerb2a60832017-12-18 11:28:19 +02001311 def _filter_handle_list(self, handle_list):
1312 """Filter out console handles that can't be used
1313 in lpAttributeList["handle_list"] and make sure the list
1314 isn't empty. This also removes duplicate handles."""
1315 # An handle with it's lowest two bits set might be a special console
1316 # handle that if passed in lpAttributeList["handle_list"], will
1317 # cause it to fail.
1318 return list({handle for handle in handle_list
1319 if handle & 0x3 != 0x3
1320 or _winapi.GetFileType(handle) !=
1321 _winapi.FILE_TYPE_CHAR})
1322
1323
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001324 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001325 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001326 startupinfo, creationflags, shell,
1327 p2cread, p2cwrite,
1328 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001329 errread, errwrite,
Patrick McLean2b2ead72019-09-12 10:15:44 -07001330 unused_restore_signals,
1331 unused_gid, unused_gids, unused_uid,
Gregory P. Smithf3751ef2019-10-12 13:24:56 -07001332 unused_umask,
Patrick McLean2b2ead72019-09-12 10:15:44 -07001333 unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001334 """Execute program (MS Windows version)"""
1335
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001336 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001337
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +03001338 if isinstance(args, str):
1339 pass
1340 elif isinstance(args, bytes):
1341 if shell:
1342 raise TypeError('bytes args is not allowed on Windows')
1343 args = list2cmdline([args])
1344 elif isinstance(args, os.PathLike):
1345 if shell:
1346 raise TypeError('path-like args is not allowed when '
1347 'shell is true')
1348 args = list2cmdline([args])
1349 else:
Serhiy Storchakabe50a7b2018-02-28 01:03:46 +02001350 args = list2cmdline(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001351
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +03001352 if executable is not None:
1353 executable = os.fsdecode(executable)
1354
Peter Astrandc1d65362004-11-07 14:30:34 +00001355 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001356 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001357 startupinfo = STARTUPINFO()
Victor Stinner483422f2018-07-05 22:54:17 +02001358 else:
1359 # bpo-34044: Copy STARTUPINFO since it is modified above,
1360 # so the caller can reuse it multiple times.
1361 startupinfo = startupinfo.copy()
Segev Finerb2a60832017-12-18 11:28:19 +02001362
1363 use_std_handles = -1 not in (p2cread, c2pwrite, errwrite)
1364 if use_std_handles:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001365 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001366 startupinfo.hStdInput = p2cread
1367 startupinfo.hStdOutput = c2pwrite
1368 startupinfo.hStdError = errwrite
1369
Segev Finerb2a60832017-12-18 11:28:19 +02001370 attribute_list = startupinfo.lpAttributeList
1371 have_handle_list = bool(attribute_list and
1372 "handle_list" in attribute_list and
1373 attribute_list["handle_list"])
1374
1375 # If we were given an handle_list or need to create one
1376 if have_handle_list or (use_std_handles and close_fds):
1377 if attribute_list is None:
1378 attribute_list = startupinfo.lpAttributeList = {}
1379 handle_list = attribute_list["handle_list"] = \
1380 list(attribute_list.get("handle_list", []))
1381
1382 if use_std_handles:
1383 handle_list += [int(p2cread), int(c2pwrite), int(errwrite)]
1384
1385 handle_list[:] = self._filter_handle_list(handle_list)
1386
1387 if handle_list:
1388 if not close_fds:
1389 warnings.warn("startupinfo.lpAttributeList['handle_list'] "
1390 "overriding close_fds", RuntimeWarning)
1391
1392 # When using the handle_list we always request to inherit
1393 # handles but the only handles that will be inherited are
1394 # the ones in the handle_list
1395 close_fds = False
1396
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001397 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001398 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1399 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001400 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001401 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001402
Steve Dower60419a72019-06-24 08:42:54 -07001403 if cwd is not None:
1404 cwd = os.fsdecode(cwd)
1405
1406 sys.audit("subprocess.Popen", executable, args, cwd, env)
1407
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001408 # Start the process
1409 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001410 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001411 # no special security
1412 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001413 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001414 creationflags,
1415 env,
Steve Dower60419a72019-06-24 08:42:54 -07001416 cwd,
Tim Peterse8374a52004-10-13 03:15:00 +00001417 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001418 finally:
1419 # Child is launched. Close the parent's copy of those pipe
1420 # handles that only the child should have open. You need
1421 # to make sure that no handles to the write end of the
1422 # output pipe are maintained in this process or else the
1423 # pipe will not close when the child process exits and the
1424 # ReadFile will hang.
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001425 self._close_pipe_fds(p2cread, p2cwrite,
1426 c2pread, c2pwrite,
1427 errread, errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001428
1429 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001430 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001431 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001432 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001433 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001434
Brett Cannon84df1e62010-05-14 00:33:40 +00001435 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001436 _WaitForSingleObject=_winapi.WaitForSingleObject,
1437 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1438 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001439 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001440 attribute.
1441
1442 This method is called by __del__, so it can only refer to objects
1443 in its local scope.
1444
1445 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001446 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001447 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1448 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001449 return self.returncode
1450
1451
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001452 def _wait(self, timeout):
1453 """Internal implementation of wait() on Windows."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001454 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001455 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001456 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001457 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001458 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001459 # API note: Returns immediately if timeout_millis == 0.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001460 result = _winapi.WaitForSingleObject(self._handle,
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001461 timeout_millis)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001462 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001463 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001464 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001465 return self.returncode
1466
1467
1468 def _readerthread(self, fh, buffer):
1469 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001470 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001471
1472
Reid Kleckner2b228f02011-03-16 16:57:54 -04001473 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001474 # Start reader threads feeding into a list hanging off of this
1475 # object, unless they've already been started.
1476 if self.stdout and not hasattr(self, "_stdout_buff"):
1477 self._stdout_buff = []
1478 self.stdout_thread = \
1479 threading.Thread(target=self._readerthread,
1480 args=(self.stdout, self._stdout_buff))
1481 self.stdout_thread.daemon = True
1482 self.stdout_thread.start()
1483 if self.stderr and not hasattr(self, "_stderr_buff"):
1484 self._stderr_buff = []
1485 self.stderr_thread = \
1486 threading.Thread(target=self._readerthread,
1487 args=(self.stderr, self._stderr_buff))
1488 self.stderr_thread.daemon = True
1489 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001490
1491 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001492 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001493
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001494 # Wait for the reader threads, or time out. If we time out, the
1495 # threads remain reading and the fds left open in case the user
1496 # calls communicate again.
1497 if self.stdout is not None:
1498 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001499 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001500 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001501 if self.stderr is not None:
1502 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001503 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001504 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001505
1506 # Collect the output from and close both pipes, now that we know
1507 # both have been read successfully.
1508 stdout = None
1509 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001510 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001511 stdout = self._stdout_buff
1512 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001513 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001514 stderr = self._stderr_buff
1515 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001516
1517 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001518 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001519 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001520 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001521 stderr = stderr[0]
1522
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001523 return (stdout, stderr)
1524
Christian Heimesa342c012008-04-20 21:01:16 +00001525 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001526 """Send a signal to the process."""
1527 # Don't signal a process that we know has already died.
1528 if self.returncode is not None:
1529 return
Christian Heimesa342c012008-04-20 21:01:16 +00001530 if sig == signal.SIGTERM:
1531 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001532 elif sig == signal.CTRL_C_EVENT:
1533 os.kill(self.pid, signal.CTRL_C_EVENT)
1534 elif sig == signal.CTRL_BREAK_EVENT:
1535 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001536 else:
Brian Curtin19651362010-09-07 13:24:38 +00001537 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001538
1539 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001540 """Terminates the process."""
1541 # Don't terminate a process that we know has already died.
1542 if self.returncode is not None:
1543 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001544 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001545 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001546 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001547 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1548 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001549 rc = _winapi.GetExitCodeProcess(self._handle)
1550 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001551 raise
1552 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001553
1554 kill = terminate
1555
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001556 else:
1557 #
1558 # POSIX methods
1559 #
1560 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001561 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001562 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1563 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001564 p2cread, p2cwrite = -1, -1
1565 c2pread, c2pwrite = -1, -1
1566 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001567
Peter Astrandd38ddf42005-02-10 08:32:50 +00001568 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001569 pass
1570 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001571 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001572 elif stdin == DEVNULL:
1573 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001574 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001575 p2cread = stdin
1576 else:
1577 # Assuming file-like object
1578 p2cread = stdin.fileno()
1579
Peter Astrandd38ddf42005-02-10 08:32:50 +00001580 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001581 pass
1582 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001583 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001584 elif stdout == DEVNULL:
1585 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001586 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001587 c2pwrite = stdout
1588 else:
1589 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001590 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001591
Peter Astrandd38ddf42005-02-10 08:32:50 +00001592 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001593 pass
1594 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001595 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001596 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001597 if c2pwrite != -1:
1598 errwrite = c2pwrite
1599 else: # child's stdout is not set, use parent's stdout
1600 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001601 elif stderr == DEVNULL:
1602 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001603 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001604 errwrite = stderr
1605 else:
1606 # Assuming file-like object
1607 errwrite = stderr.fileno()
1608
1609 return (p2cread, p2cwrite,
1610 c2pread, c2pwrite,
1611 errread, errwrite)
1612
1613
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001614 def _posix_spawn(self, args, executable, env, restore_signals,
1615 p2cread, p2cwrite,
1616 c2pread, c2pwrite,
1617 errread, errwrite):
Victor Stinner8c349562019-01-16 23:38:06 +01001618 """Execute program using os.posix_spawn()."""
Victor Stinner9daecf32019-01-16 00:02:35 +01001619 if env is None:
1620 env = os.environ
1621
1622 kwargs = {}
1623 if restore_signals:
1624 # See _Py_RestoreSignals() in Python/pylifecycle.c
1625 sigset = []
1626 for signame in ('SIGPIPE', 'SIGXFZ', 'SIGXFSZ'):
1627 signum = getattr(signal, signame, None)
1628 if signum is not None:
1629 sigset.append(signum)
1630 kwargs['setsigdef'] = sigset
1631
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001632 file_actions = []
1633 for fd in (p2cwrite, c2pread, errread):
1634 if fd != -1:
1635 file_actions.append((os.POSIX_SPAWN_CLOSE, fd))
1636 for fd, fd2 in (
1637 (p2cread, 0),
1638 (c2pwrite, 1),
1639 (errwrite, 2),
1640 ):
1641 if fd != -1:
1642 file_actions.append((os.POSIX_SPAWN_DUP2, fd, fd2))
1643 if file_actions:
1644 kwargs['file_actions'] = file_actions
1645
Victor Stinner8c349562019-01-16 23:38:06 +01001646 self.pid = os.posix_spawn(executable, args, env, **kwargs)
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001647 self._child_created = True
1648
1649 self._close_pipe_fds(p2cread, p2cwrite,
1650 c2pread, c2pwrite,
1651 errread, errwrite)
Victor Stinner9daecf32019-01-16 00:02:35 +01001652
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001653 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001654 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001655 startupinfo, creationflags, shell,
1656 p2cread, p2cwrite,
1657 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001658 errread, errwrite,
Patrick McLean2b2ead72019-09-12 10:15:44 -07001659 restore_signals,
Gregory P. Smithf3751ef2019-10-12 13:24:56 -07001660 gid, gids, uid, umask,
Patrick McLean2b2ead72019-09-12 10:15:44 -07001661 start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001662 """Execute program (POSIX version)"""
1663
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001664 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001665 args = [args]
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +03001666 elif isinstance(args, os.PathLike):
1667 if shell:
1668 raise TypeError('path-like args is not allowed when '
1669 'shell is true')
1670 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001671 else:
Serhiy Storchakabe50a7b2018-02-28 01:03:46 +02001672 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001673
1674 if shell:
Xavier de Gayeb35fc622016-12-13 16:32:21 +01001675 # On Android the default shell is at '/system/bin/sh'.
1676 unix_shell = ('/system/bin/sh' if
1677 hasattr(sys, 'getandroidapilevel') else '/bin/sh')
1678 args = [unix_shell, "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001679 if executable:
1680 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001681
Peter Astrandd38ddf42005-02-10 08:32:50 +00001682 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001683 executable = args[0]
Victor Stinner9daecf32019-01-16 00:02:35 +01001684
Steve Dower60419a72019-06-24 08:42:54 -07001685 sys.audit("subprocess.Popen", executable, args, cwd, env)
1686
Victor Stinner9daecf32019-01-16 00:02:35 +01001687 if (_USE_POSIX_SPAWN
Victor Stinner8c349562019-01-16 23:38:06 +01001688 and os.path.dirname(executable)
Victor Stinner9daecf32019-01-16 00:02:35 +01001689 and preexec_fn is None
1690 and not close_fds
1691 and not pass_fds
1692 and cwd is None
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001693 and (p2cread == -1 or p2cread > 2)
1694 and (c2pwrite == -1 or c2pwrite > 2)
1695 and (errwrite == -1 or errwrite > 2)
Victor Stinnerfaca8552019-09-25 15:52:49 +02001696 and not start_new_session
1697 and gid is None
1698 and gids is None
Gregory P. Smithf3751ef2019-10-12 13:24:56 -07001699 and uid is None
1700 and umask < 0):
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001701 self._posix_spawn(args, executable, env, restore_signals,
1702 p2cread, p2cwrite,
1703 c2pread, c2pwrite,
1704 errread, errwrite)
Victor Stinner9daecf32019-01-16 00:02:35 +01001705 return
1706
Gregory P. Smith5591b022012-10-10 03:34:47 -07001707 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001708
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001709 # For transferring possible exec failure from child to parent.
1710 # Data format: "exception name:hex errno:description"
1711 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001712 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001713 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1714 low_fds_to_close = []
1715 while errpipe_write < 3:
1716 low_fds_to_close.append(errpipe_write)
1717 errpipe_write = os.dup(errpipe_write)
1718 for low_fd in low_fds_to_close:
1719 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001720 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001721 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001722 # We must avoid complex work that could involve
1723 # malloc or free in the child process to avoid
1724 # potential deadlocks, thus we do all this here.
1725 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001726
Victor Stinner372b8382011-06-21 17:24:21 +02001727 if env is not None:
Serhiy Storchakad174d242017-06-23 19:39:27 +03001728 env_list = []
1729 for k, v in env.items():
1730 k = os.fsencode(k)
1731 if b'=' in k:
1732 raise ValueError("illegal environment variable name")
1733 env_list.append(k + b'=' + os.fsencode(v))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001734 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001735 env_list = None # Use execv instead of execve.
1736 executable = os.fsencode(executable)
1737 if os.path.dirname(executable):
1738 executable_list = (executable,)
1739 else:
1740 # This matches the behavior of os._execvpe().
1741 executable_list = tuple(
1742 os.path.join(os.fsencode(dir), executable)
1743 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001744 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001745 fds_to_keep.add(errpipe_write)
1746 self.pid = _posixsubprocess.fork_exec(
1747 args, executable_list,
Serhiy Storchaka66bffd12017-04-19 21:12:46 +03001748 close_fds, tuple(sorted(map(int, fds_to_keep))),
1749 cwd, env_list,
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001750 p2cread, p2cwrite, c2pread, c2pwrite,
1751 errread, errwrite,
1752 errpipe_read, errpipe_write,
Patrick McLean2b2ead72019-09-12 10:15:44 -07001753 restore_signals, start_new_session,
Gregory P. Smithf3751ef2019-10-12 13:24:56 -07001754 gid, gids, uid, umask,
Patrick McLean2b2ead72019-09-12 10:15:44 -07001755 preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001756 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001757 finally:
1758 # be sure the FD is closed no matter what
1759 os.close(errpipe_write)
1760
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001761 self._close_pipe_fds(p2cread, p2cwrite,
1762 c2pread, c2pwrite,
1763 errread, errwrite)
Facundo Batista10706e22009-06-19 20:34:30 +00001764
1765 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001766 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001767 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001768 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001769 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001770 errpipe_data += part
1771 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001772 break
Facundo Batista10706e22009-06-19 20:34:30 +00001773 finally:
1774 # be sure the FD is closed no matter what
1775 os.close(errpipe_read)
1776
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001777 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001778 try:
Victor Stinnera58e2c52016-05-20 12:08:12 +02001779 pid, sts = os.waitpid(self.pid, 0)
1780 if pid == self.pid:
1781 self._handle_exitstatus(sts)
1782 else:
1783 self.returncode = sys.maxsize
Victor Stinnera5e881d2015-01-14 17:07:59 +01001784 except ChildProcessError:
1785 pass
Victor Stinnera58e2c52016-05-20 12:08:12 +02001786
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001787 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001788 exception_name, hex_errno, err_msg = (
1789 errpipe_data.split(b':', 2))
Ammar Askar3fc499b2017-09-06 02:41:30 -04001790 # The encoding here should match the encoding
1791 # written in by the subprocess implementations
1792 # like _posixsubprocess
1793 err_msg = err_msg.decode()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001794 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001795 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001796 hex_errno = b'0'
Ammar Askar3fc499b2017-09-06 02:41:30 -04001797 err_msg = 'Bad exception data from child: {!r}'.format(
1798 bytes(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001799 child_exception_type = getattr(
1800 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001801 SubprocessError)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001802 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001803 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001804 child_exec_never_called = (err_msg == "noexec")
1805 if child_exec_never_called:
1806 err_msg = ""
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001807 # The error must be from chdir(cwd).
1808 err_filename = cwd
1809 else:
1810 err_filename = orig_executable
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001811 if errno_num != 0:
1812 err_msg = os.strerror(errno_num)
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001813 raise child_exception_type(errno_num, err_msg, err_filename)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001814 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001815
1816
Brett Cannon84df1e62010-05-14 00:33:40 +00001817 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1818 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001819 _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
1820 _WSTOPSIG=os.WSTOPSIG):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001821 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001822 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001823 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001824 if _WIFSIGNALED(sts):
1825 self.returncode = -_WTERMSIG(sts)
1826 elif _WIFEXITED(sts):
1827 self.returncode = _WEXITSTATUS(sts)
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001828 elif _WIFSTOPPED(sts):
1829 self.returncode = -_WSTOPSIG(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001830 else:
1831 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001832 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001833
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001834
Brett Cannon84df1e62010-05-14 00:33:40 +00001835 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001836 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001837 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001838 attribute.
1839
1840 This method is called by __del__, so it cannot reference anything
1841 outside of the local scope (nor can any methods it calls).
1842
1843 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001844 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001845 if not self._waitpid_lock.acquire(False):
1846 # Something else is busy calling waitpid. Don't allow two
1847 # at once. We know nothing yet.
1848 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001849 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001850 if self.returncode is not None:
1851 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001852 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001853 if pid == self.pid:
1854 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001855 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001856 if _deadstate is not None:
1857 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001858 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001859 # This happens if SIGCLD is set to be ignored or
1860 # waiting for child processes has otherwise been
1861 # disabled for our process. This child is dead, we
1862 # can't get the status.
1863 # http://bugs.python.org/issue15756
1864 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001865 finally:
1866 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001867 return self.returncode
1868
1869
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001870 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001871 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001872 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001873 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001874 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001875 # This happens if SIGCLD is set to be ignored or waiting
1876 # for child processes has otherwise been disabled for our
1877 # process. This child is dead, we can't get the status.
1878 pid = self.pid
1879 sts = 0
1880 return (pid, sts)
1881
1882
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001883 def _wait(self, timeout):
1884 """Internal implementation of wait() on POSIX."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001885 if self.returncode is not None:
1886 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001887
Gregory P. Smith82604e02016-11-20 16:31:07 -08001888 if timeout is not None:
1889 endtime = _time() + timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001890 # Enter a busy loop if we have a timeout. This busy loop was
1891 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1892 delay = 0.0005 # 500 us -> initial delay of 1 ms
1893 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001894 if self._waitpid_lock.acquire(False):
1895 try:
1896 if self.returncode is not None:
1897 break # Another thread waited.
1898 (pid, sts) = self._try_wait(os.WNOHANG)
1899 assert pid == self.pid or pid == 0
1900 if pid == self.pid:
1901 self._handle_exitstatus(sts)
1902 break
1903 finally:
1904 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001905 remaining = self._remaining_time(endtime)
1906 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001907 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001908 delay = min(delay * 2, remaining, .05)
1909 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001910 else:
1911 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001912 with self._waitpid_lock:
1913 if self.returncode is not None:
1914 break # Another thread waited.
1915 (pid, sts) = self._try_wait(0)
1916 # Check the pid and loop as waitpid has been known to
1917 # return 0 even without WNOHANG in odd situations.
1918 # http://bugs.python.org/issue14396.
1919 if pid == self.pid:
1920 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001921 return self.returncode
1922
1923
Reid Kleckner2b228f02011-03-16 16:57:54 -04001924 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001925 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001926 # Flush stdio buffer. This might block, if the user has
1927 # been writing to .stdin in an uncontrolled fashion.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001928 try:
1929 self.stdin.flush()
1930 except BrokenPipeError:
1931 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001932 if not input:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001933 try:
1934 self.stdin.close()
1935 except BrokenPipeError:
1936 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001937
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001938 stdout = None
1939 stderr = None
1940
1941 # Only create this mapping if we haven't already.
1942 if not self._communication_started:
1943 self._fileobj2output = {}
1944 if self.stdout:
1945 self._fileobj2output[self.stdout] = []
1946 if self.stderr:
1947 self._fileobj2output[self.stderr] = []
1948
1949 if self.stdout:
1950 stdout = self._fileobj2output[self.stdout]
1951 if self.stderr:
1952 stderr = self._fileobj2output[self.stderr]
1953
1954 self._save_input(input)
1955
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001956 if self._input:
1957 input_view = memoryview(self._input)
1958
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001959 with _PopenSelector() as selector:
1960 if self.stdin and input:
1961 selector.register(self.stdin, selectors.EVENT_WRITE)
1962 if self.stdout:
1963 selector.register(self.stdout, selectors.EVENT_READ)
1964 if self.stderr:
1965 selector.register(self.stderr, selectors.EVENT_READ)
1966
1967 while selector.get_map():
1968 timeout = self._remaining_time(endtime)
1969 if timeout is not None and timeout < 0:
Gregory P. Smith580d2782019-09-11 04:23:05 -05001970 self._check_timeout(endtime, orig_timeout,
1971 stdout, stderr,
1972 skip_check_and_raise=True)
1973 raise RuntimeError( # Impossible :)
1974 '_check_timeout(..., skip_check_and_raise=True) '
1975 'failed to raise TimeoutExpired.')
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001976
1977 ready = selector.select(timeout)
Gregory P. Smith580d2782019-09-11 04:23:05 -05001978 self._check_timeout(endtime, orig_timeout, stdout, stderr)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001979
1980 # XXX Rewrite these to use non-blocking I/O on the file
1981 # objects; they are no longer using C stdio!
1982
1983 for key, events in ready:
1984 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001985 chunk = input_view[self._input_offset :
1986 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001987 try:
1988 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001989 except BrokenPipeError:
1990 selector.unregister(key.fileobj)
1991 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001992 else:
1993 if self._input_offset >= len(self._input):
1994 selector.unregister(key.fileobj)
1995 key.fileobj.close()
1996 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001997 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001998 if not data:
1999 selector.unregister(key.fileobj)
2000 key.fileobj.close()
2001 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04002002
2003 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00002004
2005 # All data exchanged. Translate lists into strings.
2006 if stdout is not None:
2007 stdout = b''.join(stdout)
2008 if stderr is not None:
2009 stderr = b''.join(stderr)
2010
2011 # Translate newlines, if requested.
2012 # This also turns bytes into strings.
andyclegg7fed7bd2017-10-23 03:01:19 +01002013 if self.text_mode:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00002014 if stdout is not None:
2015 stdout = self._translate_newlines(stdout,
Steve Dower050acae2016-09-06 20:16:17 -07002016 self.stdout.encoding,
2017 self.stdout.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00002018 if stderr is not None:
2019 stderr = self._translate_newlines(stderr,
Steve Dower050acae2016-09-06 20:16:17 -07002020 self.stderr.encoding,
2021 self.stderr.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00002022
Gregory P. Smithd06fa472009-07-04 02:46:54 +00002023 return (stdout, stderr)
2024
2025
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03002026 def _save_input(self, input):
2027 # This method is called from the _communicate_with_*() methods
2028 # so that if we time out while communicating, we can continue
2029 # sending input if we retry.
2030 if self.stdin and self._input is None:
2031 self._input_offset = 0
2032 self._input = input
andyclegg7fed7bd2017-10-23 03:01:19 +01002033 if input is not None and self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -07002034 self._input = self._input.encode(self.stdin.encoding,
2035 self.stdin.errors)
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03002036
2037
Christian Heimesa342c012008-04-20 21:01:16 +00002038 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08002039 """Send a signal to the process."""
2040 # Skip signalling a process that we know has already died.
2041 if self.returncode is None:
2042 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00002043
2044 def terminate(self):
2045 """Terminate the process with SIGTERM
2046 """
2047 self.send_signal(signal.SIGTERM)
2048
2049 def kill(self):
2050 """Kill the process with SIGKILL
2051 """
2052 self.send_signal(signal.SIGKILL)