blob: 13600c28cf71170b216ab5df055aa1402df60b32 [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
Guido van Rossum48b069a2020-04-07 09:50:06 -070055import types
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000056
Patrick McLean2b2ead72019-09-12 10:15:44 -070057try:
58 import pwd
59except ImportError:
60 pwd = None
61try:
62 import grp
63except ImportError:
64 grp = None
Zachary Ware880d42a2018-09-10 16:16:08 -070065
66__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
67 "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL",
68 "SubprocessError", "TimeoutExpired", "CompletedProcess"]
69 # NOTE: We intentionally exclude list2cmdline as it is
70 # considered an internal implementation detail. issue10838.
71
72try:
73 import msvcrt
74 import _winapi
75 _mswindows = True
76except ModuleNotFoundError:
77 _mswindows = False
78 import _posixsubprocess
79 import select
80 import selectors
81else:
82 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
83 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
84 STD_ERROR_HANDLE, SW_HIDE,
85 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW,
86 ABOVE_NORMAL_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS,
87 HIGH_PRIORITY_CLASS, IDLE_PRIORITY_CLASS,
88 NORMAL_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS,
89 CREATE_NO_WINDOW, DETACHED_PROCESS,
90 CREATE_DEFAULT_ERROR_MODE, CREATE_BREAKAWAY_FROM_JOB)
91
92 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
93 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
94 "STD_ERROR_HANDLE", "SW_HIDE",
95 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW",
96 "STARTUPINFO",
97 "ABOVE_NORMAL_PRIORITY_CLASS", "BELOW_NORMAL_PRIORITY_CLASS",
98 "HIGH_PRIORITY_CLASS", "IDLE_PRIORITY_CLASS",
99 "NORMAL_PRIORITY_CLASS", "REALTIME_PRIORITY_CLASS",
100 "CREATE_NO_WINDOW", "DETACHED_PROCESS",
101 "CREATE_DEFAULT_ERROR_MODE", "CREATE_BREAKAWAY_FROM_JOB"])
102
103
Peter Astrand454f7672005-01-01 09:36:35 +0000104# Exception classes used by this module.
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400105class SubprocessError(Exception): pass
106
107
108class CalledProcessError(SubprocessError):
Martin Panter4afdca02016-10-25 22:20:48 +0000109 """Raised when run() is called with check=True and the process
110 returns a non-zero exit status.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)d6da7602016-06-03 06:14:06 +0000111
Martin Panter4afdca02016-10-25 22:20:48 +0000112 Attributes:
113 cmd, returncode, stdout, stderr, output
Georg Brandlf9734072008-12-07 15:30:06 +0000114 """
Gregory P. Smith6e730002015-04-14 16:14:25 -0700115 def __init__(self, returncode, cmd, output=None, stderr=None):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000116 self.returncode = returncode
117 self.cmd = cmd
Georg Brandlf9734072008-12-07 15:30:06 +0000118 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -0700119 self.stderr = stderr
120
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000121 def __str__(self):
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)d6da7602016-06-03 06:14:06 +0000122 if self.returncode and self.returncode < 0:
123 try:
124 return "Command '%s' died with %r." % (
125 self.cmd, signal.Signals(-self.returncode))
126 except ValueError:
127 return "Command '%s' died with unknown signal %d." % (
128 self.cmd, -self.returncode)
129 else:
130 return "Command '%s' returned non-zero exit status %d." % (
131 self.cmd, self.returncode)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000132
Gregory P. Smith6e730002015-04-14 16:14:25 -0700133 @property
134 def stdout(self):
135 """Alias for output attribute, to match stderr"""
136 return self.output
137
138 @stdout.setter
139 def stdout(self, value):
140 # There's no obvious reason to set this, but allow it anyway so
141 # .stdout is a transparent alias for .output
142 self.output = value
143
Peter Astrand454f7672005-01-01 09:36:35 +0000144
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400145class TimeoutExpired(SubprocessError):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400146 """This exception is raised when the timeout expires while waiting for a
147 child process.
Martin Panter4afdca02016-10-25 22:20:48 +0000148
149 Attributes:
150 cmd, output, stdout, stderr, timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400151 """
Gregory P. Smith6e730002015-04-14 16:14:25 -0700152 def __init__(self, cmd, timeout, output=None, stderr=None):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400153 self.cmd = cmd
Reid Kleckner2b228f02011-03-16 16:57:54 -0400154 self.timeout = timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400155 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -0700156 self.stderr = stderr
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400157
158 def __str__(self):
159 return ("Command '%s' timed out after %s seconds" %
160 (self.cmd, self.timeout))
161
Gregory P. Smith6e730002015-04-14 16:14:25 -0700162 @property
163 def stdout(self):
164 return self.output
165
166 @stdout.setter
167 def stdout(self, value):
168 # There's no obvious reason to set this, but allow it anyway so
169 # .stdout is a transparent alias for .output
170 self.output = value
171
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400172
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700173if _mswindows:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000174 class STARTUPINFO:
Subhendu Ghoshae160bb2017-02-25 20:29:05 +0530175 def __init__(self, *, dwFlags=0, hStdInput=None, hStdOutput=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200176 hStdError=None, wShowWindow=0, lpAttributeList=None):
Subhendu Ghoshae160bb2017-02-25 20:29:05 +0530177 self.dwFlags = dwFlags
178 self.hStdInput = hStdInput
179 self.hStdOutput = hStdOutput
180 self.hStdError = hStdError
181 self.wShowWindow = wShowWindow
Segev Finerb2a60832017-12-18 11:28:19 +0200182 self.lpAttributeList = lpAttributeList or {"handle_list": []}
Victor Stinner483422f2018-07-05 22:54:17 +0200183
184 def copy(self):
185 attr_list = self.lpAttributeList.copy()
186 if 'handle_list' in attr_list:
187 attr_list['handle_list'] = list(attr_list['handle_list'])
188
189 return STARTUPINFO(dwFlags=self.dwFlags,
190 hStdInput=self.hStdInput,
191 hStdOutput=self.hStdOutput,
192 hStdError=self.hStdError,
193 wShowWindow=self.wShowWindow,
194 lpAttributeList=attr_list)
195
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200196
197 class Handle(int):
198 closed = False
199
200 def Close(self, CloseHandle=_winapi.CloseHandle):
201 if not self.closed:
202 self.closed = True
203 CloseHandle(self)
204
205 def Detach(self):
206 if not self.closed:
207 self.closed = True
208 return int(self)
209 raise ValueError("already closed")
210
211 def __repr__(self):
Serhiy Storchaka465e60e2014-07-25 23:36:00 +0300212 return "%s(%d)" % (self.__class__.__name__, int(self))
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200213
214 __del__ = Close
Zachary Ware880d42a2018-09-10 16:16:08 -0700215else:
216 # When select or poll has indicated that the file is writable,
217 # we can write up to _PIPE_BUF bytes without risk of blocking.
218 # POSIX defines PIPE_BUF as >= 512.
219 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
220
221 # poll/select have the advantage of not requiring any extra file
222 # descriptor, contrarily to epoll/kqueue (also, they require a single
223 # syscall).
224 if hasattr(selectors, 'PollSelector'):
225 _PopenSelector = selectors.PollSelector
226 else:
227 _PopenSelector = selectors.SelectSelector
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200228
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000229
Ruslan Kuprieiev042821a2019-06-28 19:12:16 +0300230if _mswindows:
231 # On Windows we just need to close `Popen._handle` when we no longer need
232 # it, so that the kernel can free it. `Popen._handle` gets closed
233 # implicitly when the `Popen` instance is finalized (see `Handle.__del__`,
234 # which is calling `CloseHandle` as requested in [1]), so there is nothing
235 # for `_cleanup` to do.
236 #
237 # [1] https://docs.microsoft.com/en-us/windows/desktop/ProcThread/
238 # creating-processes
239 _active = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000240
Ruslan Kuprieiev042821a2019-06-28 19:12:16 +0300241 def _cleanup():
242 pass
243else:
244 # This lists holds Popen instances for which the underlying process had not
245 # exited at the time its __del__ method got called: those processes are
246 # wait()ed for synchronously from _cleanup() when a new Popen object is
247 # created, to avoid zombie processes.
248 _active = []
249
250 def _cleanup():
251 if _active is None:
252 return
253 for inst in _active[:]:
254 res = inst._internal_poll(_deadstate=sys.maxsize)
255 if res is not None:
256 try:
257 _active.remove(inst)
258 except ValueError:
259 # This can happen if two threads create a new Popen instance.
260 # It's harmless that it was already removed, so ignore.
261 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000262
263PIPE = -1
264STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200265DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000266
267
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200268# XXX This function is only used by multiprocessing and the test suite,
269# but it's here so that it can be imported when Python is compiled without
270# threads.
271
Victor Stinner9def2842016-01-18 12:15:08 +0100272def _optim_args_from_interpreter_flags():
273 """Return a list of command-line arguments reproducing the current
274 optimization settings in sys.flags."""
275 args = []
276 value = sys.flags.optimize
277 if value > 0:
278 args.append('-' + 'O' * value)
279 return args
280
281
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200282def _args_from_interpreter_flags():
283 """Return a list of command-line arguments reproducing the current
Victor Stinner747f48e2017-12-12 22:59:48 +0100284 settings in sys.flags, sys.warnoptions and sys._xoptions."""
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200285 flag_opt_map = {
286 'debug': 'd',
287 # 'inspect': 'i',
288 # 'interactive': 'i',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200289 'dont_write_bytecode': 'B',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200290 'no_site': 'S',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200291 'verbose': 'v',
292 'bytes_warning': 'b',
293 'quiet': 'q',
Victor Stinner9def2842016-01-18 12:15:08 +0100294 # -O is handled in _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200295 }
Victor Stinner9def2842016-01-18 12:15:08 +0100296 args = _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200297 for flag, opt in flag_opt_map.items():
298 v = getattr(sys.flags, flag)
299 if v > 0:
300 args.append('-' + opt * v)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800301
Victor Stinner9de36322018-11-23 17:54:20 +0100302 if sys.flags.isolated:
303 args.append('-I')
304 else:
305 if sys.flags.ignore_environment:
306 args.append('-E')
307 if sys.flags.no_user_site:
308 args.append('-s')
309
Victor Stinnerf39b6742017-11-20 15:24:56 -0800310 # -W options
Victor Stinner747f48e2017-12-12 22:59:48 +0100311 warnopts = sys.warnoptions[:]
312 bytes_warning = sys.flags.bytes_warning
313 xoptions = getattr(sys, '_xoptions', {})
314 dev_mode = ('dev' in xoptions)
315
316 if bytes_warning > 1:
317 warnopts.remove("error::BytesWarning")
318 elif bytes_warning:
319 warnopts.remove("default::BytesWarning")
320 if dev_mode:
321 warnopts.remove('default')
322 for opt in warnopts:
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200323 args.append('-W' + opt)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800324
325 # -X options
Victor Stinner747f48e2017-12-12 22:59:48 +0100326 if dev_mode:
Victor Stinnerf39b6742017-11-20 15:24:56 -0800327 args.extend(('-X', 'dev'))
328 for opt in ('faulthandler', 'tracemalloc', 'importtime',
Victor Stinner1def7752020-04-23 03:03:24 +0200329 'showrefcount', 'utf8', 'oldparser'):
Victor Stinnerf39b6742017-11-20 15:24:56 -0800330 if opt in xoptions:
331 value = xoptions[opt]
332 if value is True:
333 arg = opt
334 else:
335 arg = '%s=%s' % (opt, value)
336 args.extend(('-X', arg))
337
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200338 return args
339
340
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400341def call(*popenargs, timeout=None, **kwargs):
342 """Run command with arguments. Wait for command to complete or
343 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000344
345 The arguments are the same as for the Popen constructor. Example:
346
347 retcode = call(["ls", "-l"])
348 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200349 with Popen(*popenargs, **kwargs) as p:
350 try:
351 return p.wait(timeout=timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800352 except: # Including KeyboardInterrupt, wait handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200353 p.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800354 # We don't call p.wait() again as p.__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200355 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000356
357
Peter Astrand454f7672005-01-01 09:36:35 +0000358def check_call(*popenargs, **kwargs):
359 """Run command with arguments. Wait for command to complete. If
360 the exit code was zero then return, otherwise raise
361 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000362 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000363
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400364 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000365
366 check_call(["ls", "-l"])
367 """
368 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000369 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000370 cmd = kwargs.get("args")
371 if cmd is None:
372 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000373 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000374 return 0
375
376
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400377def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700378 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000379
380 If the exit code was non-zero it raises a CalledProcessError. The
381 CalledProcessError object will have the return code in the returncode
382 attribute and output in the output attribute.
383
384 The arguments are the same as for the Popen constructor. Example:
385
386 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000387 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000388
389 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000390 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000391
392 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000393 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000394 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000395 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700396
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300397 There is an additional optional argument, "input", allowing you to
398 pass a string to the subprocess's stdin. If you use this argument
399 you may not also use the Popen constructor's "stdin" argument, as
400 it too will be used internally. Example:
401
402 >>> check_output(["sed", "-e", "s/foo/bar/"],
403 ... input=b"when in the course of fooman events\n")
404 b'when in the course of barman events\n'
405
andyclegg7fed7bd2017-10-23 03:01:19 +0100406 By default, all communication is in bytes, and therefore any "input"
Matthias182e1d12019-09-10 15:51:09 +0200407 should be bytes, and the return value will be bytes. If in text mode,
andyclegg7fed7bd2017-10-23 03:01:19 +0100408 any "input" should be a string, and the return value will be a string
409 decoded according to locale encoding, or by "encoding" if set. Text mode
410 is triggered by setting any of text, encoding, errors or universal_newlines.
Georg Brandlf9734072008-12-07 15:30:06 +0000411 """
412 if 'stdout' in kwargs:
413 raise ValueError('stdout argument not allowed, it will be overridden.')
Gregory P. Smith6e730002015-04-14 16:14:25 -0700414
415 if 'input' in kwargs and kwargs['input'] is None:
416 # Explicitly passing input=None was previously equivalent to passing an
417 # empty string. That is maintained here for backwards compatibility.
418 kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
419
420 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
421 **kwargs).stdout
422
423
424class CompletedProcess(object):
425 """A process that has finished running.
426
427 This is returned by run().
428
429 Attributes:
430 args: The list or str args passed to run().
431 returncode: The exit code of the process, negative for signals.
432 stdout: The standard output (None if not captured).
433 stderr: The standard error (None if not captured).
434 """
435 def __init__(self, args, returncode, stdout=None, stderr=None):
436 self.args = args
437 self.returncode = returncode
438 self.stdout = stdout
439 self.stderr = stderr
440
441 def __repr__(self):
442 args = ['args={!r}'.format(self.args),
443 'returncode={!r}'.format(self.returncode)]
444 if self.stdout is not None:
445 args.append('stdout={!r}'.format(self.stdout))
446 if self.stderr is not None:
447 args.append('stderr={!r}'.format(self.stderr))
448 return "{}({})".format(type(self).__name__, ', '.join(args))
449
Guido van Rossum48b069a2020-04-07 09:50:06 -0700450 __class_getitem__ = classmethod(types.GenericAlias)
Batuhan Taşkaya4dc5a9d2019-12-30 19:02:04 +0300451
452
Gregory P. Smith6e730002015-04-14 16:14:25 -0700453 def check_returncode(self):
454 """Raise CalledProcessError if the exit code is non-zero."""
455 if self.returncode:
456 raise CalledProcessError(self.returncode, self.args, self.stdout,
457 self.stderr)
458
459
Bo Baylesce0f33d2018-01-30 00:40:39 -0600460def run(*popenargs,
461 input=None, capture_output=False, timeout=None, check=False, **kwargs):
Gregory P. Smith6e730002015-04-14 16:14:25 -0700462 """Run command with arguments and return a CompletedProcess instance.
463
464 The returned instance will have attributes args, returncode, stdout and
465 stderr. By default, stdout and stderr are not captured, and those attributes
466 will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.
467
468 If check is True and the exit code was non-zero, it raises a
469 CalledProcessError. The CalledProcessError object will have the return code
470 in the returncode attribute, and output & stderr attributes if those streams
471 were captured.
472
473 If timeout is given, and the process takes too long, a TimeoutExpired
474 exception will be raised.
475
476 There is an optional argument "input", allowing you to
andyclegg7fed7bd2017-10-23 03:01:19 +0100477 pass bytes or a string to the subprocess's stdin. If you use this argument
Gregory P. Smith6e730002015-04-14 16:14:25 -0700478 you may not also use the Popen constructor's "stdin" argument, as
479 it will be used internally.
480
andyclegg7fed7bd2017-10-23 03:01:19 +0100481 By default, all communication is in bytes, and therefore any "input" should
482 be bytes, and the stdout and stderr will be bytes. If in text mode, any
483 "input" should be a string, and stdout and stderr will be strings decoded
484 according to locale encoding, or by "encoding" if set. Text mode is
485 triggered by setting any of text, encoding, errors or universal_newlines.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700486
andyclegg7fed7bd2017-10-23 03:01:19 +0100487 The other arguments are the same as for the Popen constructor.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700488 """
489 if input is not None:
Rémi Lapeyre8cc605a2019-06-08 16:56:24 +0200490 if kwargs.get('stdin') is not None:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300491 raise ValueError('stdin and input arguments may not both be used.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300492 kwargs['stdin'] = PIPE
Gregory P. Smith6e730002015-04-14 16:14:25 -0700493
Bo Baylesce0f33d2018-01-30 00:40:39 -0600494 if capture_output:
Rémi Lapeyre8cc605a2019-06-08 16:56:24 +0200495 if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None:
Bo Baylesce0f33d2018-01-30 00:40:39 -0600496 raise ValueError('stdout and stderr arguments may not be used '
497 'with capture_output.')
498 kwargs['stdout'] = PIPE
499 kwargs['stderr'] = PIPE
500
Gregory P. Smith6e730002015-04-14 16:14:25 -0700501 with Popen(*popenargs, **kwargs) as process:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200502 try:
Gregory P. Smith6e730002015-04-14 16:14:25 -0700503 stdout, stderr = process.communicate(input, timeout=timeout)
Gregory P. Smith580d2782019-09-11 04:23:05 -0500504 except TimeoutExpired as exc:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200505 process.kill()
Gregory P. Smith580d2782019-09-11 04:23:05 -0500506 if _mswindows:
507 # Windows accumulates the output in a single blocking
508 # read() call run on child threads, with the timeout
509 # being done in a join() on those threads. communicate()
510 # _after_ kill() is required to collect that and add it
511 # to the exception.
512 exc.stdout, exc.stderr = process.communicate()
513 else:
514 # POSIX _communicate already populated the output so
515 # far into the TimeoutExpired exception.
516 process.wait()
517 raise
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800518 except: # Including KeyboardInterrupt, communicate handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200519 process.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800520 # We don't call process.wait() as .__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200521 raise
522 retcode = process.poll()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700523 if check and retcode:
524 raise CalledProcessError(retcode, process.args,
525 output=stdout, stderr=stderr)
526 return CompletedProcess(process.args, retcode, stdout, stderr)
Peter Astrand454f7672005-01-01 09:36:35 +0000527
528
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000529def list2cmdline(seq):
530 """
531 Translate a sequence of arguments into a command line
532 string, using the same rules as the MS C runtime:
533
534 1) Arguments are delimited by white space, which is either a
535 space or a tab.
536
537 2) A string surrounded by double quotation marks is
538 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000539 contained within. A quoted string can be embedded in an
540 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000541
542 3) A double quotation mark preceded by a backslash is
543 interpreted as a literal double quotation mark.
544
545 4) Backslashes are interpreted literally, unless they
546 immediately precede a double quotation mark.
547
548 5) If backslashes immediately precede a double quotation mark,
549 every pair of backslashes is interpreted as a literal
550 backslash. If the number of backslashes is odd, the last
551 backslash escapes the next double quotation mark as
552 described in rule 3.
553 """
554
555 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000556 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
557 # or search http://msdn.microsoft.com for
558 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000559 result = []
560 needquote = False
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +0300561 for arg in map(os.fsdecode, seq):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000562 bs_buf = []
563
564 # Add a space to separate this argument from the others
565 if result:
566 result.append(' ')
567
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000568 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000569 if needquote:
570 result.append('"')
571
572 for c in arg:
573 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000574 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000575 bs_buf.append(c)
576 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000577 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000578 result.append('\\' * len(bs_buf)*2)
579 bs_buf = []
580 result.append('\\"')
581 else:
582 # Normal char
583 if bs_buf:
584 result.extend(bs_buf)
585 bs_buf = []
586 result.append(c)
587
Christian Heimesfdab48e2008-01-20 09:06:41 +0000588 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000589 if bs_buf:
590 result.extend(bs_buf)
591
592 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000593 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000594 result.append('"')
595
596 return ''.join(result)
597
598
Brett Cannona23810f2008-05-26 19:04:21 +0000599# Various tools for executing commands and looking at their output and status.
600#
Brett Cannona23810f2008-05-26 19:04:21 +0000601
602def getstatusoutput(cmd):
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700603 """Return (exitcode, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000604
Tim Golden60798142013-11-05 12:57:25 +0000605 Execute the string 'cmd' in a shell with 'check_output' and
Steve Dower050acae2016-09-06 20:16:17 -0700606 return a 2-tuple (status, output). The locale encoding is used
607 to decode the output and process newlines.
Tim Golden60798142013-11-05 12:57:25 +0000608
609 A trailing newline is stripped from the output.
610 The exit status for the command can be interpreted
611 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000612
613 >>> import subprocess
614 >>> subprocess.getstatusoutput('ls /bin/ls')
615 (0, '/bin/ls')
616 >>> subprocess.getstatusoutput('cat /bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700617 (1, 'cat: /bin/junk: No such file or directory')
Brett Cannona23810f2008-05-26 19:04:21 +0000618 >>> subprocess.getstatusoutput('/bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700619 (127, 'sh: /bin/junk: not found')
620 >>> subprocess.getstatusoutput('/bin/kill $$')
621 (-15, '')
Brett Cannona23810f2008-05-26 19:04:21 +0000622 """
Tim Goldene0041752013-11-03 12:53:17 +0000623 try:
andyclegg7fed7bd2017-10-23 03:01:19 +0100624 data = check_output(cmd, shell=True, text=True, stderr=STDOUT)
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700625 exitcode = 0
Tim Goldene0041752013-11-03 12:53:17 +0000626 except CalledProcessError as ex:
627 data = ex.output
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700628 exitcode = ex.returncode
Tim Goldene0041752013-11-03 12:53:17 +0000629 if data[-1:] == '\n':
630 data = data[:-1]
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700631 return exitcode, data
Brett Cannona23810f2008-05-26 19:04:21 +0000632
633def getoutput(cmd):
634 """Return output (stdout or stderr) of executing cmd in a shell.
635
636 Like getstatusoutput(), except the exit status is ignored and the return
637 value is a string containing the command's output. Example:
638
639 >>> import subprocess
640 >>> subprocess.getoutput('ls /bin/ls')
641 '/bin/ls'
642 """
643 return getstatusoutput(cmd)[1]
644
645
Victor Stinner9daecf32019-01-16 00:02:35 +0100646def _use_posix_spawn():
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800647 """Check if posix_spawn() can be used for subprocess.
Victor Stinner9daecf32019-01-16 00:02:35 +0100648
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800649 subprocess requires a posix_spawn() implementation that properly reports
650 errors to the parent process, & sets errno on the following failures:
Victor Stinner9daecf32019-01-16 00:02:35 +0100651
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800652 * Process attribute actions failed.
653 * File actions failed.
654 * exec() failed.
Victor Stinner9daecf32019-01-16 00:02:35 +0100655
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800656 Prefer an implementation which can use vfork() in some cases for best
657 performance.
Victor Stinner9daecf32019-01-16 00:02:35 +0100658 """
659 if _mswindows or not hasattr(os, 'posix_spawn'):
660 # os.posix_spawn() is not available
661 return False
662
663 if sys.platform == 'darwin':
664 # posix_spawn() is a syscall on macOS and properly reports errors
665 return True
666
667 # Check libc name and runtime libc version
668 try:
669 ver = os.confstr('CS_GNU_LIBC_VERSION')
670 # parse 'glibc 2.28' as ('glibc', (2, 28))
671 parts = ver.split(maxsplit=1)
672 if len(parts) != 2:
673 # reject unknown format
674 raise ValueError
675 libc = parts[0]
676 version = tuple(map(int, parts[1].split('.')))
677
678 if sys.platform == 'linux' and libc == 'glibc' and version >= (2, 24):
679 # glibc 2.24 has a new Linux posix_spawn implementation using vfork
680 # which properly reports errors to the parent process.
681 return True
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800682 # Note: Don't use the implementation in earlier glibc because it doesn't
Victor Stinner9daecf32019-01-16 00:02:35 +0100683 # use vfork (even if glibc 2.26 added a pipe to properly report errors
684 # to the parent process).
685 except (AttributeError, ValueError, OSError):
686 # os.confstr() or CS_GNU_LIBC_VERSION value not available
687 pass
688
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800689 # By default, assume that posix_spawn() does not properly report errors.
Victor Stinner9daecf32019-01-16 00:02:35 +0100690 return False
691
692
693_USE_POSIX_SPAWN = _use_posix_spawn()
694
695
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000696class Popen(object):
Martin Panter4afdca02016-10-25 22:20:48 +0000697 """ Execute a child program in a new process.
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200698
Martin Panter4afdca02016-10-25 22:20:48 +0000699 For a complete description of the arguments see the Python documentation.
700
701 Arguments:
702 args: A string, or a sequence of program arguments.
703
704 bufsize: supplied as the buffering argument to the open() function when
705 creating the stdin/stdout/stderr pipe file objects
706
707 executable: A replacement program to execute.
708
709 stdin, stdout and stderr: These specify the executed programs' standard
710 input, standard output and standard error file handles, respectively.
711
712 preexec_fn: (POSIX only) An object to be called in the child process
713 just before the child is executed.
714
715 close_fds: Controls closing or inheriting of file descriptors.
716
717 shell: If true, the command will be executed through the shell.
718
719 cwd: Sets the current directory before the child is executed.
720
721 env: Defines the environment variables for the new process.
722
andyclegg7fed7bd2017-10-23 03:01:19 +0100723 text: If true, decode stdin, stdout and stderr using the given encoding
724 (if set) or the system default otherwise.
725
726 universal_newlines: Alias of text, provided for backwards compatibility.
Martin Panter4afdca02016-10-25 22:20:48 +0000727
728 startupinfo and creationflags (Windows only)
729
730 restore_signals (POSIX only)
731
732 start_new_session (POSIX only)
733
Patrick McLean2b2ead72019-09-12 10:15:44 -0700734 group (POSIX only)
735
736 extra_groups (POSIX only)
737
738 user (POSIX only)
739
Gregory P. Smithf3751ef2019-10-12 13:24:56 -0700740 umask (POSIX only)
741
Martin Panter4afdca02016-10-25 22:20:48 +0000742 pass_fds (POSIX only)
743
Martin Panter3dca6242016-10-25 23:41:42 +0000744 encoding and errors: Text mode encoding and error handling to use for
745 file objects stdin, stdout and stderr.
746
Martin Panter4afdca02016-10-25 22:20:48 +0000747 Attributes:
748 stdin, stdout, stderr, pid, returncode
749 """
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200750 _child_created = False # Set here since __del__ checks it
751
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700752 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000753 stdin=None, stdout=None, stderr=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200754 preexec_fn=None, close_fds=True,
andyclegg7fed7bd2017-10-23 03:01:19 +0100755 shell=False, cwd=None, env=None, universal_newlines=None,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000756 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000757 restore_signals=True, start_new_session=False,
Patrick McLean2b2ead72019-09-12 10:15:44 -0700758 pass_fds=(), *, user=None, group=None, extra_groups=None,
Gregory P. Smithf3751ef2019-10-12 13:24:56 -0700759 encoding=None, errors=None, text=None, umask=-1):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000760 """Create new Popen instance."""
761 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700762 # Held while anything is calling waitpid before returncode has been
763 # updated to prevent clobbering returncode if wait() or poll() are
764 # called from multiple threads at once. After acquiring the lock,
765 # code must re-check self.returncode to see if another thread just
766 # finished a waitpid() call.
767 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000768
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400769 self._input = None
770 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000771 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700772 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000773 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000774 raise TypeError("bufsize must be an integer")
775
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700776 if _mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000777 if preexec_fn is not None:
778 raise ValueError("preexec_fn is not supported on Windows "
779 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000780 else:
781 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000782 if pass_fds and not close_fds:
783 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
784 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000785 if startupinfo is not None:
786 raise ValueError("startupinfo is only supported on Windows "
787 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000788 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000789 raise ValueError("creationflags is only supported on Windows "
790 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000791
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400792 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000793 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000794 self.stdout = None
795 self.stderr = None
796 self.pid = None
797 self.returncode = None
Steve Dower050acae2016-09-06 20:16:17 -0700798 self.encoding = encoding
799 self.errors = errors
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000800
andyclegg7fed7bd2017-10-23 03:01:19 +0100801 # Validate the combinations of text and universal_newlines
802 if (text is not None and universal_newlines is not None
803 and bool(universal_newlines) != bool(text)):
804 raise SubprocessError('Cannot disambiguate when both text '
805 'and universal_newlines are supplied but '
806 'different. Pass one or the other.')
807
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000808 # Input and output objects. The general principle is like
809 # this:
810 #
811 # Parent Child
812 # ------ -----
813 # p2cwrite ---stdin---> p2cread
814 # c2pread <--stdout--- c2pwrite
815 # errread <--stderr--- errwrite
816 #
817 # On POSIX, the child objects are file descriptors. On
818 # Windows, these are Windows file handles. The parent objects
819 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000820 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000821 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000822
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000823 (p2cread, p2cwrite,
824 c2pread, c2pwrite,
825 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
826
Antoine Pitrouc9982322011-01-04 19:07:07 +0000827 # We wrap OS handles *before* launching the child, otherwise a
828 # quickly terminating child could make our fds unwrappable
829 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000830
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700831 if _mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000832 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000833 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000834 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000835 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000836 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000837 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000838
andyclegg7fed7bd2017-10-23 03:01:19 +0100839 self.text_mode = encoding or errors or text or universal_newlines
Tim Peterse718f612004-10-12 21:51:32 +0000840
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800841 # How long to resume waiting on a child after the first ^C.
842 # There is no right value for this. The purpose is to be polite
843 # yet remain good for interactive users trying to exit a tool.
844 self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber()
845
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700846 self._closed_child_pipe_fds = False
Steve Dower050acae2016-09-06 20:16:17 -0700847
Alexey Izbysheva2670562018-10-20 03:22:31 +0300848 if self.text_mode:
849 if bufsize == 1:
850 line_buffering = True
851 # Use the default buffer size for the underlying binary streams
852 # since they don't support line buffering.
853 bufsize = -1
854 else:
855 line_buffering = False
856
Patrick McLean2b2ead72019-09-12 10:15:44 -0700857 gid = None
858 if group is not None:
859 if not hasattr(os, 'setregid'):
860 raise ValueError("The 'group' parameter is not supported on the "
861 "current platform")
862
863 elif isinstance(group, str):
864 if grp is None:
865 raise ValueError("The group parameter cannot be a string "
866 "on systems without the grp module")
867
868 gid = grp.getgrnam(group).gr_gid
869 elif isinstance(group, int):
870 gid = group
871 else:
872 raise TypeError("Group must be a string or an integer, not {}"
873 .format(type(group)))
874
875 if gid < 0:
876 raise ValueError(f"Group ID cannot be negative, got {gid}")
877
878 gids = None
879 if extra_groups is not None:
880 if not hasattr(os, 'setgroups'):
881 raise ValueError("The 'extra_groups' parameter is not "
882 "supported on the current platform")
883
884 elif isinstance(extra_groups, str):
885 raise ValueError("Groups must be a list, not a string")
886
887 gids = []
888 for extra_group in extra_groups:
889 if isinstance(extra_group, str):
890 if grp is None:
891 raise ValueError("Items in extra_groups cannot be "
892 "strings on systems without the "
893 "grp module")
894
895 gids.append(grp.getgrnam(extra_group).gr_gid)
896 elif isinstance(extra_group, int):
897 gids.append(extra_group)
898 else:
899 raise TypeError("Items in extra_groups must be a string "
900 "or integer, not {}"
901 .format(type(extra_group)))
902
903 # make sure that the gids are all positive here so we can do less
904 # checking in the C code
905 for gid_check in gids:
906 if gid_check < 0:
907 raise ValueError(f"Group ID cannot be negative, got {gid_check}")
908
909 uid = None
910 if user is not None:
911 if not hasattr(os, 'setreuid'):
912 raise ValueError("The 'user' parameter is not supported on "
913 "the current platform")
914
915 elif isinstance(user, str):
916 if pwd is None:
917 raise ValueError("The user parameter cannot be a string "
918 "on systems without the pwd module")
919
920 uid = pwd.getpwnam(user).pw_uid
921 elif isinstance(user, int):
922 uid = user
923 else:
924 raise TypeError("User must be a string or an integer")
925
926 if uid < 0:
927 raise ValueError(f"User ID cannot be negative, got {uid}")
928
Antoine Pitrouc9982322011-01-04 19:07:07 +0000929 try:
Steve Dower050acae2016-09-06 20:16:17 -0700930 if p2cwrite != -1:
931 self.stdin = io.open(p2cwrite, 'wb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100932 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700933 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
Alexey Izbysheva2670562018-10-20 03:22:31 +0300934 line_buffering=line_buffering,
Steve Dower050acae2016-09-06 20:16:17 -0700935 encoding=encoding, errors=errors)
936 if c2pread != -1:
937 self.stdout = io.open(c2pread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100938 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700939 self.stdout = io.TextIOWrapper(self.stdout,
940 encoding=encoding, errors=errors)
941 if errread != -1:
942 self.stderr = io.open(errread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100943 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700944 self.stderr = io.TextIOWrapper(self.stderr,
945 encoding=encoding, errors=errors)
946
Antoine Pitrouc9982322011-01-04 19:07:07 +0000947 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300948 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000949 startupinfo, creationflags, shell,
950 p2cread, p2cwrite,
951 c2pread, c2pwrite,
952 errread, errwrite,
Patrick McLean2b2ead72019-09-12 10:15:44 -0700953 restore_signals,
Gregory P. Smithf3751ef2019-10-12 13:24:56 -0700954 gid, gids, uid, umask,
Patrick McLean2b2ead72019-09-12 10:15:44 -0700955 start_new_session)
Antoine Pitrouc9982322011-01-04 19:07:07 +0000956 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800957 # Cleanup if the child failed starting.
958 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000959 try:
960 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200961 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800962 pass # Ignore EBADF or other errors.
963
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700964 if not self._closed_child_pipe_fds:
965 to_close = []
966 if stdin == PIPE:
967 to_close.append(p2cread)
968 if stdout == PIPE:
969 to_close.append(c2pwrite)
970 if stderr == PIPE:
971 to_close.append(errwrite)
972 if hasattr(self, '_devnull'):
973 to_close.append(self._devnull)
974 for fd in to_close:
975 try:
Segev Finer4d385172017-08-18 16:18:13 +0300976 if _mswindows and isinstance(fd, Handle):
977 fd.Close()
978 else:
979 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700980 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700981 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800982
Antoine Pitrouc9982322011-01-04 19:07:07 +0000983 raise
984
Andrey Doroschenko645005e2019-11-17 17:08:31 +0300985 def __repr__(self):
986 obj_repr = (
987 f"<{self.__class__.__name__}: "
988 f"returncode: {self.returncode} args: {list(self.args)!r}>"
989 )
990 if len(obj_repr) > 80:
991 obj_repr = obj_repr[:76] + "...>"
992 return obj_repr
993
Guido van Rossum48b069a2020-04-07 09:50:06 -0700994 __class_getitem__ = classmethod(types.GenericAlias)
Batuhan Taşkaya4dc5a9d2019-12-30 19:02:04 +0300995
andyclegg7fed7bd2017-10-23 03:01:19 +0100996 @property
997 def universal_newlines(self):
998 # universal_newlines as retained as an alias of text_mode for API
luzpaza5293b42017-11-05 07:37:50 -0600999 # compatibility. bpo-31756
andyclegg7fed7bd2017-10-23 03:01:19 +01001000 return self.text_mode
1001
1002 @universal_newlines.setter
1003 def universal_newlines(self, universal_newlines):
1004 self.text_mode = bool(universal_newlines)
1005
Steve Dower050acae2016-09-06 20:16:17 -07001006 def _translate_newlines(self, data, encoding, errors):
1007 data = data.decode(encoding, errors)
Andrew Svetlov82860712012-08-19 22:13:41 +03001008 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001009
Brian Curtin79cdb662010-12-03 02:46:02 +00001010 def __enter__(self):
1011 return self
1012
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001013 def __exit__(self, exc_type, value, traceback):
Brian Curtin79cdb662010-12-03 02:46:02 +00001014 if self.stdout:
1015 self.stdout.close()
1016 if self.stderr:
1017 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +02001018 try: # Flushing a BufferedWriter may raise an error
1019 if self.stdin:
1020 self.stdin.close()
1021 finally:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001022 if exc_type == KeyboardInterrupt:
1023 # https://bugs.python.org/issue25942
1024 # In the case of a KeyboardInterrupt we assume the SIGINT
1025 # was also already sent to our child processes. We can't
1026 # block indefinitely as that is not user friendly.
1027 # If we have not already waited a brief amount of time in
1028 # an interrupted .wait() or .communicate() call, do so here
1029 # for consistency.
1030 if self._sigint_wait_secs > 0:
1031 try:
1032 self._wait(timeout=self._sigint_wait_secs)
1033 except TimeoutExpired:
1034 pass
1035 self._sigint_wait_secs = 0 # Note that this has been done.
1036 return # resume the KeyboardInterrupt
1037
Serhiy Storchakaab900c22015-02-28 12:43:08 +02001038 # Wait for the process to terminate, to avoid zombies.
1039 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001040
Victor Stinner9505b032017-01-06 10:44:44 +01001041 def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn):
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001042 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001043 # We didn't get to successfully create a child process.
1044 return
Victor Stinner5a48e212016-05-20 12:11:15 +02001045 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001046 # Not reading subprocess exit status creates a zombie process which
Victor Stinnerc206f1e2016-06-14 16:42:59 +02001047 # is only destroyed at the parent python process exit
Victor Stinner9505b032017-01-06 10:44:44 +01001048 _warn("subprocess %s is still running" % self.pid,
1049 ResourceWarning, source=self)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001050 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +00001051 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001052 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001053 # Child is still running, keep us alive until we can wait on it.
1054 _active.append(self)
1055
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001056 def _get_devnull(self):
1057 if not hasattr(self, '_devnull'):
1058 self._devnull = os.open(os.devnull, os.O_RDWR)
1059 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001060
Victor Stinnera5e881d2015-01-14 17:07:59 +01001061 def _stdin_write(self, input):
1062 if input:
1063 try:
1064 self.stdin.write(input)
1065 except BrokenPipeError:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001066 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +02001067 except OSError as exc:
1068 if exc.errno == errno.EINVAL:
1069 # bpo-19612, bpo-30418: On Windows, stdin.write() fails
1070 # with EINVAL if the child process exited or if the child
1071 # process is still running but closed the pipe.
Victor Stinnera5e881d2015-01-14 17:07:59 +01001072 pass
1073 else:
1074 raise
Victor Stinnerd52aa312017-06-08 17:30:39 +02001075
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001076 try:
1077 self.stdin.close()
1078 except BrokenPipeError:
1079 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +02001080 except OSError as exc:
1081 if exc.errno == errno.EINVAL:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001082 pass
1083 else:
1084 raise
Victor Stinnera5e881d2015-01-14 17:07:59 +01001085
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001086 def communicate(self, input=None, timeout=None):
Joel Schaerer88031a92017-09-13 21:11:20 +02001087 """Interact with process: Send data to stdin and close it.
1088 Read data from stdout and stderr, until end-of-file is
1089 reached. Wait for process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +00001090
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -04001091 The optional "input" argument should be data to be sent to the
andyclegg7fed7bd2017-10-23 03:01:19 +01001092 child process, or None, if no data should be sent to the child.
1093 communicate() returns a tuple (stdout, stderr).
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -04001094
andyclegg7fed7bd2017-10-23 03:01:19 +01001095 By default, all communication is in bytes, and therefore any
1096 "input" should be bytes, and the (stdout, stderr) will be bytes.
1097 If in text mode (indicated by self.text_mode), any "input" should
1098 be a string, and (stdout, stderr) will be strings decoded
1099 according to locale encoding, or by "encoding" if set. Text mode
1100 is triggered by setting any of text, encoding, errors or
1101 universal_newlines.
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -04001102 """
Peter Astrand23109f02005-03-03 20:28:59 +00001103
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001104 if self._communication_started and input:
1105 raise ValueError("Cannot send input after starting communication")
1106
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001107 # Optimization: If we are not worried about timeouts, we haven't
1108 # started communicating, and we have one or zero pipes, using select()
1109 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +02001110 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001111 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +00001112 stdout = None
1113 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +00001114 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001115 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +00001116 elif self.stdout:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001117 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001118 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +00001119 elif self.stderr:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001120 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001121 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +00001122 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +02001123 else:
1124 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +02001125 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +02001126 else:
1127 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +00001128
Victor Stinner7a8d0812011-04-05 13:13:08 +02001129 try:
1130 stdout, stderr = self._communicate(input, endtime, timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001131 except KeyboardInterrupt:
1132 # https://bugs.python.org/issue25942
1133 # See the detailed comment in .wait().
1134 if timeout is not None:
1135 sigint_timeout = min(self._sigint_wait_secs,
1136 self._remaining_time(endtime))
1137 else:
1138 sigint_timeout = self._sigint_wait_secs
1139 self._sigint_wait_secs = 0 # nothing else should wait.
1140 try:
1141 self._wait(timeout=sigint_timeout)
1142 except TimeoutExpired:
1143 pass
1144 raise # resume the KeyboardInterrupt
1145
Victor Stinner7a8d0812011-04-05 13:13:08 +02001146 finally:
1147 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001148
Victor Stinner7a8d0812011-04-05 13:13:08 +02001149 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001150
1151 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +00001152
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001153
Georg Brandl6aa2d1f2008-08-12 08:35:52 +00001154 def poll(self):
Martin Panter4afdca02016-10-25 22:20:48 +00001155 """Check if child process has terminated. Set and return returncode
1156 attribute."""
Georg Brandl6aa2d1f2008-08-12 08:35:52 +00001157 return self._internal_poll()
1158
1159
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001160 def _remaining_time(self, endtime):
1161 """Convenience for _communicate when computing timeouts."""
1162 if endtime is None:
1163 return None
1164 else:
Victor Stinner949d8c92012-05-30 13:30:32 +02001165 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001166
1167
Gregory P. Smith580d2782019-09-11 04:23:05 -05001168 def _check_timeout(self, endtime, orig_timeout, stdout_seq, stderr_seq,
1169 skip_check_and_raise=False):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001170 """Convenience for checking if a timeout has expired."""
1171 if endtime is None:
1172 return
Gregory P. Smith580d2782019-09-11 04:23:05 -05001173 if skip_check_and_raise or _time() > endtime:
1174 raise TimeoutExpired(
1175 self.args, orig_timeout,
1176 output=b''.join(stdout_seq) if stdout_seq else None,
1177 stderr=b''.join(stderr_seq) if stderr_seq else None)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001178
1179
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001180 def wait(self, timeout=None):
1181 """Wait for child process to terminate; returns self.returncode."""
1182 if timeout is not None:
1183 endtime = _time() + timeout
1184 try:
1185 return self._wait(timeout=timeout)
1186 except KeyboardInterrupt:
1187 # https://bugs.python.org/issue25942
1188 # The first keyboard interrupt waits briefly for the child to
1189 # exit under the common assumption that it also received the ^C
1190 # generated SIGINT and will exit rapidly.
1191 if timeout is not None:
1192 sigint_timeout = min(self._sigint_wait_secs,
1193 self._remaining_time(endtime))
1194 else:
1195 sigint_timeout = self._sigint_wait_secs
1196 self._sigint_wait_secs = 0 # nothing else should wait.
1197 try:
1198 self._wait(timeout=sigint_timeout)
1199 except TimeoutExpired:
1200 pass
1201 raise # resume the KeyboardInterrupt
1202
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001203 def _close_pipe_fds(self,
1204 p2cread, p2cwrite,
1205 c2pread, c2pwrite,
1206 errread, errwrite):
1207 # self._devnull is not always defined.
1208 devnull_fd = getattr(self, '_devnull', None)
1209
Giampaolo Rodolabafa8482019-01-29 22:14:24 +01001210 with contextlib.ExitStack() as stack:
1211 if _mswindows:
1212 if p2cread != -1:
1213 stack.callback(p2cread.Close)
1214 if c2pwrite != -1:
1215 stack.callback(c2pwrite.Close)
1216 if errwrite != -1:
1217 stack.callback(errwrite.Close)
1218 else:
1219 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
1220 stack.callback(os.close, p2cread)
1221 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
1222 stack.callback(os.close, c2pwrite)
1223 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
1224 stack.callback(os.close, errwrite)
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001225
Giampaolo Rodolabafa8482019-01-29 22:14:24 +01001226 if devnull_fd is not None:
1227 stack.callback(os.close, devnull_fd)
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001228
1229 # Prevent a double close of these handles/fds from __init__ on error.
1230 self._closed_child_pipe_fds = True
1231
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -07001232 if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001233 #
1234 # Windows methods
1235 #
1236 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001237 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001238 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1239 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001240 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001241 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +00001242
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001243 p2cread, p2cwrite = -1, -1
1244 c2pread, c2pwrite = -1, -1
1245 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001246
Peter Astrandd38ddf42005-02-10 08:32:50 +00001247 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001248 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001249 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001250 p2cread, _ = _winapi.CreatePipe(None, 0)
1251 p2cread = Handle(p2cread)
1252 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001253 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001254 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
1255 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001256 elif stdin == DEVNULL:
1257 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001258 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001259 p2cread = msvcrt.get_osfhandle(stdin)
1260 else:
1261 # Assuming file-like object
1262 p2cread = msvcrt.get_osfhandle(stdin.fileno())
1263 p2cread = self._make_inheritable(p2cread)
1264
Peter Astrandd38ddf42005-02-10 08:32:50 +00001265 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001266 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001267 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001268 _, c2pwrite = _winapi.CreatePipe(None, 0)
1269 c2pwrite = Handle(c2pwrite)
1270 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001271 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001272 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
1273 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001274 elif stdout == DEVNULL:
1275 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001276 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001277 c2pwrite = msvcrt.get_osfhandle(stdout)
1278 else:
1279 # Assuming file-like object
1280 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1281 c2pwrite = self._make_inheritable(c2pwrite)
1282
Peter Astrandd38ddf42005-02-10 08:32:50 +00001283 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001284 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001285 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001286 _, errwrite = _winapi.CreatePipe(None, 0)
1287 errwrite = Handle(errwrite)
1288 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001289 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001290 errread, errwrite = _winapi.CreatePipe(None, 0)
1291 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001292 elif stderr == STDOUT:
1293 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001294 elif stderr == DEVNULL:
1295 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001296 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001297 errwrite = msvcrt.get_osfhandle(stderr)
1298 else:
1299 # Assuming file-like object
1300 errwrite = msvcrt.get_osfhandle(stderr.fileno())
1301 errwrite = self._make_inheritable(errwrite)
1302
1303 return (p2cread, p2cwrite,
1304 c2pread, c2pwrite,
1305 errread, errwrite)
1306
1307
1308 def _make_inheritable(self, handle):
1309 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001310 h = _winapi.DuplicateHandle(
1311 _winapi.GetCurrentProcess(), handle,
1312 _winapi.GetCurrentProcess(), 0, 1,
1313 _winapi.DUPLICATE_SAME_ACCESS)
1314 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001315
1316
Segev Finerb2a60832017-12-18 11:28:19 +02001317 def _filter_handle_list(self, handle_list):
1318 """Filter out console handles that can't be used
1319 in lpAttributeList["handle_list"] and make sure the list
1320 isn't empty. This also removes duplicate handles."""
1321 # An handle with it's lowest two bits set might be a special console
1322 # handle that if passed in lpAttributeList["handle_list"], will
1323 # cause it to fail.
1324 return list({handle for handle in handle_list
1325 if handle & 0x3 != 0x3
1326 or _winapi.GetFileType(handle) !=
1327 _winapi.FILE_TYPE_CHAR})
1328
1329
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001330 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001331 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001332 startupinfo, creationflags, shell,
1333 p2cread, p2cwrite,
1334 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001335 errread, errwrite,
Patrick McLean2b2ead72019-09-12 10:15:44 -07001336 unused_restore_signals,
1337 unused_gid, unused_gids, unused_uid,
Gregory P. Smithf3751ef2019-10-12 13:24:56 -07001338 unused_umask,
Patrick McLean2b2ead72019-09-12 10:15:44 -07001339 unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001340 """Execute program (MS Windows version)"""
1341
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001342 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001343
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +03001344 if isinstance(args, str):
1345 pass
1346 elif isinstance(args, bytes):
1347 if shell:
1348 raise TypeError('bytes args is not allowed on Windows')
1349 args = list2cmdline([args])
1350 elif isinstance(args, os.PathLike):
1351 if shell:
1352 raise TypeError('path-like args is not allowed when '
1353 'shell is true')
1354 args = list2cmdline([args])
1355 else:
Serhiy Storchakabe50a7b2018-02-28 01:03:46 +02001356 args = list2cmdline(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001357
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +03001358 if executable is not None:
1359 executable = os.fsdecode(executable)
1360
Peter Astrandc1d65362004-11-07 14:30:34 +00001361 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001362 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001363 startupinfo = STARTUPINFO()
Victor Stinner483422f2018-07-05 22:54:17 +02001364 else:
1365 # bpo-34044: Copy STARTUPINFO since it is modified above,
1366 # so the caller can reuse it multiple times.
1367 startupinfo = startupinfo.copy()
Segev Finerb2a60832017-12-18 11:28:19 +02001368
1369 use_std_handles = -1 not in (p2cread, c2pwrite, errwrite)
1370 if use_std_handles:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001371 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001372 startupinfo.hStdInput = p2cread
1373 startupinfo.hStdOutput = c2pwrite
1374 startupinfo.hStdError = errwrite
1375
Segev Finerb2a60832017-12-18 11:28:19 +02001376 attribute_list = startupinfo.lpAttributeList
1377 have_handle_list = bool(attribute_list and
1378 "handle_list" in attribute_list and
1379 attribute_list["handle_list"])
1380
1381 # If we were given an handle_list or need to create one
1382 if have_handle_list or (use_std_handles and close_fds):
1383 if attribute_list is None:
1384 attribute_list = startupinfo.lpAttributeList = {}
1385 handle_list = attribute_list["handle_list"] = \
1386 list(attribute_list.get("handle_list", []))
1387
1388 if use_std_handles:
1389 handle_list += [int(p2cread), int(c2pwrite), int(errwrite)]
1390
1391 handle_list[:] = self._filter_handle_list(handle_list)
1392
1393 if handle_list:
1394 if not close_fds:
1395 warnings.warn("startupinfo.lpAttributeList['handle_list'] "
1396 "overriding close_fds", RuntimeWarning)
1397
1398 # When using the handle_list we always request to inherit
1399 # handles but the only handles that will be inherited are
1400 # the ones in the handle_list
1401 close_fds = False
1402
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001403 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001404 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1405 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001406 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001407 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001408
Steve Dower60419a72019-06-24 08:42:54 -07001409 if cwd is not None:
1410 cwd = os.fsdecode(cwd)
1411
1412 sys.audit("subprocess.Popen", executable, args, cwd, env)
1413
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001414 # Start the process
1415 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001416 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001417 # no special security
1418 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001419 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001420 creationflags,
1421 env,
Steve Dower60419a72019-06-24 08:42:54 -07001422 cwd,
Tim Peterse8374a52004-10-13 03:15:00 +00001423 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001424 finally:
1425 # Child is launched. Close the parent's copy of those pipe
1426 # handles that only the child should have open. You need
1427 # to make sure that no handles to the write end of the
1428 # output pipe are maintained in this process or else the
1429 # pipe will not close when the child process exits and the
1430 # ReadFile will hang.
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001431 self._close_pipe_fds(p2cread, p2cwrite,
1432 c2pread, c2pwrite,
1433 errread, errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001434
1435 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001436 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001437 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001438 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001439 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001440
Brett Cannon84df1e62010-05-14 00:33:40 +00001441 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001442 _WaitForSingleObject=_winapi.WaitForSingleObject,
1443 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1444 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001445 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001446 attribute.
1447
1448 This method is called by __del__, so it can only refer to objects
1449 in its local scope.
1450
1451 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001452 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001453 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1454 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001455 return self.returncode
1456
1457
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001458 def _wait(self, timeout):
1459 """Internal implementation of wait() on Windows."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001460 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001461 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001462 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001463 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001464 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001465 # API note: Returns immediately if timeout_millis == 0.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001466 result = _winapi.WaitForSingleObject(self._handle,
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001467 timeout_millis)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001468 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001469 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001470 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001471 return self.returncode
1472
1473
1474 def _readerthread(self, fh, buffer):
1475 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001476 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001477
1478
Reid Kleckner2b228f02011-03-16 16:57:54 -04001479 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001480 # Start reader threads feeding into a list hanging off of this
1481 # object, unless they've already been started.
1482 if self.stdout and not hasattr(self, "_stdout_buff"):
1483 self._stdout_buff = []
1484 self.stdout_thread = \
1485 threading.Thread(target=self._readerthread,
1486 args=(self.stdout, self._stdout_buff))
1487 self.stdout_thread.daemon = True
1488 self.stdout_thread.start()
1489 if self.stderr and not hasattr(self, "_stderr_buff"):
1490 self._stderr_buff = []
1491 self.stderr_thread = \
1492 threading.Thread(target=self._readerthread,
1493 args=(self.stderr, self._stderr_buff))
1494 self.stderr_thread.daemon = True
1495 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001496
1497 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001498 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001499
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001500 # Wait for the reader threads, or time out. If we time out, the
1501 # threads remain reading and the fds left open in case the user
1502 # calls communicate again.
1503 if self.stdout is not None:
1504 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001505 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001506 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001507 if self.stderr is not None:
1508 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001509 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001510 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001511
1512 # Collect the output from and close both pipes, now that we know
1513 # both have been read successfully.
1514 stdout = None
1515 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001516 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001517 stdout = self._stdout_buff
1518 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001519 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001520 stderr = self._stderr_buff
1521 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001522
1523 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001524 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001525 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001526 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001527 stderr = stderr[0]
1528
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001529 return (stdout, stderr)
1530
Christian Heimesa342c012008-04-20 21:01:16 +00001531 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001532 """Send a signal to the process."""
1533 # Don't signal a process that we know has already died.
1534 if self.returncode is not None:
1535 return
Christian Heimesa342c012008-04-20 21:01:16 +00001536 if sig == signal.SIGTERM:
1537 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001538 elif sig == signal.CTRL_C_EVENT:
1539 os.kill(self.pid, signal.CTRL_C_EVENT)
1540 elif sig == signal.CTRL_BREAK_EVENT:
1541 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001542 else:
Brian Curtin19651362010-09-07 13:24:38 +00001543 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001544
1545 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001546 """Terminates the process."""
1547 # Don't terminate a process that we know has already died.
1548 if self.returncode is not None:
1549 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001550 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001551 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001552 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001553 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1554 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001555 rc = _winapi.GetExitCodeProcess(self._handle)
1556 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001557 raise
1558 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001559
1560 kill = terminate
1561
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001562 else:
1563 #
1564 # POSIX methods
1565 #
1566 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001567 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001568 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1569 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001570 p2cread, p2cwrite = -1, -1
1571 c2pread, c2pwrite = -1, -1
1572 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001573
Peter Astrandd38ddf42005-02-10 08:32:50 +00001574 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001575 pass
1576 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001577 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001578 elif stdin == DEVNULL:
1579 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001580 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001581 p2cread = stdin
1582 else:
1583 # Assuming file-like object
1584 p2cread = stdin.fileno()
1585
Peter Astrandd38ddf42005-02-10 08:32:50 +00001586 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001587 pass
1588 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001589 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001590 elif stdout == DEVNULL:
1591 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001592 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001593 c2pwrite = stdout
1594 else:
1595 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001596 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001597
Peter Astrandd38ddf42005-02-10 08:32:50 +00001598 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001599 pass
1600 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001601 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001602 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001603 if c2pwrite != -1:
1604 errwrite = c2pwrite
1605 else: # child's stdout is not set, use parent's stdout
1606 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001607 elif stderr == DEVNULL:
1608 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001609 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001610 errwrite = stderr
1611 else:
1612 # Assuming file-like object
1613 errwrite = stderr.fileno()
1614
1615 return (p2cread, p2cwrite,
1616 c2pread, c2pwrite,
1617 errread, errwrite)
1618
1619
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001620 def _posix_spawn(self, args, executable, env, restore_signals,
1621 p2cread, p2cwrite,
1622 c2pread, c2pwrite,
1623 errread, errwrite):
Victor Stinner8c349562019-01-16 23:38:06 +01001624 """Execute program using os.posix_spawn()."""
Victor Stinner9daecf32019-01-16 00:02:35 +01001625 if env is None:
1626 env = os.environ
1627
1628 kwargs = {}
1629 if restore_signals:
1630 # See _Py_RestoreSignals() in Python/pylifecycle.c
1631 sigset = []
1632 for signame in ('SIGPIPE', 'SIGXFZ', 'SIGXFSZ'):
1633 signum = getattr(signal, signame, None)
1634 if signum is not None:
1635 sigset.append(signum)
1636 kwargs['setsigdef'] = sigset
1637
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001638 file_actions = []
1639 for fd in (p2cwrite, c2pread, errread):
1640 if fd != -1:
1641 file_actions.append((os.POSIX_SPAWN_CLOSE, fd))
1642 for fd, fd2 in (
1643 (p2cread, 0),
1644 (c2pwrite, 1),
1645 (errwrite, 2),
1646 ):
1647 if fd != -1:
1648 file_actions.append((os.POSIX_SPAWN_DUP2, fd, fd2))
1649 if file_actions:
1650 kwargs['file_actions'] = file_actions
1651
Victor Stinner8c349562019-01-16 23:38:06 +01001652 self.pid = os.posix_spawn(executable, args, env, **kwargs)
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001653 self._child_created = True
1654
1655 self._close_pipe_fds(p2cread, p2cwrite,
1656 c2pread, c2pwrite,
1657 errread, errwrite)
Victor Stinner9daecf32019-01-16 00:02:35 +01001658
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001659 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001660 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001661 startupinfo, creationflags, shell,
1662 p2cread, p2cwrite,
1663 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001664 errread, errwrite,
Patrick McLean2b2ead72019-09-12 10:15:44 -07001665 restore_signals,
Gregory P. Smithf3751ef2019-10-12 13:24:56 -07001666 gid, gids, uid, umask,
Patrick McLean2b2ead72019-09-12 10:15:44 -07001667 start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001668 """Execute program (POSIX version)"""
1669
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001670 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001671 args = [args]
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +03001672 elif isinstance(args, os.PathLike):
1673 if shell:
1674 raise TypeError('path-like args is not allowed when '
1675 'shell is true')
1676 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001677 else:
Serhiy Storchakabe50a7b2018-02-28 01:03:46 +02001678 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001679
1680 if shell:
Xavier de Gayeb35fc622016-12-13 16:32:21 +01001681 # On Android the default shell is at '/system/bin/sh'.
1682 unix_shell = ('/system/bin/sh' if
1683 hasattr(sys, 'getandroidapilevel') else '/bin/sh')
1684 args = [unix_shell, "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001685 if executable:
1686 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001687
Peter Astrandd38ddf42005-02-10 08:32:50 +00001688 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001689 executable = args[0]
Victor Stinner9daecf32019-01-16 00:02:35 +01001690
Steve Dower60419a72019-06-24 08:42:54 -07001691 sys.audit("subprocess.Popen", executable, args, cwd, env)
1692
Victor Stinner9daecf32019-01-16 00:02:35 +01001693 if (_USE_POSIX_SPAWN
Victor Stinner8c349562019-01-16 23:38:06 +01001694 and os.path.dirname(executable)
Victor Stinner9daecf32019-01-16 00:02:35 +01001695 and preexec_fn is None
1696 and not close_fds
1697 and not pass_fds
1698 and cwd is None
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001699 and (p2cread == -1 or p2cread > 2)
1700 and (c2pwrite == -1 or c2pwrite > 2)
1701 and (errwrite == -1 or errwrite > 2)
Victor Stinnerfaca8552019-09-25 15:52:49 +02001702 and not start_new_session
1703 and gid is None
1704 and gids is None
Gregory P. Smithf3751ef2019-10-12 13:24:56 -07001705 and uid is None
1706 and umask < 0):
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001707 self._posix_spawn(args, executable, env, restore_signals,
1708 p2cread, p2cwrite,
1709 c2pread, c2pwrite,
1710 errread, errwrite)
Victor Stinner9daecf32019-01-16 00:02:35 +01001711 return
1712
Gregory P. Smith5591b022012-10-10 03:34:47 -07001713 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001714
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001715 # For transferring possible exec failure from child to parent.
1716 # Data format: "exception name:hex errno:description"
1717 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001718 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001719 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1720 low_fds_to_close = []
1721 while errpipe_write < 3:
1722 low_fds_to_close.append(errpipe_write)
1723 errpipe_write = os.dup(errpipe_write)
1724 for low_fd in low_fds_to_close:
1725 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001726 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001727 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001728 # We must avoid complex work that could involve
1729 # malloc or free in the child process to avoid
1730 # potential deadlocks, thus we do all this here.
1731 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001732
Victor Stinner372b8382011-06-21 17:24:21 +02001733 if env is not None:
Serhiy Storchakad174d242017-06-23 19:39:27 +03001734 env_list = []
1735 for k, v in env.items():
1736 k = os.fsencode(k)
1737 if b'=' in k:
1738 raise ValueError("illegal environment variable name")
1739 env_list.append(k + b'=' + os.fsencode(v))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001740 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001741 env_list = None # Use execv instead of execve.
1742 executable = os.fsencode(executable)
1743 if os.path.dirname(executable):
1744 executable_list = (executable,)
1745 else:
1746 # This matches the behavior of os._execvpe().
1747 executable_list = tuple(
1748 os.path.join(os.fsencode(dir), executable)
1749 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001750 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001751 fds_to_keep.add(errpipe_write)
1752 self.pid = _posixsubprocess.fork_exec(
1753 args, executable_list,
Serhiy Storchaka66bffd12017-04-19 21:12:46 +03001754 close_fds, tuple(sorted(map(int, fds_to_keep))),
1755 cwd, env_list,
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001756 p2cread, p2cwrite, c2pread, c2pwrite,
1757 errread, errwrite,
1758 errpipe_read, errpipe_write,
Patrick McLean2b2ead72019-09-12 10:15:44 -07001759 restore_signals, start_new_session,
Gregory P. Smithf3751ef2019-10-12 13:24:56 -07001760 gid, gids, uid, umask,
Patrick McLean2b2ead72019-09-12 10:15:44 -07001761 preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001762 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001763 finally:
1764 # be sure the FD is closed no matter what
1765 os.close(errpipe_write)
1766
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001767 self._close_pipe_fds(p2cread, p2cwrite,
1768 c2pread, c2pwrite,
1769 errread, errwrite)
Facundo Batista10706e22009-06-19 20:34:30 +00001770
1771 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001772 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001773 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001774 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001775 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001776 errpipe_data += part
1777 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001778 break
Facundo Batista10706e22009-06-19 20:34:30 +00001779 finally:
1780 # be sure the FD is closed no matter what
1781 os.close(errpipe_read)
1782
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001783 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001784 try:
Victor Stinnera58e2c52016-05-20 12:08:12 +02001785 pid, sts = os.waitpid(self.pid, 0)
1786 if pid == self.pid:
1787 self._handle_exitstatus(sts)
1788 else:
1789 self.returncode = sys.maxsize
Victor Stinnera5e881d2015-01-14 17:07:59 +01001790 except ChildProcessError:
1791 pass
Victor Stinnera58e2c52016-05-20 12:08:12 +02001792
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001793 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001794 exception_name, hex_errno, err_msg = (
1795 errpipe_data.split(b':', 2))
Ammar Askar3fc499b2017-09-06 02:41:30 -04001796 # The encoding here should match the encoding
1797 # written in by the subprocess implementations
1798 # like _posixsubprocess
1799 err_msg = err_msg.decode()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001800 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001801 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001802 hex_errno = b'0'
Ammar Askar3fc499b2017-09-06 02:41:30 -04001803 err_msg = 'Bad exception data from child: {!r}'.format(
1804 bytes(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001805 child_exception_type = getattr(
1806 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001807 SubprocessError)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001808 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001809 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001810 child_exec_never_called = (err_msg == "noexec")
1811 if child_exec_never_called:
1812 err_msg = ""
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001813 # The error must be from chdir(cwd).
1814 err_filename = cwd
1815 else:
1816 err_filename = orig_executable
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001817 if errno_num != 0:
1818 err_msg = os.strerror(errno_num)
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001819 raise child_exception_type(errno_num, err_msg, err_filename)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001820 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001821
1822
Victor Stinner65a796e2020-04-01 18:49:29 +02001823 def _handle_exitstatus(self, sts,
1824 waitstatus_to_exitcode=os.waitstatus_to_exitcode,
1825 _WIFSTOPPED=os.WIFSTOPPED,
1826 _WSTOPSIG=os.WSTOPSIG):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001827 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001828 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001829 # refer to anything outside of its local scope.
Victor Stinner65a796e2020-04-01 18:49:29 +02001830 if _WIFSTOPPED(sts):
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001831 self.returncode = -_WSTOPSIG(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001832 else:
Victor Stinner65a796e2020-04-01 18:49:29 +02001833 self.returncode = waitstatus_to_exitcode(sts)
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)
Alex Rebertd3ae95e2020-01-22 18:28:31 -05001962 if self.stdout and not self.stdout.closed:
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001963 selector.register(self.stdout, selectors.EVENT_READ)
Alex Rebertd3ae95e2020-01-22 18:28:31 -05001964 if self.stderr and not self.stderr.closed:
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001965 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."""
Victor Stinnere85a3052020-01-15 17:38:55 +01002040 # bpo-38630: Polling reduces the risk of sending a signal to the
2041 # wrong process if the process completed, the Popen.returncode
2042 # attribute is still None, and the pid has been reassigned
2043 # (recycled) to a new different process. This race condition can
2044 # happens in two cases.
2045 #
2046 # Case 1. Thread A calls Popen.poll(), thread B calls
2047 # Popen.send_signal(). In thread A, waitpid() succeed and returns
2048 # the exit status. Thread B calls kill() because poll() in thread A
2049 # did not set returncode yet. Calling poll() in thread B prevents
2050 # the race condition thanks to Popen._waitpid_lock.
2051 #
2052 # Case 2. waitpid(pid, 0) has been called directly, without
2053 # using Popen methods: returncode is still None is this case.
2054 # Calling Popen.poll() will set returncode to a default value,
2055 # since waitpid() fails with ProcessLookupError.
2056 self.poll()
2057 if self.returncode is not None:
2058 # Skip signalling a process that we know has already died.
2059 return
2060
2061 # The race condition can still happen if the race condition
2062 # described above happens between the returncode test
2063 # and the kill() call.
2064 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00002065
2066 def terminate(self):
2067 """Terminate the process with SIGTERM
2068 """
2069 self.send_signal(signal.SIGTERM)
2070
2071 def kill(self):
2072 """Kill the process with SIGKILL
2073 """
2074 self.send_signal(signal.SIGKILL)