blob: 85b9ea07854669a61322920663d4d22272dbb6e8 [file] [log] [blame]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001# subprocess - Subprocesses with accessible I/O streams
2#
Tim Peterse718f612004-10-12 21:51:32 +00003# For more information about this module, see PEP 324.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00004#
Peter Astrand3a708df2005-09-23 17:37:29 +00005# Copyright (c) 2003-2005 by Peter Astrand <astrand@lysator.liu.se>
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00006#
Peter Astrand69bf13f2005-02-14 08:56:32 +00007# Licensed to PSF under a Contributor Agreement.
Peter Astrand3a708df2005-09-23 17:37:29 +00008# See http://www.python.org/2.4/license for licensing details.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00009
Martin Panter4afdca02016-10-25 22:20:48 +000010r"""Subprocesses with accessible I/O streams
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000011
Fredrik Lundh15aaacc2004-10-17 14:47:05 +000012This module allows you to spawn processes, connect to their
Martin Panter4afdca02016-10-25 22:20:48 +000013input/output/error pipes, and obtain their return codes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000014
Martin Panter4afdca02016-10-25 22:20:48 +000015For a complete description of this module see the Python documentation.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000016
Martin Panter4afdca02016-10-25 22:20:48 +000017Main API
18========
19run(...): Runs a command, waits for it to complete, then returns a
20 CompletedProcess instance.
21Popen(...): A class for flexibly executing a command in a new process
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000022
Martin Panter4afdca02016-10-25 22:20:48 +000023Constants
24---------
25DEVNULL: Special value that indicates that os.devnull should be used
26PIPE: Special value that indicates a pipe should be created
27STDOUT: Special value that indicates that stderr should go to stdout
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000028
29
Martin Panter4afdca02016-10-25 22:20:48 +000030Older API
31=========
32call(...): Runs a command, waits for it to complete, then returns
33 the return code.
34check_call(...): Same as call() but raises CalledProcessError()
35 if return code is not 0
36check_output(...): Same as check_call() but returns the contents of
37 stdout instead of a return code
38getoutput(...): Runs a command in the shell, waits for it to complete,
39 then returns the output
40getstatusoutput(...): Runs a command in the shell, waits for it to complete,
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -070041 then returns a (exitcode, output) tuple
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000042"""
43
Zachary Ware880d42a2018-09-10 16:16:08 -070044import builtins
45import errno
Guido van Rossumfa0054a2007-05-24 04:05:35 +000046import io
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000047import os
Reid Kleckner31aa7dd2011-03-14 12:02:10 -040048import time
Christian Heimesa342c012008-04-20 21:01:16 +000049import signal
Zachary Ware880d42a2018-09-10 16:16:08 -070050import sys
51import threading
Gregory P. Smithd23047b2010-12-04 09:10:44 +000052import warnings
Giampaolo Rodolabafa8482019-01-29 22:14:24 +010053import contextlib
Victor Stinnerae586492014-09-02 23:18:25 +020054from time import monotonic as _time
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000055
Zachary Ware880d42a2018-09-10 16:16:08 -070056
57__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
58 "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL",
59 "SubprocessError", "TimeoutExpired", "CompletedProcess"]
60 # NOTE: We intentionally exclude list2cmdline as it is
61 # considered an internal implementation detail. issue10838.
62
63try:
64 import msvcrt
65 import _winapi
66 _mswindows = True
67except ModuleNotFoundError:
68 _mswindows = False
69 import _posixsubprocess
70 import select
71 import selectors
72else:
73 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
74 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
75 STD_ERROR_HANDLE, SW_HIDE,
76 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW,
77 ABOVE_NORMAL_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS,
78 HIGH_PRIORITY_CLASS, IDLE_PRIORITY_CLASS,
79 NORMAL_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS,
80 CREATE_NO_WINDOW, DETACHED_PROCESS,
81 CREATE_DEFAULT_ERROR_MODE, CREATE_BREAKAWAY_FROM_JOB)
82
83 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
84 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
85 "STD_ERROR_HANDLE", "SW_HIDE",
86 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW",
87 "STARTUPINFO",
88 "ABOVE_NORMAL_PRIORITY_CLASS", "BELOW_NORMAL_PRIORITY_CLASS",
89 "HIGH_PRIORITY_CLASS", "IDLE_PRIORITY_CLASS",
90 "NORMAL_PRIORITY_CLASS", "REALTIME_PRIORITY_CLASS",
91 "CREATE_NO_WINDOW", "DETACHED_PROCESS",
92 "CREATE_DEFAULT_ERROR_MODE", "CREATE_BREAKAWAY_FROM_JOB"])
93
94
Peter Astrand454f7672005-01-01 09:36:35 +000095# Exception classes used by this module.
Gregory P. Smith54d412e2011-03-14 14:08:43 -040096class SubprocessError(Exception): pass
97
98
99class CalledProcessError(SubprocessError):
Martin Panter4afdca02016-10-25 22:20:48 +0000100 """Raised when run() is called with check=True and the process
101 returns a non-zero exit status.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)d6da7602016-06-03 06:14:06 +0000102
Martin Panter4afdca02016-10-25 22:20:48 +0000103 Attributes:
104 cmd, returncode, stdout, stderr, output
Georg Brandlf9734072008-12-07 15:30:06 +0000105 """
Gregory P. Smith6e730002015-04-14 16:14:25 -0700106 def __init__(self, returncode, cmd, output=None, stderr=None):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000107 self.returncode = returncode
108 self.cmd = cmd
Georg Brandlf9734072008-12-07 15:30:06 +0000109 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -0700110 self.stderr = stderr
111
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000112 def __str__(self):
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)d6da7602016-06-03 06:14:06 +0000113 if self.returncode and self.returncode < 0:
114 try:
115 return "Command '%s' died with %r." % (
116 self.cmd, signal.Signals(-self.returncode))
117 except ValueError:
118 return "Command '%s' died with unknown signal %d." % (
119 self.cmd, -self.returncode)
120 else:
121 return "Command '%s' returned non-zero exit status %d." % (
122 self.cmd, self.returncode)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000123
Gregory P. Smith6e730002015-04-14 16:14:25 -0700124 @property
125 def stdout(self):
126 """Alias for output attribute, to match stderr"""
127 return self.output
128
129 @stdout.setter
130 def stdout(self, value):
131 # There's no obvious reason to set this, but allow it anyway so
132 # .stdout is a transparent alias for .output
133 self.output = value
134
Peter Astrand454f7672005-01-01 09:36:35 +0000135
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400136class TimeoutExpired(SubprocessError):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400137 """This exception is raised when the timeout expires while waiting for a
138 child process.
Martin Panter4afdca02016-10-25 22:20:48 +0000139
140 Attributes:
141 cmd, output, stdout, stderr, timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400142 """
Gregory P. Smith6e730002015-04-14 16:14:25 -0700143 def __init__(self, cmd, timeout, output=None, stderr=None):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400144 self.cmd = cmd
Reid Kleckner2b228f02011-03-16 16:57:54 -0400145 self.timeout = timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400146 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -0700147 self.stderr = stderr
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400148
149 def __str__(self):
150 return ("Command '%s' timed out after %s seconds" %
151 (self.cmd, self.timeout))
152
Gregory P. Smith6e730002015-04-14 16:14:25 -0700153 @property
154 def stdout(self):
155 return self.output
156
157 @stdout.setter
158 def stdout(self, value):
159 # There's no obvious reason to set this, but allow it anyway so
160 # .stdout is a transparent alias for .output
161 self.output = value
162
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400163
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700164if _mswindows:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000165 class STARTUPINFO:
Subhendu Ghoshae160bb2017-02-25 20:29:05 +0530166 def __init__(self, *, dwFlags=0, hStdInput=None, hStdOutput=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200167 hStdError=None, wShowWindow=0, lpAttributeList=None):
Subhendu Ghoshae160bb2017-02-25 20:29:05 +0530168 self.dwFlags = dwFlags
169 self.hStdInput = hStdInput
170 self.hStdOutput = hStdOutput
171 self.hStdError = hStdError
172 self.wShowWindow = wShowWindow
Segev Finerb2a60832017-12-18 11:28:19 +0200173 self.lpAttributeList = lpAttributeList or {"handle_list": []}
Victor Stinner483422f2018-07-05 22:54:17 +0200174
175 def copy(self):
176 attr_list = self.lpAttributeList.copy()
177 if 'handle_list' in attr_list:
178 attr_list['handle_list'] = list(attr_list['handle_list'])
179
180 return STARTUPINFO(dwFlags=self.dwFlags,
181 hStdInput=self.hStdInput,
182 hStdOutput=self.hStdOutput,
183 hStdError=self.hStdError,
184 wShowWindow=self.wShowWindow,
185 lpAttributeList=attr_list)
186
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200187
188 class Handle(int):
189 closed = False
190
191 def Close(self, CloseHandle=_winapi.CloseHandle):
192 if not self.closed:
193 self.closed = True
194 CloseHandle(self)
195
196 def Detach(self):
197 if not self.closed:
198 self.closed = True
199 return int(self)
200 raise ValueError("already closed")
201
202 def __repr__(self):
Serhiy Storchaka465e60e2014-07-25 23:36:00 +0300203 return "%s(%d)" % (self.__class__.__name__, int(self))
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200204
205 __del__ = Close
Zachary Ware880d42a2018-09-10 16:16:08 -0700206else:
207 # When select or poll has indicated that the file is writable,
208 # we can write up to _PIPE_BUF bytes without risk of blocking.
209 # POSIX defines PIPE_BUF as >= 512.
210 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
211
212 # poll/select have the advantage of not requiring any extra file
213 # descriptor, contrarily to epoll/kqueue (also, they require a single
214 # syscall).
215 if hasattr(selectors, 'PollSelector'):
216 _PopenSelector = selectors.PollSelector
217 else:
218 _PopenSelector = selectors.SelectSelector
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200219
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000220
Miss Islington (bot)4d1abed2019-09-06 02:14:31 -0700221if _mswindows:
222 # On Windows we just need to close `Popen._handle` when we no longer need
223 # it, so that the kernel can free it. `Popen._handle` gets closed
224 # implicitly when the `Popen` instance is finalized (see `Handle.__del__`,
225 # which is calling `CloseHandle` as requested in [1]), so there is nothing
226 # for `_cleanup` to do.
227 #
228 # [1] https://docs.microsoft.com/en-us/windows/desktop/ProcThread/
229 # creating-processes
230 _active = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000231
Miss Islington (bot)4d1abed2019-09-06 02:14:31 -0700232 def _cleanup():
233 pass
234else:
235 # This lists holds Popen instances for which the underlying process had not
236 # exited at the time its __del__ method got called: those processes are
237 # wait()ed for synchronously from _cleanup() when a new Popen object is
238 # created, to avoid zombie processes.
239 _active = []
240
241 def _cleanup():
242 if _active is None:
243 return
244 for inst in _active[:]:
245 res = inst._internal_poll(_deadstate=sys.maxsize)
246 if res is not None:
247 try:
248 _active.remove(inst)
249 except ValueError:
250 # This can happen if two threads create a new Popen instance.
251 # It's harmless that it was already removed, so ignore.
252 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000253
254PIPE = -1
255STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200256DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000257
258
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200259# XXX This function is only used by multiprocessing and the test suite,
260# but it's here so that it can be imported when Python is compiled without
261# threads.
262
Victor Stinner9def2842016-01-18 12:15:08 +0100263def _optim_args_from_interpreter_flags():
264 """Return a list of command-line arguments reproducing the current
265 optimization settings in sys.flags."""
266 args = []
267 value = sys.flags.optimize
268 if value > 0:
269 args.append('-' + 'O' * value)
270 return args
271
272
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200273def _args_from_interpreter_flags():
274 """Return a list of command-line arguments reproducing the current
Victor Stinner747f48e2017-12-12 22:59:48 +0100275 settings in sys.flags, sys.warnoptions and sys._xoptions."""
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200276 flag_opt_map = {
277 'debug': 'd',
278 # 'inspect': 'i',
279 # 'interactive': 'i',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200280 'dont_write_bytecode': 'B',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200281 'no_site': 'S',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200282 'verbose': 'v',
283 'bytes_warning': 'b',
284 'quiet': 'q',
Victor Stinner9def2842016-01-18 12:15:08 +0100285 # -O is handled in _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200286 }
Victor Stinner9def2842016-01-18 12:15:08 +0100287 args = _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200288 for flag, opt in flag_opt_map.items():
289 v = getattr(sys.flags, flag)
290 if v > 0:
291 args.append('-' + opt * v)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800292
Victor Stinner9de36322018-11-23 17:54:20 +0100293 if sys.flags.isolated:
294 args.append('-I')
295 else:
296 if sys.flags.ignore_environment:
297 args.append('-E')
298 if sys.flags.no_user_site:
299 args.append('-s')
300
Victor Stinnerf39b6742017-11-20 15:24:56 -0800301 # -W options
Victor Stinner747f48e2017-12-12 22:59:48 +0100302 warnopts = sys.warnoptions[:]
303 bytes_warning = sys.flags.bytes_warning
304 xoptions = getattr(sys, '_xoptions', {})
305 dev_mode = ('dev' in xoptions)
306
307 if bytes_warning > 1:
308 warnopts.remove("error::BytesWarning")
309 elif bytes_warning:
310 warnopts.remove("default::BytesWarning")
311 if dev_mode:
312 warnopts.remove('default')
313 for opt in warnopts:
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200314 args.append('-W' + opt)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800315
316 # -X options
Victor Stinner747f48e2017-12-12 22:59:48 +0100317 if dev_mode:
Victor Stinnerf39b6742017-11-20 15:24:56 -0800318 args.extend(('-X', 'dev'))
319 for opt in ('faulthandler', 'tracemalloc', 'importtime',
Victor Stinner91106cd2017-12-13 12:29:09 +0100320 'showalloccount', 'showrefcount', 'utf8'):
Victor Stinnerf39b6742017-11-20 15:24:56 -0800321 if opt in xoptions:
322 value = xoptions[opt]
323 if value is True:
324 arg = opt
325 else:
326 arg = '%s=%s' % (opt, value)
327 args.extend(('-X', arg))
328
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200329 return args
330
331
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400332def call(*popenargs, timeout=None, **kwargs):
333 """Run command with arguments. Wait for command to complete or
334 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000335
336 The arguments are the same as for the Popen constructor. Example:
337
338 retcode = call(["ls", "-l"])
339 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200340 with Popen(*popenargs, **kwargs) as p:
341 try:
342 return p.wait(timeout=timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800343 except: # Including KeyboardInterrupt, wait handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200344 p.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800345 # We don't call p.wait() again as p.__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200346 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000347
348
Peter Astrand454f7672005-01-01 09:36:35 +0000349def check_call(*popenargs, **kwargs):
350 """Run command with arguments. Wait for command to complete. If
351 the exit code was zero then return, otherwise raise
352 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000353 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000354
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400355 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000356
357 check_call(["ls", "-l"])
358 """
359 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000360 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000361 cmd = kwargs.get("args")
362 if cmd is None:
363 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000364 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000365 return 0
366
367
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400368def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700369 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000370
371 If the exit code was non-zero it raises a CalledProcessError. The
372 CalledProcessError object will have the return code in the returncode
373 attribute and output in the output attribute.
374
375 The arguments are the same as for the Popen constructor. Example:
376
377 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000378 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000379
380 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000381 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000382
383 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000384 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000385 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000386 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700387
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300388 There is an additional optional argument, "input", allowing you to
389 pass a string to the subprocess's stdin. If you use this argument
390 you may not also use the Popen constructor's "stdin" argument, as
391 it too will be used internally. Example:
392
393 >>> check_output(["sed", "-e", "s/foo/bar/"],
394 ... input=b"when in the course of fooman events\n")
395 b'when in the course of barman events\n'
396
andyclegg7fed7bd2017-10-23 03:01:19 +0100397 By default, all communication is in bytes, and therefore any "input"
Miss Islington (bot)41c965f2019-09-10 07:51:29 -0700398 should be bytes, and the return value will be bytes. If in text mode,
andyclegg7fed7bd2017-10-23 03:01:19 +0100399 any "input" should be a string, and the return value will be a string
400 decoded according to locale encoding, or by "encoding" if set. Text mode
401 is triggered by setting any of text, encoding, errors or universal_newlines.
Georg Brandlf9734072008-12-07 15:30:06 +0000402 """
403 if 'stdout' in kwargs:
404 raise ValueError('stdout argument not allowed, it will be overridden.')
Gregory P. Smith6e730002015-04-14 16:14:25 -0700405
406 if 'input' in kwargs and kwargs['input'] is None:
407 # Explicitly passing input=None was previously equivalent to passing an
408 # empty string. That is maintained here for backwards compatibility.
409 kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
410
411 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
412 **kwargs).stdout
413
414
415class CompletedProcess(object):
416 """A process that has finished running.
417
418 This is returned by run().
419
420 Attributes:
421 args: The list or str args passed to run().
422 returncode: The exit code of the process, negative for signals.
423 stdout: The standard output (None if not captured).
424 stderr: The standard error (None if not captured).
425 """
426 def __init__(self, args, returncode, stdout=None, stderr=None):
427 self.args = args
428 self.returncode = returncode
429 self.stdout = stdout
430 self.stderr = stderr
431
432 def __repr__(self):
433 args = ['args={!r}'.format(self.args),
434 'returncode={!r}'.format(self.returncode)]
435 if self.stdout is not None:
436 args.append('stdout={!r}'.format(self.stdout))
437 if self.stderr is not None:
438 args.append('stderr={!r}'.format(self.stderr))
439 return "{}({})".format(type(self).__name__, ', '.join(args))
440
441 def check_returncode(self):
442 """Raise CalledProcessError if the exit code is non-zero."""
443 if self.returncode:
444 raise CalledProcessError(self.returncode, self.args, self.stdout,
445 self.stderr)
446
447
Bo Baylesce0f33d2018-01-30 00:40:39 -0600448def run(*popenargs,
449 input=None, capture_output=False, timeout=None, check=False, **kwargs):
Gregory P. Smith6e730002015-04-14 16:14:25 -0700450 """Run command with arguments and return a CompletedProcess instance.
451
452 The returned instance will have attributes args, returncode, stdout and
453 stderr. By default, stdout and stderr are not captured, and those attributes
454 will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.
455
456 If check is True and the exit code was non-zero, it raises a
457 CalledProcessError. The CalledProcessError object will have the return code
458 in the returncode attribute, and output & stderr attributes if those streams
459 were captured.
460
461 If timeout is given, and the process takes too long, a TimeoutExpired
462 exception will be raised.
463
464 There is an optional argument "input", allowing you to
andyclegg7fed7bd2017-10-23 03:01:19 +0100465 pass bytes or a string to the subprocess's stdin. If you use this argument
Gregory P. Smith6e730002015-04-14 16:14:25 -0700466 you may not also use the Popen constructor's "stdin" argument, as
467 it will be used internally.
468
andyclegg7fed7bd2017-10-23 03:01:19 +0100469 By default, all communication is in bytes, and therefore any "input" should
470 be bytes, and the stdout and stderr will be bytes. If in text mode, any
471 "input" should be a string, and stdout and stderr will be strings decoded
472 according to locale encoding, or by "encoding" if set. Text mode is
473 triggered by setting any of text, encoding, errors or universal_newlines.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700474
andyclegg7fed7bd2017-10-23 03:01:19 +0100475 The other arguments are the same as for the Popen constructor.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700476 """
477 if input is not None:
Miss Islington (bot)6324ac12019-06-08 08:15:02 -0700478 if kwargs.get('stdin') is not None:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300479 raise ValueError('stdin and input arguments may not both be used.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300480 kwargs['stdin'] = PIPE
Gregory P. Smith6e730002015-04-14 16:14:25 -0700481
Bo Baylesce0f33d2018-01-30 00:40:39 -0600482 if capture_output:
Miss Islington (bot)6324ac12019-06-08 08:15:02 -0700483 if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None:
Bo Baylesce0f33d2018-01-30 00:40:39 -0600484 raise ValueError('stdout and stderr arguments may not be used '
485 'with capture_output.')
486 kwargs['stdout'] = PIPE
487 kwargs['stderr'] = PIPE
488
Gregory P. Smith6e730002015-04-14 16:14:25 -0700489 with Popen(*popenargs, **kwargs) as process:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200490 try:
Gregory P. Smith6e730002015-04-14 16:14:25 -0700491 stdout, stderr = process.communicate(input, timeout=timeout)
Miss Islington (bot)872c85a2019-09-11 03:05:14 -0700492 except TimeoutExpired as exc:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200493 process.kill()
Miss Islington (bot)872c85a2019-09-11 03:05:14 -0700494 if _mswindows:
495 # Windows accumulates the output in a single blocking
496 # read() call run on child threads, with the timeout
497 # being done in a join() on those threads. communicate()
498 # _after_ kill() is required to collect that and add it
499 # to the exception.
500 exc.stdout, exc.stderr = process.communicate()
501 else:
502 # POSIX _communicate already populated the output so
503 # far into the TimeoutExpired exception.
504 process.wait()
505 raise
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800506 except: # Including KeyboardInterrupt, communicate handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200507 process.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800508 # We don't call process.wait() as .__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200509 raise
510 retcode = process.poll()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700511 if check and retcode:
512 raise CalledProcessError(retcode, process.args,
513 output=stdout, stderr=stderr)
514 return CompletedProcess(process.args, retcode, stdout, stderr)
Peter Astrand454f7672005-01-01 09:36:35 +0000515
516
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000517def list2cmdline(seq):
518 """
519 Translate a sequence of arguments into a command line
520 string, using the same rules as the MS C runtime:
521
522 1) Arguments are delimited by white space, which is either a
523 space or a tab.
524
525 2) A string surrounded by double quotation marks is
526 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000527 contained within. A quoted string can be embedded in an
528 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000529
530 3) A double quotation mark preceded by a backslash is
531 interpreted as a literal double quotation mark.
532
533 4) Backslashes are interpreted literally, unless they
534 immediately precede a double quotation mark.
535
536 5) If backslashes immediately precede a double quotation mark,
537 every pair of backslashes is interpreted as a literal
538 backslash. If the number of backslashes is odd, the last
539 backslash escapes the next double quotation mark as
540 described in rule 3.
541 """
542
543 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000544 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
545 # or search http://msdn.microsoft.com for
546 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000547 result = []
548 needquote = False
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +0300549 for arg in map(os.fsdecode, seq):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000550 bs_buf = []
551
552 # Add a space to separate this argument from the others
553 if result:
554 result.append(' ')
555
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000556 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000557 if needquote:
558 result.append('"')
559
560 for c in arg:
561 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000562 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000563 bs_buf.append(c)
564 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000565 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000566 result.append('\\' * len(bs_buf)*2)
567 bs_buf = []
568 result.append('\\"')
569 else:
570 # Normal char
571 if bs_buf:
572 result.extend(bs_buf)
573 bs_buf = []
574 result.append(c)
575
Christian Heimesfdab48e2008-01-20 09:06:41 +0000576 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000577 if bs_buf:
578 result.extend(bs_buf)
579
580 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000581 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000582 result.append('"')
583
584 return ''.join(result)
585
586
Brett Cannona23810f2008-05-26 19:04:21 +0000587# Various tools for executing commands and looking at their output and status.
588#
Brett Cannona23810f2008-05-26 19:04:21 +0000589
590def getstatusoutput(cmd):
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700591 """Return (exitcode, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000592
Tim Golden60798142013-11-05 12:57:25 +0000593 Execute the string 'cmd' in a shell with 'check_output' and
Steve Dower050acae2016-09-06 20:16:17 -0700594 return a 2-tuple (status, output). The locale encoding is used
595 to decode the output and process newlines.
Tim Golden60798142013-11-05 12:57:25 +0000596
597 A trailing newline is stripped from the output.
598 The exit status for the command can be interpreted
599 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000600
601 >>> import subprocess
602 >>> subprocess.getstatusoutput('ls /bin/ls')
603 (0, '/bin/ls')
604 >>> subprocess.getstatusoutput('cat /bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700605 (1, 'cat: /bin/junk: No such file or directory')
Brett Cannona23810f2008-05-26 19:04:21 +0000606 >>> subprocess.getstatusoutput('/bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700607 (127, 'sh: /bin/junk: not found')
608 >>> subprocess.getstatusoutput('/bin/kill $$')
609 (-15, '')
Brett Cannona23810f2008-05-26 19:04:21 +0000610 """
Tim Goldene0041752013-11-03 12:53:17 +0000611 try:
andyclegg7fed7bd2017-10-23 03:01:19 +0100612 data = check_output(cmd, shell=True, text=True, stderr=STDOUT)
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700613 exitcode = 0
Tim Goldene0041752013-11-03 12:53:17 +0000614 except CalledProcessError as ex:
615 data = ex.output
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700616 exitcode = ex.returncode
Tim Goldene0041752013-11-03 12:53:17 +0000617 if data[-1:] == '\n':
618 data = data[:-1]
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700619 return exitcode, data
Brett Cannona23810f2008-05-26 19:04:21 +0000620
621def getoutput(cmd):
622 """Return output (stdout or stderr) of executing cmd in a shell.
623
624 Like getstatusoutput(), except the exit status is ignored and the return
625 value is a string containing the command's output. Example:
626
627 >>> import subprocess
628 >>> subprocess.getoutput('ls /bin/ls')
629 '/bin/ls'
630 """
631 return getstatusoutput(cmd)[1]
632
633
Victor Stinner9daecf32019-01-16 00:02:35 +0100634def _use_posix_spawn():
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800635 """Check if posix_spawn() can be used for subprocess.
Victor Stinner9daecf32019-01-16 00:02:35 +0100636
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800637 subprocess requires a posix_spawn() implementation that properly reports
638 errors to the parent process, & sets errno on the following failures:
Victor Stinner9daecf32019-01-16 00:02:35 +0100639
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800640 * Process attribute actions failed.
641 * File actions failed.
642 * exec() failed.
Victor Stinner9daecf32019-01-16 00:02:35 +0100643
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800644 Prefer an implementation which can use vfork() in some cases for best
645 performance.
Victor Stinner9daecf32019-01-16 00:02:35 +0100646 """
647 if _mswindows or not hasattr(os, 'posix_spawn'):
648 # os.posix_spawn() is not available
649 return False
650
651 if sys.platform == 'darwin':
652 # posix_spawn() is a syscall on macOS and properly reports errors
653 return True
654
655 # Check libc name and runtime libc version
656 try:
657 ver = os.confstr('CS_GNU_LIBC_VERSION')
658 # parse 'glibc 2.28' as ('glibc', (2, 28))
659 parts = ver.split(maxsplit=1)
660 if len(parts) != 2:
661 # reject unknown format
662 raise ValueError
663 libc = parts[0]
664 version = tuple(map(int, parts[1].split('.')))
665
666 if sys.platform == 'linux' and libc == 'glibc' and version >= (2, 24):
667 # glibc 2.24 has a new Linux posix_spawn implementation using vfork
668 # which properly reports errors to the parent process.
669 return True
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800670 # Note: Don't use the implementation in earlier glibc because it doesn't
Victor Stinner9daecf32019-01-16 00:02:35 +0100671 # use vfork (even if glibc 2.26 added a pipe to properly report errors
672 # to the parent process).
673 except (AttributeError, ValueError, OSError):
674 # os.confstr() or CS_GNU_LIBC_VERSION value not available
675 pass
676
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800677 # By default, assume that posix_spawn() does not properly report errors.
Victor Stinner9daecf32019-01-16 00:02:35 +0100678 return False
679
680
681_USE_POSIX_SPAWN = _use_posix_spawn()
682
683
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000684class Popen(object):
Martin Panter4afdca02016-10-25 22:20:48 +0000685 """ Execute a child program in a new process.
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200686
Martin Panter4afdca02016-10-25 22:20:48 +0000687 For a complete description of the arguments see the Python documentation.
688
689 Arguments:
690 args: A string, or a sequence of program arguments.
691
692 bufsize: supplied as the buffering argument to the open() function when
693 creating the stdin/stdout/stderr pipe file objects
694
695 executable: A replacement program to execute.
696
697 stdin, stdout and stderr: These specify the executed programs' standard
698 input, standard output and standard error file handles, respectively.
699
700 preexec_fn: (POSIX only) An object to be called in the child process
701 just before the child is executed.
702
703 close_fds: Controls closing or inheriting of file descriptors.
704
705 shell: If true, the command will be executed through the shell.
706
707 cwd: Sets the current directory before the child is executed.
708
709 env: Defines the environment variables for the new process.
710
andyclegg7fed7bd2017-10-23 03:01:19 +0100711 text: If true, decode stdin, stdout and stderr using the given encoding
712 (if set) or the system default otherwise.
713
714 universal_newlines: Alias of text, provided for backwards compatibility.
Martin Panter4afdca02016-10-25 22:20:48 +0000715
716 startupinfo and creationflags (Windows only)
717
718 restore_signals (POSIX only)
719
720 start_new_session (POSIX only)
721
722 pass_fds (POSIX only)
723
Martin Panter3dca6242016-10-25 23:41:42 +0000724 encoding and errors: Text mode encoding and error handling to use for
725 file objects stdin, stdout and stderr.
726
Martin Panter4afdca02016-10-25 22:20:48 +0000727 Attributes:
728 stdin, stdout, stderr, pid, returncode
729 """
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200730 _child_created = False # Set here since __del__ checks it
731
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700732 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000733 stdin=None, stdout=None, stderr=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200734 preexec_fn=None, close_fds=True,
andyclegg7fed7bd2017-10-23 03:01:19 +0100735 shell=False, cwd=None, env=None, universal_newlines=None,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000736 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000737 restore_signals=True, start_new_session=False,
andyclegg7fed7bd2017-10-23 03:01:19 +0100738 pass_fds=(), *, encoding=None, errors=None, text=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000739 """Create new Popen instance."""
740 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700741 # Held while anything is calling waitpid before returncode has been
742 # updated to prevent clobbering returncode if wait() or poll() are
743 # called from multiple threads at once. After acquiring the lock,
744 # code must re-check self.returncode to see if another thread just
745 # finished a waitpid() call.
746 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000747
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400748 self._input = None
749 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000750 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700751 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000752 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000753 raise TypeError("bufsize must be an integer")
754
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700755 if _mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000756 if preexec_fn is not None:
757 raise ValueError("preexec_fn is not supported on Windows "
758 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000759 else:
760 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000761 if pass_fds and not close_fds:
762 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
763 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000764 if startupinfo is not None:
765 raise ValueError("startupinfo is only supported on Windows "
766 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000767 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000768 raise ValueError("creationflags is only supported on Windows "
769 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000770
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400771 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000772 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000773 self.stdout = None
774 self.stderr = None
775 self.pid = None
776 self.returncode = None
Steve Dower050acae2016-09-06 20:16:17 -0700777 self.encoding = encoding
778 self.errors = errors
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000779
andyclegg7fed7bd2017-10-23 03:01:19 +0100780 # Validate the combinations of text and universal_newlines
781 if (text is not None and universal_newlines is not None
782 and bool(universal_newlines) != bool(text)):
783 raise SubprocessError('Cannot disambiguate when both text '
784 'and universal_newlines are supplied but '
785 'different. Pass one or the other.')
786
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000787 # Input and output objects. The general principle is like
788 # this:
789 #
790 # Parent Child
791 # ------ -----
792 # p2cwrite ---stdin---> p2cread
793 # c2pread <--stdout--- c2pwrite
794 # errread <--stderr--- errwrite
795 #
796 # On POSIX, the child objects are file descriptors. On
797 # Windows, these are Windows file handles. The parent objects
798 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000799 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000800 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000801
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000802 (p2cread, p2cwrite,
803 c2pread, c2pwrite,
804 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
805
Antoine Pitrouc9982322011-01-04 19:07:07 +0000806 # We wrap OS handles *before* launching the child, otherwise a
807 # quickly terminating child could make our fds unwrappable
808 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000809
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700810 if _mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000811 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000812 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000813 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000814 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000815 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000816 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000817
andyclegg7fed7bd2017-10-23 03:01:19 +0100818 self.text_mode = encoding or errors or text or universal_newlines
Tim Peterse718f612004-10-12 21:51:32 +0000819
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800820 # How long to resume waiting on a child after the first ^C.
821 # There is no right value for this. The purpose is to be polite
822 # yet remain good for interactive users trying to exit a tool.
823 self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber()
824
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700825 self._closed_child_pipe_fds = False
Steve Dower050acae2016-09-06 20:16:17 -0700826
Alexey Izbysheva2670562018-10-20 03:22:31 +0300827 if self.text_mode:
828 if bufsize == 1:
829 line_buffering = True
830 # Use the default buffer size for the underlying binary streams
831 # since they don't support line buffering.
832 bufsize = -1
833 else:
834 line_buffering = False
835
Antoine Pitrouc9982322011-01-04 19:07:07 +0000836 try:
Steve Dower050acae2016-09-06 20:16:17 -0700837 if p2cwrite != -1:
838 self.stdin = io.open(p2cwrite, 'wb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100839 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700840 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
Alexey Izbysheva2670562018-10-20 03:22:31 +0300841 line_buffering=line_buffering,
Steve Dower050acae2016-09-06 20:16:17 -0700842 encoding=encoding, errors=errors)
843 if c2pread != -1:
844 self.stdout = io.open(c2pread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100845 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700846 self.stdout = io.TextIOWrapper(self.stdout,
847 encoding=encoding, errors=errors)
848 if errread != -1:
849 self.stderr = io.open(errread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100850 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700851 self.stderr = io.TextIOWrapper(self.stderr,
852 encoding=encoding, errors=errors)
853
Antoine Pitrouc9982322011-01-04 19:07:07 +0000854 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300855 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000856 startupinfo, creationflags, shell,
857 p2cread, p2cwrite,
858 c2pread, c2pwrite,
859 errread, errwrite,
860 restore_signals, start_new_session)
861 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800862 # Cleanup if the child failed starting.
863 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000864 try:
865 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200866 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800867 pass # Ignore EBADF or other errors.
868
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700869 if not self._closed_child_pipe_fds:
870 to_close = []
871 if stdin == PIPE:
872 to_close.append(p2cread)
873 if stdout == PIPE:
874 to_close.append(c2pwrite)
875 if stderr == PIPE:
876 to_close.append(errwrite)
877 if hasattr(self, '_devnull'):
878 to_close.append(self._devnull)
879 for fd in to_close:
880 try:
Segev Finer4d385172017-08-18 16:18:13 +0300881 if _mswindows and isinstance(fd, Handle):
882 fd.Close()
883 else:
884 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700885 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700886 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800887
Antoine Pitrouc9982322011-01-04 19:07:07 +0000888 raise
889
andyclegg7fed7bd2017-10-23 03:01:19 +0100890 @property
891 def universal_newlines(self):
892 # universal_newlines as retained as an alias of text_mode for API
luzpaza5293b42017-11-05 07:37:50 -0600893 # compatibility. bpo-31756
andyclegg7fed7bd2017-10-23 03:01:19 +0100894 return self.text_mode
895
896 @universal_newlines.setter
897 def universal_newlines(self, universal_newlines):
898 self.text_mode = bool(universal_newlines)
899
Steve Dower050acae2016-09-06 20:16:17 -0700900 def _translate_newlines(self, data, encoding, errors):
901 data = data.decode(encoding, errors)
Andrew Svetlov82860712012-08-19 22:13:41 +0300902 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000903
Brian Curtin79cdb662010-12-03 02:46:02 +0000904 def __enter__(self):
905 return self
906
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800907 def __exit__(self, exc_type, value, traceback):
Brian Curtin79cdb662010-12-03 02:46:02 +0000908 if self.stdout:
909 self.stdout.close()
910 if self.stderr:
911 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200912 try: # Flushing a BufferedWriter may raise an error
913 if self.stdin:
914 self.stdin.close()
915 finally:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800916 if exc_type == KeyboardInterrupt:
917 # https://bugs.python.org/issue25942
918 # In the case of a KeyboardInterrupt we assume the SIGINT
919 # was also already sent to our child processes. We can't
920 # block indefinitely as that is not user friendly.
921 # If we have not already waited a brief amount of time in
922 # an interrupted .wait() or .communicate() call, do so here
923 # for consistency.
924 if self._sigint_wait_secs > 0:
925 try:
926 self._wait(timeout=self._sigint_wait_secs)
927 except TimeoutExpired:
928 pass
929 self._sigint_wait_secs = 0 # Note that this has been done.
930 return # resume the KeyboardInterrupt
931
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200932 # Wait for the process to terminate, to avoid zombies.
933 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000934
Victor Stinner9505b032017-01-06 10:44:44 +0100935 def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200936 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000937 # We didn't get to successfully create a child process.
938 return
Victor Stinner5a48e212016-05-20 12:11:15 +0200939 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800940 # Not reading subprocess exit status creates a zombie process which
Victor Stinnerc206f1e2016-06-14 16:42:59 +0200941 # is only destroyed at the parent python process exit
Victor Stinner9505b032017-01-06 10:44:44 +0100942 _warn("subprocess %s is still running" % self.pid,
943 ResourceWarning, source=self)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000944 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000945 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000946 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000947 # Child is still running, keep us alive until we can wait on it.
948 _active.append(self)
949
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200950 def _get_devnull(self):
951 if not hasattr(self, '_devnull'):
952 self._devnull = os.open(os.devnull, os.O_RDWR)
953 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000954
Victor Stinnera5e881d2015-01-14 17:07:59 +0100955 def _stdin_write(self, input):
956 if input:
957 try:
958 self.stdin.write(input)
959 except BrokenPipeError:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000960 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200961 except OSError as exc:
962 if exc.errno == errno.EINVAL:
963 # bpo-19612, bpo-30418: On Windows, stdin.write() fails
964 # with EINVAL if the child process exited or if the child
965 # process is still running but closed the pipe.
Victor Stinnera5e881d2015-01-14 17:07:59 +0100966 pass
967 else:
968 raise
Victor Stinnerd52aa312017-06-08 17:30:39 +0200969
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000970 try:
971 self.stdin.close()
972 except BrokenPipeError:
973 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200974 except OSError as exc:
975 if exc.errno == errno.EINVAL:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000976 pass
977 else:
978 raise
Victor Stinnera5e881d2015-01-14 17:07:59 +0100979
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400980 def communicate(self, input=None, timeout=None):
Joel Schaerer88031a92017-09-13 21:11:20 +0200981 """Interact with process: Send data to stdin and close it.
982 Read data from stdout and stderr, until end-of-file is
983 reached. Wait for process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +0000984
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400985 The optional "input" argument should be data to be sent to the
andyclegg7fed7bd2017-10-23 03:01:19 +0100986 child process, or None, if no data should be sent to the child.
987 communicate() returns a tuple (stdout, stderr).
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400988
andyclegg7fed7bd2017-10-23 03:01:19 +0100989 By default, all communication is in bytes, and therefore any
990 "input" should be bytes, and the (stdout, stderr) will be bytes.
991 If in text mode (indicated by self.text_mode), any "input" should
992 be a string, and (stdout, stderr) will be strings decoded
993 according to locale encoding, or by "encoding" if set. Text mode
994 is triggered by setting any of text, encoding, errors or
995 universal_newlines.
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400996 """
Peter Astrand23109f02005-03-03 20:28:59 +0000997
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400998 if self._communication_started and input:
999 raise ValueError("Cannot send input after starting communication")
1000
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001001 # Optimization: If we are not worried about timeouts, we haven't
1002 # started communicating, and we have one or zero pipes, using select()
1003 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +02001004 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001005 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +00001006 stdout = None
1007 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +00001008 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001009 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +00001010 elif self.stdout:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001011 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001012 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +00001013 elif self.stderr:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001014 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001015 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +00001016 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +02001017 else:
1018 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +02001019 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +02001020 else:
1021 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +00001022
Victor Stinner7a8d0812011-04-05 13:13:08 +02001023 try:
1024 stdout, stderr = self._communicate(input, endtime, timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001025 except KeyboardInterrupt:
1026 # https://bugs.python.org/issue25942
1027 # See the detailed comment in .wait().
1028 if timeout is not None:
1029 sigint_timeout = min(self._sigint_wait_secs,
1030 self._remaining_time(endtime))
1031 else:
1032 sigint_timeout = self._sigint_wait_secs
1033 self._sigint_wait_secs = 0 # nothing else should wait.
1034 try:
1035 self._wait(timeout=sigint_timeout)
1036 except TimeoutExpired:
1037 pass
1038 raise # resume the KeyboardInterrupt
1039
Victor Stinner7a8d0812011-04-05 13:13:08 +02001040 finally:
1041 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001042
Victor Stinner7a8d0812011-04-05 13:13:08 +02001043 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001044
1045 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +00001046
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001047
Georg Brandl6aa2d1f2008-08-12 08:35:52 +00001048 def poll(self):
Martin Panter4afdca02016-10-25 22:20:48 +00001049 """Check if child process has terminated. Set and return returncode
1050 attribute."""
Georg Brandl6aa2d1f2008-08-12 08:35:52 +00001051 return self._internal_poll()
1052
1053
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001054 def _remaining_time(self, endtime):
1055 """Convenience for _communicate when computing timeouts."""
1056 if endtime is None:
1057 return None
1058 else:
Victor Stinner949d8c92012-05-30 13:30:32 +02001059 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001060
1061
Miss Islington (bot)872c85a2019-09-11 03:05:14 -07001062 def _check_timeout(self, endtime, orig_timeout, stdout_seq, stderr_seq,
1063 skip_check_and_raise=False):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001064 """Convenience for checking if a timeout has expired."""
1065 if endtime is None:
1066 return
Miss Islington (bot)872c85a2019-09-11 03:05:14 -07001067 if skip_check_and_raise or _time() > endtime:
1068 raise TimeoutExpired(
1069 self.args, orig_timeout,
1070 output=b''.join(stdout_seq) if stdout_seq else None,
1071 stderr=b''.join(stderr_seq) if stderr_seq else None)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001072
1073
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001074 def wait(self, timeout=None):
1075 """Wait for child process to terminate; returns self.returncode."""
1076 if timeout is not None:
1077 endtime = _time() + timeout
1078 try:
1079 return self._wait(timeout=timeout)
1080 except KeyboardInterrupt:
1081 # https://bugs.python.org/issue25942
1082 # The first keyboard interrupt waits briefly for the child to
1083 # exit under the common assumption that it also received the ^C
1084 # generated SIGINT and will exit rapidly.
1085 if timeout is not None:
1086 sigint_timeout = min(self._sigint_wait_secs,
1087 self._remaining_time(endtime))
1088 else:
1089 sigint_timeout = self._sigint_wait_secs
1090 self._sigint_wait_secs = 0 # nothing else should wait.
1091 try:
1092 self._wait(timeout=sigint_timeout)
1093 except TimeoutExpired:
1094 pass
1095 raise # resume the KeyboardInterrupt
1096
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001097 def _close_pipe_fds(self,
1098 p2cread, p2cwrite,
1099 c2pread, c2pwrite,
1100 errread, errwrite):
1101 # self._devnull is not always defined.
1102 devnull_fd = getattr(self, '_devnull', None)
1103
Giampaolo Rodolabafa8482019-01-29 22:14:24 +01001104 with contextlib.ExitStack() as stack:
1105 if _mswindows:
1106 if p2cread != -1:
1107 stack.callback(p2cread.Close)
1108 if c2pwrite != -1:
1109 stack.callback(c2pwrite.Close)
1110 if errwrite != -1:
1111 stack.callback(errwrite.Close)
1112 else:
1113 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
1114 stack.callback(os.close, p2cread)
1115 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
1116 stack.callback(os.close, c2pwrite)
1117 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
1118 stack.callback(os.close, errwrite)
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001119
Giampaolo Rodolabafa8482019-01-29 22:14:24 +01001120 if devnull_fd is not None:
1121 stack.callback(os.close, devnull_fd)
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001122
1123 # Prevent a double close of these handles/fds from __init__ on error.
1124 self._closed_child_pipe_fds = True
1125
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -07001126 if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001127 #
1128 # Windows methods
1129 #
1130 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001131 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001132 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1133 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001134 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001135 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +00001136
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001137 p2cread, p2cwrite = -1, -1
1138 c2pread, c2pwrite = -1, -1
1139 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001140
Peter Astrandd38ddf42005-02-10 08:32:50 +00001141 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001142 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001143 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001144 p2cread, _ = _winapi.CreatePipe(None, 0)
1145 p2cread = Handle(p2cread)
1146 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001147 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001148 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
1149 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001150 elif stdin == DEVNULL:
1151 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001152 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001153 p2cread = msvcrt.get_osfhandle(stdin)
1154 else:
1155 # Assuming file-like object
1156 p2cread = msvcrt.get_osfhandle(stdin.fileno())
1157 p2cread = self._make_inheritable(p2cread)
1158
Peter Astrandd38ddf42005-02-10 08:32:50 +00001159 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001160 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001161 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001162 _, c2pwrite = _winapi.CreatePipe(None, 0)
1163 c2pwrite = Handle(c2pwrite)
1164 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001165 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001166 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
1167 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001168 elif stdout == DEVNULL:
1169 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001170 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001171 c2pwrite = msvcrt.get_osfhandle(stdout)
1172 else:
1173 # Assuming file-like object
1174 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1175 c2pwrite = self._make_inheritable(c2pwrite)
1176
Peter Astrandd38ddf42005-02-10 08:32:50 +00001177 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001178 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001179 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001180 _, errwrite = _winapi.CreatePipe(None, 0)
1181 errwrite = Handle(errwrite)
1182 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001183 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001184 errread, errwrite = _winapi.CreatePipe(None, 0)
1185 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001186 elif stderr == STDOUT:
1187 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001188 elif stderr == DEVNULL:
1189 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001190 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001191 errwrite = msvcrt.get_osfhandle(stderr)
1192 else:
1193 # Assuming file-like object
1194 errwrite = msvcrt.get_osfhandle(stderr.fileno())
1195 errwrite = self._make_inheritable(errwrite)
1196
1197 return (p2cread, p2cwrite,
1198 c2pread, c2pwrite,
1199 errread, errwrite)
1200
1201
1202 def _make_inheritable(self, handle):
1203 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001204 h = _winapi.DuplicateHandle(
1205 _winapi.GetCurrentProcess(), handle,
1206 _winapi.GetCurrentProcess(), 0, 1,
1207 _winapi.DUPLICATE_SAME_ACCESS)
1208 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001209
1210
Segev Finerb2a60832017-12-18 11:28:19 +02001211 def _filter_handle_list(self, handle_list):
1212 """Filter out console handles that can't be used
1213 in lpAttributeList["handle_list"] and make sure the list
1214 isn't empty. This also removes duplicate handles."""
1215 # An handle with it's lowest two bits set might be a special console
1216 # handle that if passed in lpAttributeList["handle_list"], will
1217 # cause it to fail.
1218 return list({handle for handle in handle_list
1219 if handle & 0x3 != 0x3
1220 or _winapi.GetFileType(handle) !=
1221 _winapi.FILE_TYPE_CHAR})
1222
1223
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001224 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001225 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001226 startupinfo, creationflags, shell,
1227 p2cread, p2cwrite,
1228 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001229 errread, errwrite,
1230 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001231 """Execute program (MS Windows version)"""
1232
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001233 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001234
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +03001235 if isinstance(args, str):
1236 pass
1237 elif isinstance(args, bytes):
1238 if shell:
1239 raise TypeError('bytes args is not allowed on Windows')
1240 args = list2cmdline([args])
1241 elif isinstance(args, os.PathLike):
1242 if shell:
1243 raise TypeError('path-like args is not allowed when '
1244 'shell is true')
1245 args = list2cmdline([args])
1246 else:
Serhiy Storchakabe50a7b2018-02-28 01:03:46 +02001247 args = list2cmdline(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001248
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +03001249 if executable is not None:
1250 executable = os.fsdecode(executable)
1251
Peter Astrandc1d65362004-11-07 14:30:34 +00001252 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001253 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001254 startupinfo = STARTUPINFO()
Victor Stinner483422f2018-07-05 22:54:17 +02001255 else:
1256 # bpo-34044: Copy STARTUPINFO since it is modified above,
1257 # so the caller can reuse it multiple times.
1258 startupinfo = startupinfo.copy()
Segev Finerb2a60832017-12-18 11:28:19 +02001259
1260 use_std_handles = -1 not in (p2cread, c2pwrite, errwrite)
1261 if use_std_handles:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001262 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001263 startupinfo.hStdInput = p2cread
1264 startupinfo.hStdOutput = c2pwrite
1265 startupinfo.hStdError = errwrite
1266
Segev Finerb2a60832017-12-18 11:28:19 +02001267 attribute_list = startupinfo.lpAttributeList
1268 have_handle_list = bool(attribute_list and
1269 "handle_list" in attribute_list and
1270 attribute_list["handle_list"])
1271
1272 # If we were given an handle_list or need to create one
1273 if have_handle_list or (use_std_handles and close_fds):
1274 if attribute_list is None:
1275 attribute_list = startupinfo.lpAttributeList = {}
1276 handle_list = attribute_list["handle_list"] = \
1277 list(attribute_list.get("handle_list", []))
1278
1279 if use_std_handles:
1280 handle_list += [int(p2cread), int(c2pwrite), int(errwrite)]
1281
1282 handle_list[:] = self._filter_handle_list(handle_list)
1283
1284 if handle_list:
1285 if not close_fds:
1286 warnings.warn("startupinfo.lpAttributeList['handle_list'] "
1287 "overriding close_fds", RuntimeWarning)
1288
1289 # When using the handle_list we always request to inherit
1290 # handles but the only handles that will be inherited are
1291 # the ones in the handle_list
1292 close_fds = False
1293
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001294 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001295 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1296 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001297 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001298 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001299
Miss Islington (bot)8763d432019-06-24 09:09:47 -07001300 if cwd is not None:
1301 cwd = os.fsdecode(cwd)
1302
1303 sys.audit("subprocess.Popen", executable, args, cwd, env)
1304
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001305 # Start the process
1306 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001307 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001308 # no special security
1309 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001310 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001311 creationflags,
1312 env,
Miss Islington (bot)8763d432019-06-24 09:09:47 -07001313 cwd,
Tim Peterse8374a52004-10-13 03:15:00 +00001314 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001315 finally:
1316 # Child is launched. Close the parent's copy of those pipe
1317 # handles that only the child should have open. You need
1318 # to make sure that no handles to the write end of the
1319 # output pipe are maintained in this process or else the
1320 # pipe will not close when the child process exits and the
1321 # ReadFile will hang.
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001322 self._close_pipe_fds(p2cread, p2cwrite,
1323 c2pread, c2pwrite,
1324 errread, errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001325
1326 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001327 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001328 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001329 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001330 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001331
Brett Cannon84df1e62010-05-14 00:33:40 +00001332 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001333 _WaitForSingleObject=_winapi.WaitForSingleObject,
1334 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1335 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001336 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001337 attribute.
1338
1339 This method is called by __del__, so it can only refer to objects
1340 in its local scope.
1341
1342 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001343 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001344 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1345 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001346 return self.returncode
1347
1348
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001349 def _wait(self, timeout):
1350 """Internal implementation of wait() on Windows."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001351 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001352 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001353 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001354 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001355 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001356 # API note: Returns immediately if timeout_millis == 0.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001357 result = _winapi.WaitForSingleObject(self._handle,
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001358 timeout_millis)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001359 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001360 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001361 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001362 return self.returncode
1363
1364
1365 def _readerthread(self, fh, buffer):
1366 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001367 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001368
1369
Reid Kleckner2b228f02011-03-16 16:57:54 -04001370 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001371 # Start reader threads feeding into a list hanging off of this
1372 # object, unless they've already been started.
1373 if self.stdout and not hasattr(self, "_stdout_buff"):
1374 self._stdout_buff = []
1375 self.stdout_thread = \
1376 threading.Thread(target=self._readerthread,
1377 args=(self.stdout, self._stdout_buff))
1378 self.stdout_thread.daemon = True
1379 self.stdout_thread.start()
1380 if self.stderr and not hasattr(self, "_stderr_buff"):
1381 self._stderr_buff = []
1382 self.stderr_thread = \
1383 threading.Thread(target=self._readerthread,
1384 args=(self.stderr, self._stderr_buff))
1385 self.stderr_thread.daemon = True
1386 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001387
1388 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001389 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001390
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001391 # Wait for the reader threads, or time out. If we time out, the
1392 # threads remain reading and the fds left open in case the user
1393 # calls communicate again.
1394 if self.stdout is not None:
1395 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001396 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001397 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001398 if self.stderr is not None:
1399 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001400 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001401 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001402
1403 # Collect the output from and close both pipes, now that we know
1404 # both have been read successfully.
1405 stdout = None
1406 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001407 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001408 stdout = self._stdout_buff
1409 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001410 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001411 stderr = self._stderr_buff
1412 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001413
1414 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001415 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001416 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001417 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001418 stderr = stderr[0]
1419
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001420 return (stdout, stderr)
1421
Christian Heimesa342c012008-04-20 21:01:16 +00001422 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001423 """Send a signal to the process."""
1424 # Don't signal a process that we know has already died.
1425 if self.returncode is not None:
1426 return
Christian Heimesa342c012008-04-20 21:01:16 +00001427 if sig == signal.SIGTERM:
1428 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001429 elif sig == signal.CTRL_C_EVENT:
1430 os.kill(self.pid, signal.CTRL_C_EVENT)
1431 elif sig == signal.CTRL_BREAK_EVENT:
1432 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001433 else:
Brian Curtin19651362010-09-07 13:24:38 +00001434 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001435
1436 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001437 """Terminates the process."""
1438 # Don't terminate a process that we know has already died.
1439 if self.returncode is not None:
1440 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001441 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001442 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001443 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001444 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1445 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001446 rc = _winapi.GetExitCodeProcess(self._handle)
1447 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001448 raise
1449 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001450
1451 kill = terminate
1452
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001453 else:
1454 #
1455 # POSIX methods
1456 #
1457 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001458 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001459 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1460 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001461 p2cread, p2cwrite = -1, -1
1462 c2pread, c2pwrite = -1, -1
1463 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001464
Peter Astrandd38ddf42005-02-10 08:32:50 +00001465 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001466 pass
1467 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001468 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001469 elif stdin == DEVNULL:
1470 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001471 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001472 p2cread = stdin
1473 else:
1474 # Assuming file-like object
1475 p2cread = stdin.fileno()
1476
Peter Astrandd38ddf42005-02-10 08:32:50 +00001477 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001478 pass
1479 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001480 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001481 elif stdout == DEVNULL:
1482 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001483 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001484 c2pwrite = stdout
1485 else:
1486 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001487 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001488
Peter Astrandd38ddf42005-02-10 08:32:50 +00001489 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001490 pass
1491 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001492 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001493 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001494 if c2pwrite != -1:
1495 errwrite = c2pwrite
1496 else: # child's stdout is not set, use parent's stdout
1497 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001498 elif stderr == DEVNULL:
1499 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001500 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001501 errwrite = stderr
1502 else:
1503 # Assuming file-like object
1504 errwrite = stderr.fileno()
1505
1506 return (p2cread, p2cwrite,
1507 c2pread, c2pwrite,
1508 errread, errwrite)
1509
1510
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001511 def _posix_spawn(self, args, executable, env, restore_signals,
1512 p2cread, p2cwrite,
1513 c2pread, c2pwrite,
1514 errread, errwrite):
Victor Stinner8c349562019-01-16 23:38:06 +01001515 """Execute program using os.posix_spawn()."""
Victor Stinner9daecf32019-01-16 00:02:35 +01001516 if env is None:
1517 env = os.environ
1518
1519 kwargs = {}
1520 if restore_signals:
1521 # See _Py_RestoreSignals() in Python/pylifecycle.c
1522 sigset = []
1523 for signame in ('SIGPIPE', 'SIGXFZ', 'SIGXFSZ'):
1524 signum = getattr(signal, signame, None)
1525 if signum is not None:
1526 sigset.append(signum)
1527 kwargs['setsigdef'] = sigset
1528
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001529 file_actions = []
1530 for fd in (p2cwrite, c2pread, errread):
1531 if fd != -1:
1532 file_actions.append((os.POSIX_SPAWN_CLOSE, fd))
1533 for fd, fd2 in (
1534 (p2cread, 0),
1535 (c2pwrite, 1),
1536 (errwrite, 2),
1537 ):
1538 if fd != -1:
1539 file_actions.append((os.POSIX_SPAWN_DUP2, fd, fd2))
1540 if file_actions:
1541 kwargs['file_actions'] = file_actions
1542
Victor Stinner8c349562019-01-16 23:38:06 +01001543 self.pid = os.posix_spawn(executable, args, env, **kwargs)
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001544 self._child_created = True
1545
1546 self._close_pipe_fds(p2cread, p2cwrite,
1547 c2pread, c2pwrite,
1548 errread, errwrite)
Victor Stinner9daecf32019-01-16 00:02:35 +01001549
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001550 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001551 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001552 startupinfo, creationflags, shell,
1553 p2cread, p2cwrite,
1554 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001555 errread, errwrite,
1556 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001557 """Execute program (POSIX version)"""
1558
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001559 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001560 args = [args]
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +03001561 elif isinstance(args, os.PathLike):
1562 if shell:
1563 raise TypeError('path-like args is not allowed when '
1564 'shell is true')
1565 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001566 else:
Serhiy Storchakabe50a7b2018-02-28 01:03:46 +02001567 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001568
1569 if shell:
Xavier de Gayeb35fc622016-12-13 16:32:21 +01001570 # On Android the default shell is at '/system/bin/sh'.
1571 unix_shell = ('/system/bin/sh' if
1572 hasattr(sys, 'getandroidapilevel') else '/bin/sh')
1573 args = [unix_shell, "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001574 if executable:
1575 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001576
Peter Astrandd38ddf42005-02-10 08:32:50 +00001577 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001578 executable = args[0]
Victor Stinner9daecf32019-01-16 00:02:35 +01001579
Miss Islington (bot)8763d432019-06-24 09:09:47 -07001580 sys.audit("subprocess.Popen", executable, args, cwd, env)
1581
Victor Stinner9daecf32019-01-16 00:02:35 +01001582 if (_USE_POSIX_SPAWN
Victor Stinner8c349562019-01-16 23:38:06 +01001583 and os.path.dirname(executable)
Victor Stinner9daecf32019-01-16 00:02:35 +01001584 and preexec_fn is None
1585 and not close_fds
1586 and not pass_fds
1587 and cwd is None
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001588 and (p2cread == -1 or p2cread > 2)
1589 and (c2pwrite == -1 or c2pwrite > 2)
1590 and (errwrite == -1 or errwrite > 2)
Victor Stinner9daecf32019-01-16 00:02:35 +01001591 and not start_new_session):
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001592 self._posix_spawn(args, executable, env, restore_signals,
1593 p2cread, p2cwrite,
1594 c2pread, c2pwrite,
1595 errread, errwrite)
Victor Stinner9daecf32019-01-16 00:02:35 +01001596 return
1597
Gregory P. Smith5591b022012-10-10 03:34:47 -07001598 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001599
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001600 # For transferring possible exec failure from child to parent.
1601 # Data format: "exception name:hex errno:description"
1602 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001603 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001604 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1605 low_fds_to_close = []
1606 while errpipe_write < 3:
1607 low_fds_to_close.append(errpipe_write)
1608 errpipe_write = os.dup(errpipe_write)
1609 for low_fd in low_fds_to_close:
1610 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001611 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001612 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001613 # We must avoid complex work that could involve
1614 # malloc or free in the child process to avoid
1615 # potential deadlocks, thus we do all this here.
1616 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001617
Victor Stinner372b8382011-06-21 17:24:21 +02001618 if env is not None:
Serhiy Storchakad174d242017-06-23 19:39:27 +03001619 env_list = []
1620 for k, v in env.items():
1621 k = os.fsencode(k)
1622 if b'=' in k:
1623 raise ValueError("illegal environment variable name")
1624 env_list.append(k + b'=' + os.fsencode(v))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001625 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001626 env_list = None # Use execv instead of execve.
1627 executable = os.fsencode(executable)
1628 if os.path.dirname(executable):
1629 executable_list = (executable,)
1630 else:
1631 # This matches the behavior of os._execvpe().
1632 executable_list = tuple(
1633 os.path.join(os.fsencode(dir), executable)
1634 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001635 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001636 fds_to_keep.add(errpipe_write)
1637 self.pid = _posixsubprocess.fork_exec(
1638 args, executable_list,
Serhiy Storchaka66bffd12017-04-19 21:12:46 +03001639 close_fds, tuple(sorted(map(int, fds_to_keep))),
1640 cwd, env_list,
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001641 p2cread, p2cwrite, c2pread, c2pwrite,
1642 errread, errwrite,
1643 errpipe_read, errpipe_write,
1644 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001645 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001646 finally:
1647 # be sure the FD is closed no matter what
1648 os.close(errpipe_write)
1649
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001650 self._close_pipe_fds(p2cread, p2cwrite,
1651 c2pread, c2pwrite,
1652 errread, errwrite)
Facundo Batista10706e22009-06-19 20:34:30 +00001653
1654 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001655 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001656 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001657 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001658 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001659 errpipe_data += part
1660 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001661 break
Facundo Batista10706e22009-06-19 20:34:30 +00001662 finally:
1663 # be sure the FD is closed no matter what
1664 os.close(errpipe_read)
1665
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001666 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001667 try:
Victor Stinnera58e2c52016-05-20 12:08:12 +02001668 pid, sts = os.waitpid(self.pid, 0)
1669 if pid == self.pid:
1670 self._handle_exitstatus(sts)
1671 else:
1672 self.returncode = sys.maxsize
Victor Stinnera5e881d2015-01-14 17:07:59 +01001673 except ChildProcessError:
1674 pass
Victor Stinnera58e2c52016-05-20 12:08:12 +02001675
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001676 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001677 exception_name, hex_errno, err_msg = (
1678 errpipe_data.split(b':', 2))
Ammar Askar3fc499b2017-09-06 02:41:30 -04001679 # The encoding here should match the encoding
1680 # written in by the subprocess implementations
1681 # like _posixsubprocess
1682 err_msg = err_msg.decode()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001683 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001684 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001685 hex_errno = b'0'
Ammar Askar3fc499b2017-09-06 02:41:30 -04001686 err_msg = 'Bad exception data from child: {!r}'.format(
1687 bytes(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001688 child_exception_type = getattr(
1689 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001690 SubprocessError)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001691 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001692 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001693 child_exec_never_called = (err_msg == "noexec")
1694 if child_exec_never_called:
1695 err_msg = ""
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001696 # The error must be from chdir(cwd).
1697 err_filename = cwd
1698 else:
1699 err_filename = orig_executable
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001700 if errno_num != 0:
1701 err_msg = os.strerror(errno_num)
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001702 raise child_exception_type(errno_num, err_msg, err_filename)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001703 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001704
1705
Brett Cannon84df1e62010-05-14 00:33:40 +00001706 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1707 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001708 _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
1709 _WSTOPSIG=os.WSTOPSIG):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001710 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001711 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001712 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001713 if _WIFSIGNALED(sts):
1714 self.returncode = -_WTERMSIG(sts)
1715 elif _WIFEXITED(sts):
1716 self.returncode = _WEXITSTATUS(sts)
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001717 elif _WIFSTOPPED(sts):
1718 self.returncode = -_WSTOPSIG(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001719 else:
1720 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001721 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001722
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001723
Brett Cannon84df1e62010-05-14 00:33:40 +00001724 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001725 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001726 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001727 attribute.
1728
1729 This method is called by __del__, so it cannot reference anything
1730 outside of the local scope (nor can any methods it calls).
1731
1732 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001733 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001734 if not self._waitpid_lock.acquire(False):
1735 # Something else is busy calling waitpid. Don't allow two
1736 # at once. We know nothing yet.
1737 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001738 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001739 if self.returncode is not None:
1740 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001741 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001742 if pid == self.pid:
1743 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001744 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001745 if _deadstate is not None:
1746 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001747 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001748 # This happens if SIGCLD is set to be ignored or
1749 # waiting for child processes has otherwise been
1750 # disabled for our process. This child is dead, we
1751 # can't get the status.
1752 # http://bugs.python.org/issue15756
1753 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001754 finally:
1755 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001756 return self.returncode
1757
1758
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001759 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001760 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001761 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001762 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001763 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001764 # This happens if SIGCLD is set to be ignored or waiting
1765 # for child processes has otherwise been disabled for our
1766 # process. This child is dead, we can't get the status.
1767 pid = self.pid
1768 sts = 0
1769 return (pid, sts)
1770
1771
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001772 def _wait(self, timeout):
1773 """Internal implementation of wait() on POSIX."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001774 if self.returncode is not None:
1775 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001776
Gregory P. Smith82604e02016-11-20 16:31:07 -08001777 if timeout is not None:
1778 endtime = _time() + timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001779 # Enter a busy loop if we have a timeout. This busy loop was
1780 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1781 delay = 0.0005 # 500 us -> initial delay of 1 ms
1782 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001783 if self._waitpid_lock.acquire(False):
1784 try:
1785 if self.returncode is not None:
1786 break # Another thread waited.
1787 (pid, sts) = self._try_wait(os.WNOHANG)
1788 assert pid == self.pid or pid == 0
1789 if pid == self.pid:
1790 self._handle_exitstatus(sts)
1791 break
1792 finally:
1793 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001794 remaining = self._remaining_time(endtime)
1795 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001796 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001797 delay = min(delay * 2, remaining, .05)
1798 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001799 else:
1800 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001801 with self._waitpid_lock:
1802 if self.returncode is not None:
1803 break # Another thread waited.
1804 (pid, sts) = self._try_wait(0)
1805 # Check the pid and loop as waitpid has been known to
1806 # return 0 even without WNOHANG in odd situations.
1807 # http://bugs.python.org/issue14396.
1808 if pid == self.pid:
1809 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001810 return self.returncode
1811
1812
Reid Kleckner2b228f02011-03-16 16:57:54 -04001813 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001814 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001815 # Flush stdio buffer. This might block, if the user has
1816 # been writing to .stdin in an uncontrolled fashion.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001817 try:
1818 self.stdin.flush()
1819 except BrokenPipeError:
1820 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001821 if not input:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001822 try:
1823 self.stdin.close()
1824 except BrokenPipeError:
1825 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001826
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001827 stdout = None
1828 stderr = None
1829
1830 # Only create this mapping if we haven't already.
1831 if not self._communication_started:
1832 self._fileobj2output = {}
1833 if self.stdout:
1834 self._fileobj2output[self.stdout] = []
1835 if self.stderr:
1836 self._fileobj2output[self.stderr] = []
1837
1838 if self.stdout:
1839 stdout = self._fileobj2output[self.stdout]
1840 if self.stderr:
1841 stderr = self._fileobj2output[self.stderr]
1842
1843 self._save_input(input)
1844
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001845 if self._input:
1846 input_view = memoryview(self._input)
1847
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001848 with _PopenSelector() as selector:
1849 if self.stdin and input:
1850 selector.register(self.stdin, selectors.EVENT_WRITE)
1851 if self.stdout:
1852 selector.register(self.stdout, selectors.EVENT_READ)
1853 if self.stderr:
1854 selector.register(self.stderr, selectors.EVENT_READ)
1855
1856 while selector.get_map():
1857 timeout = self._remaining_time(endtime)
1858 if timeout is not None and timeout < 0:
Miss Islington (bot)872c85a2019-09-11 03:05:14 -07001859 self._check_timeout(endtime, orig_timeout,
1860 stdout, stderr,
1861 skip_check_and_raise=True)
1862 raise RuntimeError( # Impossible :)
1863 '_check_timeout(..., skip_check_and_raise=True) '
1864 'failed to raise TimeoutExpired.')
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001865
1866 ready = selector.select(timeout)
Miss Islington (bot)872c85a2019-09-11 03:05:14 -07001867 self._check_timeout(endtime, orig_timeout, stdout, stderr)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001868
1869 # XXX Rewrite these to use non-blocking I/O on the file
1870 # objects; they are no longer using C stdio!
1871
1872 for key, events in ready:
1873 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001874 chunk = input_view[self._input_offset :
1875 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001876 try:
1877 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001878 except BrokenPipeError:
1879 selector.unregister(key.fileobj)
1880 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001881 else:
1882 if self._input_offset >= len(self._input):
1883 selector.unregister(key.fileobj)
1884 key.fileobj.close()
1885 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001886 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001887 if not data:
1888 selector.unregister(key.fileobj)
1889 key.fileobj.close()
1890 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001891
1892 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001893
1894 # All data exchanged. Translate lists into strings.
1895 if stdout is not None:
1896 stdout = b''.join(stdout)
1897 if stderr is not None:
1898 stderr = b''.join(stderr)
1899
1900 # Translate newlines, if requested.
1901 # This also turns bytes into strings.
andyclegg7fed7bd2017-10-23 03:01:19 +01001902 if self.text_mode:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001903 if stdout is not None:
1904 stdout = self._translate_newlines(stdout,
Steve Dower050acae2016-09-06 20:16:17 -07001905 self.stdout.encoding,
1906 self.stdout.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001907 if stderr is not None:
1908 stderr = self._translate_newlines(stderr,
Steve Dower050acae2016-09-06 20:16:17 -07001909 self.stderr.encoding,
1910 self.stderr.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001911
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001912 return (stdout, stderr)
1913
1914
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001915 def _save_input(self, input):
1916 # This method is called from the _communicate_with_*() methods
1917 # so that if we time out while communicating, we can continue
1918 # sending input if we retry.
1919 if self.stdin and self._input is None:
1920 self._input_offset = 0
1921 self._input = input
andyclegg7fed7bd2017-10-23 03:01:19 +01001922 if input is not None and self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -07001923 self._input = self._input.encode(self.stdin.encoding,
1924 self.stdin.errors)
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001925
1926
Christian Heimesa342c012008-04-20 21:01:16 +00001927 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001928 """Send a signal to the process."""
1929 # Skip signalling a process that we know has already died.
1930 if self.returncode is None:
1931 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00001932
1933 def terminate(self):
1934 """Terminate the process with SIGTERM
1935 """
1936 self.send_signal(signal.SIGTERM)
1937
1938 def kill(self):
1939 """Kill the process with SIGKILL
1940 """
1941 self.send_signal(signal.SIGKILL)