blob: aed7292541e0340380abdf169325cd76bd108e23 [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
Ruslan Kuprieiev042821a2019-06-28 19:12:16 +0300221if _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
Ruslan Kuprieiev042821a2019-06-28 19:12:16 +0300232 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"
Matthias182e1d12019-09-10 15:51:09 +0200398 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:
Rémi Lapeyre8cc605a2019-06-08 16:56:24 +0200478 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:
Rémi Lapeyre8cc605a2019-06-08 16:56:24 +0200483 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)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200492 except TimeoutExpired:
493 process.kill()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700494 stdout, stderr = process.communicate()
495 raise TimeoutExpired(process.args, timeout, output=stdout,
496 stderr=stderr)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800497 except: # Including KeyboardInterrupt, communicate handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200498 process.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800499 # We don't call process.wait() as .__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200500 raise
501 retcode = process.poll()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700502 if check and retcode:
503 raise CalledProcessError(retcode, process.args,
504 output=stdout, stderr=stderr)
505 return CompletedProcess(process.args, retcode, stdout, stderr)
Peter Astrand454f7672005-01-01 09:36:35 +0000506
507
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000508def list2cmdline(seq):
509 """
510 Translate a sequence of arguments into a command line
511 string, using the same rules as the MS C runtime:
512
513 1) Arguments are delimited by white space, which is either a
514 space or a tab.
515
516 2) A string surrounded by double quotation marks is
517 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000518 contained within. A quoted string can be embedded in an
519 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000520
521 3) A double quotation mark preceded by a backslash is
522 interpreted as a literal double quotation mark.
523
524 4) Backslashes are interpreted literally, unless they
525 immediately precede a double quotation mark.
526
527 5) If backslashes immediately precede a double quotation mark,
528 every pair of backslashes is interpreted as a literal
529 backslash. If the number of backslashes is odd, the last
530 backslash escapes the next double quotation mark as
531 described in rule 3.
532 """
533
534 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000535 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
536 # or search http://msdn.microsoft.com for
537 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000538 result = []
539 needquote = False
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +0300540 for arg in map(os.fsdecode, seq):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000541 bs_buf = []
542
543 # Add a space to separate this argument from the others
544 if result:
545 result.append(' ')
546
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000547 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000548 if needquote:
549 result.append('"')
550
551 for c in arg:
552 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000553 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000554 bs_buf.append(c)
555 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000556 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000557 result.append('\\' * len(bs_buf)*2)
558 bs_buf = []
559 result.append('\\"')
560 else:
561 # Normal char
562 if bs_buf:
563 result.extend(bs_buf)
564 bs_buf = []
565 result.append(c)
566
Christian Heimesfdab48e2008-01-20 09:06:41 +0000567 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000568 if bs_buf:
569 result.extend(bs_buf)
570
571 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000572 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000573 result.append('"')
574
575 return ''.join(result)
576
577
Brett Cannona23810f2008-05-26 19:04:21 +0000578# Various tools for executing commands and looking at their output and status.
579#
Brett Cannona23810f2008-05-26 19:04:21 +0000580
581def getstatusoutput(cmd):
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700582 """Return (exitcode, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000583
Tim Golden60798142013-11-05 12:57:25 +0000584 Execute the string 'cmd' in a shell with 'check_output' and
Steve Dower050acae2016-09-06 20:16:17 -0700585 return a 2-tuple (status, output). The locale encoding is used
586 to decode the output and process newlines.
Tim Golden60798142013-11-05 12:57:25 +0000587
588 A trailing newline is stripped from the output.
589 The exit status for the command can be interpreted
590 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000591
592 >>> import subprocess
593 >>> subprocess.getstatusoutput('ls /bin/ls')
594 (0, '/bin/ls')
595 >>> subprocess.getstatusoutput('cat /bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700596 (1, 'cat: /bin/junk: No such file or directory')
Brett Cannona23810f2008-05-26 19:04:21 +0000597 >>> subprocess.getstatusoutput('/bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700598 (127, 'sh: /bin/junk: not found')
599 >>> subprocess.getstatusoutput('/bin/kill $$')
600 (-15, '')
Brett Cannona23810f2008-05-26 19:04:21 +0000601 """
Tim Goldene0041752013-11-03 12:53:17 +0000602 try:
andyclegg7fed7bd2017-10-23 03:01:19 +0100603 data = check_output(cmd, shell=True, text=True, stderr=STDOUT)
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700604 exitcode = 0
Tim Goldene0041752013-11-03 12:53:17 +0000605 except CalledProcessError as ex:
606 data = ex.output
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700607 exitcode = ex.returncode
Tim Goldene0041752013-11-03 12:53:17 +0000608 if data[-1:] == '\n':
609 data = data[:-1]
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700610 return exitcode, data
Brett Cannona23810f2008-05-26 19:04:21 +0000611
612def getoutput(cmd):
613 """Return output (stdout or stderr) of executing cmd in a shell.
614
615 Like getstatusoutput(), except the exit status is ignored and the return
616 value is a string containing the command's output. Example:
617
618 >>> import subprocess
619 >>> subprocess.getoutput('ls /bin/ls')
620 '/bin/ls'
621 """
622 return getstatusoutput(cmd)[1]
623
624
Victor Stinner9daecf32019-01-16 00:02:35 +0100625def _use_posix_spawn():
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800626 """Check if posix_spawn() can be used for subprocess.
Victor Stinner9daecf32019-01-16 00:02:35 +0100627
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800628 subprocess requires a posix_spawn() implementation that properly reports
629 errors to the parent process, & sets errno on the following failures:
Victor Stinner9daecf32019-01-16 00:02:35 +0100630
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800631 * Process attribute actions failed.
632 * File actions failed.
633 * exec() failed.
Victor Stinner9daecf32019-01-16 00:02:35 +0100634
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800635 Prefer an implementation which can use vfork() in some cases for best
636 performance.
Victor Stinner9daecf32019-01-16 00:02:35 +0100637 """
638 if _mswindows or not hasattr(os, 'posix_spawn'):
639 # os.posix_spawn() is not available
640 return False
641
642 if sys.platform == 'darwin':
643 # posix_spawn() is a syscall on macOS and properly reports errors
644 return True
645
646 # Check libc name and runtime libc version
647 try:
648 ver = os.confstr('CS_GNU_LIBC_VERSION')
649 # parse 'glibc 2.28' as ('glibc', (2, 28))
650 parts = ver.split(maxsplit=1)
651 if len(parts) != 2:
652 # reject unknown format
653 raise ValueError
654 libc = parts[0]
655 version = tuple(map(int, parts[1].split('.')))
656
657 if sys.platform == 'linux' and libc == 'glibc' and version >= (2, 24):
658 # glibc 2.24 has a new Linux posix_spawn implementation using vfork
659 # which properly reports errors to the parent process.
660 return True
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800661 # Note: Don't use the implementation in earlier glibc because it doesn't
Victor Stinner9daecf32019-01-16 00:02:35 +0100662 # use vfork (even if glibc 2.26 added a pipe to properly report errors
663 # to the parent process).
664 except (AttributeError, ValueError, OSError):
665 # os.confstr() or CS_GNU_LIBC_VERSION value not available
666 pass
667
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800668 # By default, assume that posix_spawn() does not properly report errors.
Victor Stinner9daecf32019-01-16 00:02:35 +0100669 return False
670
671
672_USE_POSIX_SPAWN = _use_posix_spawn()
673
674
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000675class Popen(object):
Martin Panter4afdca02016-10-25 22:20:48 +0000676 """ Execute a child program in a new process.
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200677
Martin Panter4afdca02016-10-25 22:20:48 +0000678 For a complete description of the arguments see the Python documentation.
679
680 Arguments:
681 args: A string, or a sequence of program arguments.
682
683 bufsize: supplied as the buffering argument to the open() function when
684 creating the stdin/stdout/stderr pipe file objects
685
686 executable: A replacement program to execute.
687
688 stdin, stdout and stderr: These specify the executed programs' standard
689 input, standard output and standard error file handles, respectively.
690
691 preexec_fn: (POSIX only) An object to be called in the child process
692 just before the child is executed.
693
694 close_fds: Controls closing or inheriting of file descriptors.
695
696 shell: If true, the command will be executed through the shell.
697
698 cwd: Sets the current directory before the child is executed.
699
700 env: Defines the environment variables for the new process.
701
andyclegg7fed7bd2017-10-23 03:01:19 +0100702 text: If true, decode stdin, stdout and stderr using the given encoding
703 (if set) or the system default otherwise.
704
705 universal_newlines: Alias of text, provided for backwards compatibility.
Martin Panter4afdca02016-10-25 22:20:48 +0000706
707 startupinfo and creationflags (Windows only)
708
709 restore_signals (POSIX only)
710
711 start_new_session (POSIX only)
712
713 pass_fds (POSIX only)
714
Martin Panter3dca6242016-10-25 23:41:42 +0000715 encoding and errors: Text mode encoding and error handling to use for
716 file objects stdin, stdout and stderr.
717
Martin Panter4afdca02016-10-25 22:20:48 +0000718 Attributes:
719 stdin, stdout, stderr, pid, returncode
720 """
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200721 _child_created = False # Set here since __del__ checks it
722
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700723 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000724 stdin=None, stdout=None, stderr=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200725 preexec_fn=None, close_fds=True,
andyclegg7fed7bd2017-10-23 03:01:19 +0100726 shell=False, cwd=None, env=None, universal_newlines=None,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000727 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000728 restore_signals=True, start_new_session=False,
andyclegg7fed7bd2017-10-23 03:01:19 +0100729 pass_fds=(), *, encoding=None, errors=None, text=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000730 """Create new Popen instance."""
731 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700732 # Held while anything is calling waitpid before returncode has been
733 # updated to prevent clobbering returncode if wait() or poll() are
734 # called from multiple threads at once. After acquiring the lock,
735 # code must re-check self.returncode to see if another thread just
736 # finished a waitpid() call.
737 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000738
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400739 self._input = None
740 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000741 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700742 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000743 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000744 raise TypeError("bufsize must be an integer")
745
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700746 if _mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000747 if preexec_fn is not None:
748 raise ValueError("preexec_fn is not supported on Windows "
749 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000750 else:
751 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000752 if pass_fds and not close_fds:
753 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
754 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000755 if startupinfo is not None:
756 raise ValueError("startupinfo is only supported on Windows "
757 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000758 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000759 raise ValueError("creationflags is only supported on Windows "
760 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000761
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400762 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000763 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000764 self.stdout = None
765 self.stderr = None
766 self.pid = None
767 self.returncode = None
Steve Dower050acae2016-09-06 20:16:17 -0700768 self.encoding = encoding
769 self.errors = errors
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000770
andyclegg7fed7bd2017-10-23 03:01:19 +0100771 # Validate the combinations of text and universal_newlines
772 if (text is not None and universal_newlines is not None
773 and bool(universal_newlines) != bool(text)):
774 raise SubprocessError('Cannot disambiguate when both text '
775 'and universal_newlines are supplied but '
776 'different. Pass one or the other.')
777
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000778 # Input and output objects. The general principle is like
779 # this:
780 #
781 # Parent Child
782 # ------ -----
783 # p2cwrite ---stdin---> p2cread
784 # c2pread <--stdout--- c2pwrite
785 # errread <--stderr--- errwrite
786 #
787 # On POSIX, the child objects are file descriptors. On
788 # Windows, these are Windows file handles. The parent objects
789 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000790 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000791 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000792
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000793 (p2cread, p2cwrite,
794 c2pread, c2pwrite,
795 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
796
Antoine Pitrouc9982322011-01-04 19:07:07 +0000797 # We wrap OS handles *before* launching the child, otherwise a
798 # quickly terminating child could make our fds unwrappable
799 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000800
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700801 if _mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000802 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000803 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000804 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000805 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000806 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000807 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000808
andyclegg7fed7bd2017-10-23 03:01:19 +0100809 self.text_mode = encoding or errors or text or universal_newlines
Tim Peterse718f612004-10-12 21:51:32 +0000810
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800811 # How long to resume waiting on a child after the first ^C.
812 # There is no right value for this. The purpose is to be polite
813 # yet remain good for interactive users trying to exit a tool.
814 self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber()
815
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700816 self._closed_child_pipe_fds = False
Steve Dower050acae2016-09-06 20:16:17 -0700817
Alexey Izbysheva2670562018-10-20 03:22:31 +0300818 if self.text_mode:
819 if bufsize == 1:
820 line_buffering = True
821 # Use the default buffer size for the underlying binary streams
822 # since they don't support line buffering.
823 bufsize = -1
824 else:
825 line_buffering = False
826
Antoine Pitrouc9982322011-01-04 19:07:07 +0000827 try:
Steve Dower050acae2016-09-06 20:16:17 -0700828 if p2cwrite != -1:
829 self.stdin = io.open(p2cwrite, 'wb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100830 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700831 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
Alexey Izbysheva2670562018-10-20 03:22:31 +0300832 line_buffering=line_buffering,
Steve Dower050acae2016-09-06 20:16:17 -0700833 encoding=encoding, errors=errors)
834 if c2pread != -1:
835 self.stdout = io.open(c2pread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100836 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700837 self.stdout = io.TextIOWrapper(self.stdout,
838 encoding=encoding, errors=errors)
839 if errread != -1:
840 self.stderr = io.open(errread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100841 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700842 self.stderr = io.TextIOWrapper(self.stderr,
843 encoding=encoding, errors=errors)
844
Antoine Pitrouc9982322011-01-04 19:07:07 +0000845 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300846 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000847 startupinfo, creationflags, shell,
848 p2cread, p2cwrite,
849 c2pread, c2pwrite,
850 errread, errwrite,
851 restore_signals, start_new_session)
852 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800853 # Cleanup if the child failed starting.
854 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000855 try:
856 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200857 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800858 pass # Ignore EBADF or other errors.
859
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700860 if not self._closed_child_pipe_fds:
861 to_close = []
862 if stdin == PIPE:
863 to_close.append(p2cread)
864 if stdout == PIPE:
865 to_close.append(c2pwrite)
866 if stderr == PIPE:
867 to_close.append(errwrite)
868 if hasattr(self, '_devnull'):
869 to_close.append(self._devnull)
870 for fd in to_close:
871 try:
Segev Finer4d385172017-08-18 16:18:13 +0300872 if _mswindows and isinstance(fd, Handle):
873 fd.Close()
874 else:
875 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700876 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700877 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800878
Antoine Pitrouc9982322011-01-04 19:07:07 +0000879 raise
880
andyclegg7fed7bd2017-10-23 03:01:19 +0100881 @property
882 def universal_newlines(self):
883 # universal_newlines as retained as an alias of text_mode for API
luzpaza5293b42017-11-05 07:37:50 -0600884 # compatibility. bpo-31756
andyclegg7fed7bd2017-10-23 03:01:19 +0100885 return self.text_mode
886
887 @universal_newlines.setter
888 def universal_newlines(self, universal_newlines):
889 self.text_mode = bool(universal_newlines)
890
Steve Dower050acae2016-09-06 20:16:17 -0700891 def _translate_newlines(self, data, encoding, errors):
892 data = data.decode(encoding, errors)
Andrew Svetlov82860712012-08-19 22:13:41 +0300893 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000894
Brian Curtin79cdb662010-12-03 02:46:02 +0000895 def __enter__(self):
896 return self
897
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800898 def __exit__(self, exc_type, value, traceback):
Brian Curtin79cdb662010-12-03 02:46:02 +0000899 if self.stdout:
900 self.stdout.close()
901 if self.stderr:
902 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200903 try: # Flushing a BufferedWriter may raise an error
904 if self.stdin:
905 self.stdin.close()
906 finally:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800907 if exc_type == KeyboardInterrupt:
908 # https://bugs.python.org/issue25942
909 # In the case of a KeyboardInterrupt we assume the SIGINT
910 # was also already sent to our child processes. We can't
911 # block indefinitely as that is not user friendly.
912 # If we have not already waited a brief amount of time in
913 # an interrupted .wait() or .communicate() call, do so here
914 # for consistency.
915 if self._sigint_wait_secs > 0:
916 try:
917 self._wait(timeout=self._sigint_wait_secs)
918 except TimeoutExpired:
919 pass
920 self._sigint_wait_secs = 0 # Note that this has been done.
921 return # resume the KeyboardInterrupt
922
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200923 # Wait for the process to terminate, to avoid zombies.
924 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000925
Victor Stinner9505b032017-01-06 10:44:44 +0100926 def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200927 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000928 # We didn't get to successfully create a child process.
929 return
Victor Stinner5a48e212016-05-20 12:11:15 +0200930 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800931 # Not reading subprocess exit status creates a zombie process which
Victor Stinnerc206f1e2016-06-14 16:42:59 +0200932 # is only destroyed at the parent python process exit
Victor Stinner9505b032017-01-06 10:44:44 +0100933 _warn("subprocess %s is still running" % self.pid,
934 ResourceWarning, source=self)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000935 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000936 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000937 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000938 # Child is still running, keep us alive until we can wait on it.
939 _active.append(self)
940
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200941 def _get_devnull(self):
942 if not hasattr(self, '_devnull'):
943 self._devnull = os.open(os.devnull, os.O_RDWR)
944 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000945
Victor Stinnera5e881d2015-01-14 17:07:59 +0100946 def _stdin_write(self, input):
947 if input:
948 try:
949 self.stdin.write(input)
950 except BrokenPipeError:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000951 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200952 except OSError as exc:
953 if exc.errno == errno.EINVAL:
954 # bpo-19612, bpo-30418: On Windows, stdin.write() fails
955 # with EINVAL if the child process exited or if the child
956 # process is still running but closed the pipe.
Victor Stinnera5e881d2015-01-14 17:07:59 +0100957 pass
958 else:
959 raise
Victor Stinnerd52aa312017-06-08 17:30:39 +0200960
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000961 try:
962 self.stdin.close()
963 except BrokenPipeError:
964 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200965 except OSError as exc:
966 if exc.errno == errno.EINVAL:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000967 pass
968 else:
969 raise
Victor Stinnera5e881d2015-01-14 17:07:59 +0100970
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400971 def communicate(self, input=None, timeout=None):
Joel Schaerer88031a92017-09-13 21:11:20 +0200972 """Interact with process: Send data to stdin and close it.
973 Read data from stdout and stderr, until end-of-file is
974 reached. Wait for process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +0000975
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400976 The optional "input" argument should be data to be sent to the
andyclegg7fed7bd2017-10-23 03:01:19 +0100977 child process, or None, if no data should be sent to the child.
978 communicate() returns a tuple (stdout, stderr).
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400979
andyclegg7fed7bd2017-10-23 03:01:19 +0100980 By default, all communication is in bytes, and therefore any
981 "input" should be bytes, and the (stdout, stderr) will be bytes.
982 If in text mode (indicated by self.text_mode), any "input" should
983 be a string, and (stdout, stderr) will be strings decoded
984 according to locale encoding, or by "encoding" if set. Text mode
985 is triggered by setting any of text, encoding, errors or
986 universal_newlines.
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400987 """
Peter Astrand23109f02005-03-03 20:28:59 +0000988
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400989 if self._communication_started and input:
990 raise ValueError("Cannot send input after starting communication")
991
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400992 # Optimization: If we are not worried about timeouts, we haven't
993 # started communicating, and we have one or zero pipes, using select()
994 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200995 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400996 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000997 stdout = None
998 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000999 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001000 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +00001001 elif self.stdout:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001002 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001003 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +00001004 elif self.stderr:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001005 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001006 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +00001007 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +02001008 else:
1009 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +02001010 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +02001011 else:
1012 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +00001013
Victor Stinner7a8d0812011-04-05 13:13:08 +02001014 try:
1015 stdout, stderr = self._communicate(input, endtime, timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001016 except KeyboardInterrupt:
1017 # https://bugs.python.org/issue25942
1018 # See the detailed comment in .wait().
1019 if timeout is not None:
1020 sigint_timeout = min(self._sigint_wait_secs,
1021 self._remaining_time(endtime))
1022 else:
1023 sigint_timeout = self._sigint_wait_secs
1024 self._sigint_wait_secs = 0 # nothing else should wait.
1025 try:
1026 self._wait(timeout=sigint_timeout)
1027 except TimeoutExpired:
1028 pass
1029 raise # resume the KeyboardInterrupt
1030
Victor Stinner7a8d0812011-04-05 13:13:08 +02001031 finally:
1032 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001033
Victor Stinner7a8d0812011-04-05 13:13:08 +02001034 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001035
1036 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +00001037
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001038
Georg Brandl6aa2d1f2008-08-12 08:35:52 +00001039 def poll(self):
Martin Panter4afdca02016-10-25 22:20:48 +00001040 """Check if child process has terminated. Set and return returncode
1041 attribute."""
Georg Brandl6aa2d1f2008-08-12 08:35:52 +00001042 return self._internal_poll()
1043
1044
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001045 def _remaining_time(self, endtime):
1046 """Convenience for _communicate when computing timeouts."""
1047 if endtime is None:
1048 return None
1049 else:
Victor Stinner949d8c92012-05-30 13:30:32 +02001050 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001051
1052
Reid Kleckner2b228f02011-03-16 16:57:54 -04001053 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001054 """Convenience for checking if a timeout has expired."""
1055 if endtime is None:
1056 return
Victor Stinner949d8c92012-05-30 13:30:32 +02001057 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001058 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001059
1060
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001061 def wait(self, timeout=None):
1062 """Wait for child process to terminate; returns self.returncode."""
1063 if timeout is not None:
1064 endtime = _time() + timeout
1065 try:
1066 return self._wait(timeout=timeout)
1067 except KeyboardInterrupt:
1068 # https://bugs.python.org/issue25942
1069 # The first keyboard interrupt waits briefly for the child to
1070 # exit under the common assumption that it also received the ^C
1071 # generated SIGINT and will exit rapidly.
1072 if timeout is not None:
1073 sigint_timeout = min(self._sigint_wait_secs,
1074 self._remaining_time(endtime))
1075 else:
1076 sigint_timeout = self._sigint_wait_secs
1077 self._sigint_wait_secs = 0 # nothing else should wait.
1078 try:
1079 self._wait(timeout=sigint_timeout)
1080 except TimeoutExpired:
1081 pass
1082 raise # resume the KeyboardInterrupt
1083
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001084 def _close_pipe_fds(self,
1085 p2cread, p2cwrite,
1086 c2pread, c2pwrite,
1087 errread, errwrite):
1088 # self._devnull is not always defined.
1089 devnull_fd = getattr(self, '_devnull', None)
1090
Giampaolo Rodolabafa8482019-01-29 22:14:24 +01001091 with contextlib.ExitStack() as stack:
1092 if _mswindows:
1093 if p2cread != -1:
1094 stack.callback(p2cread.Close)
1095 if c2pwrite != -1:
1096 stack.callback(c2pwrite.Close)
1097 if errwrite != -1:
1098 stack.callback(errwrite.Close)
1099 else:
1100 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
1101 stack.callback(os.close, p2cread)
1102 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
1103 stack.callback(os.close, c2pwrite)
1104 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
1105 stack.callback(os.close, errwrite)
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001106
Giampaolo Rodolabafa8482019-01-29 22:14:24 +01001107 if devnull_fd is not None:
1108 stack.callback(os.close, devnull_fd)
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001109
1110 # Prevent a double close of these handles/fds from __init__ on error.
1111 self._closed_child_pipe_fds = True
1112
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -07001113 if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001114 #
1115 # Windows methods
1116 #
1117 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001118 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001119 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1120 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001121 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001122 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +00001123
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001124 p2cread, p2cwrite = -1, -1
1125 c2pread, c2pwrite = -1, -1
1126 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001127
Peter Astrandd38ddf42005-02-10 08:32:50 +00001128 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001129 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001130 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001131 p2cread, _ = _winapi.CreatePipe(None, 0)
1132 p2cread = Handle(p2cread)
1133 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001134 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001135 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
1136 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001137 elif stdin == DEVNULL:
1138 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001139 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001140 p2cread = msvcrt.get_osfhandle(stdin)
1141 else:
1142 # Assuming file-like object
1143 p2cread = msvcrt.get_osfhandle(stdin.fileno())
1144 p2cread = self._make_inheritable(p2cread)
1145
Peter Astrandd38ddf42005-02-10 08:32:50 +00001146 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001147 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001148 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001149 _, c2pwrite = _winapi.CreatePipe(None, 0)
1150 c2pwrite = Handle(c2pwrite)
1151 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001152 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001153 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
1154 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001155 elif stdout == DEVNULL:
1156 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001157 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001158 c2pwrite = msvcrt.get_osfhandle(stdout)
1159 else:
1160 # Assuming file-like object
1161 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1162 c2pwrite = self._make_inheritable(c2pwrite)
1163
Peter Astrandd38ddf42005-02-10 08:32:50 +00001164 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001165 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001166 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001167 _, errwrite = _winapi.CreatePipe(None, 0)
1168 errwrite = Handle(errwrite)
1169 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001170 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001171 errread, errwrite = _winapi.CreatePipe(None, 0)
1172 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001173 elif stderr == STDOUT:
1174 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001175 elif stderr == DEVNULL:
1176 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001177 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001178 errwrite = msvcrt.get_osfhandle(stderr)
1179 else:
1180 # Assuming file-like object
1181 errwrite = msvcrt.get_osfhandle(stderr.fileno())
1182 errwrite = self._make_inheritable(errwrite)
1183
1184 return (p2cread, p2cwrite,
1185 c2pread, c2pwrite,
1186 errread, errwrite)
1187
1188
1189 def _make_inheritable(self, handle):
1190 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001191 h = _winapi.DuplicateHandle(
1192 _winapi.GetCurrentProcess(), handle,
1193 _winapi.GetCurrentProcess(), 0, 1,
1194 _winapi.DUPLICATE_SAME_ACCESS)
1195 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001196
1197
Segev Finerb2a60832017-12-18 11:28:19 +02001198 def _filter_handle_list(self, handle_list):
1199 """Filter out console handles that can't be used
1200 in lpAttributeList["handle_list"] and make sure the list
1201 isn't empty. This also removes duplicate handles."""
1202 # An handle with it's lowest two bits set might be a special console
1203 # handle that if passed in lpAttributeList["handle_list"], will
1204 # cause it to fail.
1205 return list({handle for handle in handle_list
1206 if handle & 0x3 != 0x3
1207 or _winapi.GetFileType(handle) !=
1208 _winapi.FILE_TYPE_CHAR})
1209
1210
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001211 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001212 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001213 startupinfo, creationflags, shell,
1214 p2cread, p2cwrite,
1215 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001216 errread, errwrite,
1217 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001218 """Execute program (MS Windows version)"""
1219
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001220 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001221
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +03001222 if isinstance(args, str):
1223 pass
1224 elif isinstance(args, bytes):
1225 if shell:
1226 raise TypeError('bytes args is not allowed on Windows')
1227 args = list2cmdline([args])
1228 elif isinstance(args, os.PathLike):
1229 if shell:
1230 raise TypeError('path-like args is not allowed when '
1231 'shell is true')
1232 args = list2cmdline([args])
1233 else:
Serhiy Storchakabe50a7b2018-02-28 01:03:46 +02001234 args = list2cmdline(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001235
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +03001236 if executable is not None:
1237 executable = os.fsdecode(executable)
1238
Peter Astrandc1d65362004-11-07 14:30:34 +00001239 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001240 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001241 startupinfo = STARTUPINFO()
Victor Stinner483422f2018-07-05 22:54:17 +02001242 else:
1243 # bpo-34044: Copy STARTUPINFO since it is modified above,
1244 # so the caller can reuse it multiple times.
1245 startupinfo = startupinfo.copy()
Segev Finerb2a60832017-12-18 11:28:19 +02001246
1247 use_std_handles = -1 not in (p2cread, c2pwrite, errwrite)
1248 if use_std_handles:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001249 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001250 startupinfo.hStdInput = p2cread
1251 startupinfo.hStdOutput = c2pwrite
1252 startupinfo.hStdError = errwrite
1253
Segev Finerb2a60832017-12-18 11:28:19 +02001254 attribute_list = startupinfo.lpAttributeList
1255 have_handle_list = bool(attribute_list and
1256 "handle_list" in attribute_list and
1257 attribute_list["handle_list"])
1258
1259 # If we were given an handle_list or need to create one
1260 if have_handle_list or (use_std_handles and close_fds):
1261 if attribute_list is None:
1262 attribute_list = startupinfo.lpAttributeList = {}
1263 handle_list = attribute_list["handle_list"] = \
1264 list(attribute_list.get("handle_list", []))
1265
1266 if use_std_handles:
1267 handle_list += [int(p2cread), int(c2pwrite), int(errwrite)]
1268
1269 handle_list[:] = self._filter_handle_list(handle_list)
1270
1271 if handle_list:
1272 if not close_fds:
1273 warnings.warn("startupinfo.lpAttributeList['handle_list'] "
1274 "overriding close_fds", RuntimeWarning)
1275
1276 # When using the handle_list we always request to inherit
1277 # handles but the only handles that will be inherited are
1278 # the ones in the handle_list
1279 close_fds = False
1280
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001281 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001282 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1283 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001284 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001285 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001286
Steve Dower60419a72019-06-24 08:42:54 -07001287 if cwd is not None:
1288 cwd = os.fsdecode(cwd)
1289
1290 sys.audit("subprocess.Popen", executable, args, cwd, env)
1291
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001292 # Start the process
1293 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001294 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001295 # no special security
1296 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001297 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001298 creationflags,
1299 env,
Steve Dower60419a72019-06-24 08:42:54 -07001300 cwd,
Tim Peterse8374a52004-10-13 03:15:00 +00001301 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001302 finally:
1303 # Child is launched. Close the parent's copy of those pipe
1304 # handles that only the child should have open. You need
1305 # to make sure that no handles to the write end of the
1306 # output pipe are maintained in this process or else the
1307 # pipe will not close when the child process exits and the
1308 # ReadFile will hang.
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001309 self._close_pipe_fds(p2cread, p2cwrite,
1310 c2pread, c2pwrite,
1311 errread, errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001312
1313 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001314 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001315 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001316 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001317 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001318
Brett Cannon84df1e62010-05-14 00:33:40 +00001319 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001320 _WaitForSingleObject=_winapi.WaitForSingleObject,
1321 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1322 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001323 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001324 attribute.
1325
1326 This method is called by __del__, so it can only refer to objects
1327 in its local scope.
1328
1329 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001330 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001331 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1332 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001333 return self.returncode
1334
1335
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001336 def _wait(self, timeout):
1337 """Internal implementation of wait() on Windows."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001338 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001339 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001340 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001341 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001342 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001343 # API note: Returns immediately if timeout_millis == 0.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001344 result = _winapi.WaitForSingleObject(self._handle,
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001345 timeout_millis)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001346 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001347 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001348 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001349 return self.returncode
1350
1351
1352 def _readerthread(self, fh, buffer):
1353 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001354 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001355
1356
Reid Kleckner2b228f02011-03-16 16:57:54 -04001357 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001358 # Start reader threads feeding into a list hanging off of this
1359 # object, unless they've already been started.
1360 if self.stdout and not hasattr(self, "_stdout_buff"):
1361 self._stdout_buff = []
1362 self.stdout_thread = \
1363 threading.Thread(target=self._readerthread,
1364 args=(self.stdout, self._stdout_buff))
1365 self.stdout_thread.daemon = True
1366 self.stdout_thread.start()
1367 if self.stderr and not hasattr(self, "_stderr_buff"):
1368 self._stderr_buff = []
1369 self.stderr_thread = \
1370 threading.Thread(target=self._readerthread,
1371 args=(self.stderr, self._stderr_buff))
1372 self.stderr_thread.daemon = True
1373 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001374
1375 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001376 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001377
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001378 # Wait for the reader threads, or time out. If we time out, the
1379 # threads remain reading and the fds left open in case the user
1380 # calls communicate again.
1381 if self.stdout is not None:
1382 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001383 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001384 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001385 if self.stderr is not None:
1386 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001387 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001388 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001389
1390 # Collect the output from and close both pipes, now that we know
1391 # both have been read successfully.
1392 stdout = None
1393 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001394 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001395 stdout = self._stdout_buff
1396 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001397 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001398 stderr = self._stderr_buff
1399 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001400
1401 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001402 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001403 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001404 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001405 stderr = stderr[0]
1406
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001407 return (stdout, stderr)
1408
Christian Heimesa342c012008-04-20 21:01:16 +00001409 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001410 """Send a signal to the process."""
1411 # Don't signal a process that we know has already died.
1412 if self.returncode is not None:
1413 return
Christian Heimesa342c012008-04-20 21:01:16 +00001414 if sig == signal.SIGTERM:
1415 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001416 elif sig == signal.CTRL_C_EVENT:
1417 os.kill(self.pid, signal.CTRL_C_EVENT)
1418 elif sig == signal.CTRL_BREAK_EVENT:
1419 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001420 else:
Brian Curtin19651362010-09-07 13:24:38 +00001421 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001422
1423 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001424 """Terminates the process."""
1425 # Don't terminate a process that we know has already died.
1426 if self.returncode is not None:
1427 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001428 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001429 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001430 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001431 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1432 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001433 rc = _winapi.GetExitCodeProcess(self._handle)
1434 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001435 raise
1436 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001437
1438 kill = terminate
1439
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001440 else:
1441 #
1442 # POSIX methods
1443 #
1444 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001445 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001446 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1447 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001448 p2cread, p2cwrite = -1, -1
1449 c2pread, c2pwrite = -1, -1
1450 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001451
Peter Astrandd38ddf42005-02-10 08:32:50 +00001452 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001453 pass
1454 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001455 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001456 elif stdin == DEVNULL:
1457 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001458 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001459 p2cread = stdin
1460 else:
1461 # Assuming file-like object
1462 p2cread = stdin.fileno()
1463
Peter Astrandd38ddf42005-02-10 08:32:50 +00001464 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001465 pass
1466 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001467 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001468 elif stdout == DEVNULL:
1469 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001470 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001471 c2pwrite = stdout
1472 else:
1473 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001474 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001475
Peter Astrandd38ddf42005-02-10 08:32:50 +00001476 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001477 pass
1478 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001479 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001480 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001481 if c2pwrite != -1:
1482 errwrite = c2pwrite
1483 else: # child's stdout is not set, use parent's stdout
1484 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001485 elif stderr == DEVNULL:
1486 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001487 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001488 errwrite = stderr
1489 else:
1490 # Assuming file-like object
1491 errwrite = stderr.fileno()
1492
1493 return (p2cread, p2cwrite,
1494 c2pread, c2pwrite,
1495 errread, errwrite)
1496
1497
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001498 def _posix_spawn(self, args, executable, env, restore_signals,
1499 p2cread, p2cwrite,
1500 c2pread, c2pwrite,
1501 errread, errwrite):
Victor Stinner8c349562019-01-16 23:38:06 +01001502 """Execute program using os.posix_spawn()."""
Victor Stinner9daecf32019-01-16 00:02:35 +01001503 if env is None:
1504 env = os.environ
1505
1506 kwargs = {}
1507 if restore_signals:
1508 # See _Py_RestoreSignals() in Python/pylifecycle.c
1509 sigset = []
1510 for signame in ('SIGPIPE', 'SIGXFZ', 'SIGXFSZ'):
1511 signum = getattr(signal, signame, None)
1512 if signum is not None:
1513 sigset.append(signum)
1514 kwargs['setsigdef'] = sigset
1515
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001516 file_actions = []
1517 for fd in (p2cwrite, c2pread, errread):
1518 if fd != -1:
1519 file_actions.append((os.POSIX_SPAWN_CLOSE, fd))
1520 for fd, fd2 in (
1521 (p2cread, 0),
1522 (c2pwrite, 1),
1523 (errwrite, 2),
1524 ):
1525 if fd != -1:
1526 file_actions.append((os.POSIX_SPAWN_DUP2, fd, fd2))
1527 if file_actions:
1528 kwargs['file_actions'] = file_actions
1529
Victor Stinner8c349562019-01-16 23:38:06 +01001530 self.pid = os.posix_spawn(executable, args, env, **kwargs)
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001531 self._child_created = True
1532
1533 self._close_pipe_fds(p2cread, p2cwrite,
1534 c2pread, c2pwrite,
1535 errread, errwrite)
Victor Stinner9daecf32019-01-16 00:02:35 +01001536
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001537 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001538 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001539 startupinfo, creationflags, shell,
1540 p2cread, p2cwrite,
1541 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001542 errread, errwrite,
1543 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001544 """Execute program (POSIX version)"""
1545
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001546 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001547 args = [args]
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +03001548 elif isinstance(args, os.PathLike):
1549 if shell:
1550 raise TypeError('path-like args is not allowed when '
1551 'shell is true')
1552 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001553 else:
Serhiy Storchakabe50a7b2018-02-28 01:03:46 +02001554 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001555
1556 if shell:
Xavier de Gayeb35fc622016-12-13 16:32:21 +01001557 # On Android the default shell is at '/system/bin/sh'.
1558 unix_shell = ('/system/bin/sh' if
1559 hasattr(sys, 'getandroidapilevel') else '/bin/sh')
1560 args = [unix_shell, "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001561 if executable:
1562 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001563
Peter Astrandd38ddf42005-02-10 08:32:50 +00001564 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001565 executable = args[0]
Victor Stinner9daecf32019-01-16 00:02:35 +01001566
Steve Dower60419a72019-06-24 08:42:54 -07001567 sys.audit("subprocess.Popen", executable, args, cwd, env)
1568
Victor Stinner9daecf32019-01-16 00:02:35 +01001569 if (_USE_POSIX_SPAWN
Victor Stinner8c349562019-01-16 23:38:06 +01001570 and os.path.dirname(executable)
Victor Stinner9daecf32019-01-16 00:02:35 +01001571 and preexec_fn is None
1572 and not close_fds
1573 and not pass_fds
1574 and cwd is None
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001575 and (p2cread == -1 or p2cread > 2)
1576 and (c2pwrite == -1 or c2pwrite > 2)
1577 and (errwrite == -1 or errwrite > 2)
Victor Stinner9daecf32019-01-16 00:02:35 +01001578 and not start_new_session):
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001579 self._posix_spawn(args, executable, env, restore_signals,
1580 p2cread, p2cwrite,
1581 c2pread, c2pwrite,
1582 errread, errwrite)
Victor Stinner9daecf32019-01-16 00:02:35 +01001583 return
1584
Gregory P. Smith5591b022012-10-10 03:34:47 -07001585 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001586
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001587 # For transferring possible exec failure from child to parent.
1588 # Data format: "exception name:hex errno:description"
1589 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001590 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001591 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1592 low_fds_to_close = []
1593 while errpipe_write < 3:
1594 low_fds_to_close.append(errpipe_write)
1595 errpipe_write = os.dup(errpipe_write)
1596 for low_fd in low_fds_to_close:
1597 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001598 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001599 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001600 # We must avoid complex work that could involve
1601 # malloc or free in the child process to avoid
1602 # potential deadlocks, thus we do all this here.
1603 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001604
Victor Stinner372b8382011-06-21 17:24:21 +02001605 if env is not None:
Serhiy Storchakad174d242017-06-23 19:39:27 +03001606 env_list = []
1607 for k, v in env.items():
1608 k = os.fsencode(k)
1609 if b'=' in k:
1610 raise ValueError("illegal environment variable name")
1611 env_list.append(k + b'=' + os.fsencode(v))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001612 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001613 env_list = None # Use execv instead of execve.
1614 executable = os.fsencode(executable)
1615 if os.path.dirname(executable):
1616 executable_list = (executable,)
1617 else:
1618 # This matches the behavior of os._execvpe().
1619 executable_list = tuple(
1620 os.path.join(os.fsencode(dir), executable)
1621 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001622 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001623 fds_to_keep.add(errpipe_write)
1624 self.pid = _posixsubprocess.fork_exec(
1625 args, executable_list,
Serhiy Storchaka66bffd12017-04-19 21:12:46 +03001626 close_fds, tuple(sorted(map(int, fds_to_keep))),
1627 cwd, env_list,
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001628 p2cread, p2cwrite, c2pread, c2pwrite,
1629 errread, errwrite,
1630 errpipe_read, errpipe_write,
1631 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001632 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001633 finally:
1634 # be sure the FD is closed no matter what
1635 os.close(errpipe_write)
1636
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001637 self._close_pipe_fds(p2cread, p2cwrite,
1638 c2pread, c2pwrite,
1639 errread, errwrite)
Facundo Batista10706e22009-06-19 20:34:30 +00001640
1641 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001642 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001643 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001644 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001645 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001646 errpipe_data += part
1647 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001648 break
Facundo Batista10706e22009-06-19 20:34:30 +00001649 finally:
1650 # be sure the FD is closed no matter what
1651 os.close(errpipe_read)
1652
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001653 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001654 try:
Victor Stinnera58e2c52016-05-20 12:08:12 +02001655 pid, sts = os.waitpid(self.pid, 0)
1656 if pid == self.pid:
1657 self._handle_exitstatus(sts)
1658 else:
1659 self.returncode = sys.maxsize
Victor Stinnera5e881d2015-01-14 17:07:59 +01001660 except ChildProcessError:
1661 pass
Victor Stinnera58e2c52016-05-20 12:08:12 +02001662
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001663 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001664 exception_name, hex_errno, err_msg = (
1665 errpipe_data.split(b':', 2))
Ammar Askar3fc499b2017-09-06 02:41:30 -04001666 # The encoding here should match the encoding
1667 # written in by the subprocess implementations
1668 # like _posixsubprocess
1669 err_msg = err_msg.decode()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001670 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001671 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001672 hex_errno = b'0'
Ammar Askar3fc499b2017-09-06 02:41:30 -04001673 err_msg = 'Bad exception data from child: {!r}'.format(
1674 bytes(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001675 child_exception_type = getattr(
1676 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001677 SubprocessError)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001678 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001679 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001680 child_exec_never_called = (err_msg == "noexec")
1681 if child_exec_never_called:
1682 err_msg = ""
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001683 # The error must be from chdir(cwd).
1684 err_filename = cwd
1685 else:
1686 err_filename = orig_executable
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001687 if errno_num != 0:
1688 err_msg = os.strerror(errno_num)
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001689 raise child_exception_type(errno_num, err_msg, err_filename)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001690 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001691
1692
Brett Cannon84df1e62010-05-14 00:33:40 +00001693 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1694 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001695 _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
1696 _WSTOPSIG=os.WSTOPSIG):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001697 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001698 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001699 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001700 if _WIFSIGNALED(sts):
1701 self.returncode = -_WTERMSIG(sts)
1702 elif _WIFEXITED(sts):
1703 self.returncode = _WEXITSTATUS(sts)
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001704 elif _WIFSTOPPED(sts):
1705 self.returncode = -_WSTOPSIG(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001706 else:
1707 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001708 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001709
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001710
Brett Cannon84df1e62010-05-14 00:33:40 +00001711 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001712 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001713 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001714 attribute.
1715
1716 This method is called by __del__, so it cannot reference anything
1717 outside of the local scope (nor can any methods it calls).
1718
1719 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001720 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001721 if not self._waitpid_lock.acquire(False):
1722 # Something else is busy calling waitpid. Don't allow two
1723 # at once. We know nothing yet.
1724 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001725 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001726 if self.returncode is not None:
1727 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001728 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001729 if pid == self.pid:
1730 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001731 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001732 if _deadstate is not None:
1733 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001734 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001735 # This happens if SIGCLD is set to be ignored or
1736 # waiting for child processes has otherwise been
1737 # disabled for our process. This child is dead, we
1738 # can't get the status.
1739 # http://bugs.python.org/issue15756
1740 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001741 finally:
1742 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001743 return self.returncode
1744
1745
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001746 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001747 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001748 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001749 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001750 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001751 # This happens if SIGCLD is set to be ignored or waiting
1752 # for child processes has otherwise been disabled for our
1753 # process. This child is dead, we can't get the status.
1754 pid = self.pid
1755 sts = 0
1756 return (pid, sts)
1757
1758
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001759 def _wait(self, timeout):
1760 """Internal implementation of wait() on POSIX."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001761 if self.returncode is not None:
1762 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001763
Gregory P. Smith82604e02016-11-20 16:31:07 -08001764 if timeout is not None:
1765 endtime = _time() + timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001766 # Enter a busy loop if we have a timeout. This busy loop was
1767 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1768 delay = 0.0005 # 500 us -> initial delay of 1 ms
1769 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001770 if self._waitpid_lock.acquire(False):
1771 try:
1772 if self.returncode is not None:
1773 break # Another thread waited.
1774 (pid, sts) = self._try_wait(os.WNOHANG)
1775 assert pid == self.pid or pid == 0
1776 if pid == self.pid:
1777 self._handle_exitstatus(sts)
1778 break
1779 finally:
1780 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001781 remaining = self._remaining_time(endtime)
1782 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001783 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001784 delay = min(delay * 2, remaining, .05)
1785 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001786 else:
1787 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001788 with self._waitpid_lock:
1789 if self.returncode is not None:
1790 break # Another thread waited.
1791 (pid, sts) = self._try_wait(0)
1792 # Check the pid and loop as waitpid has been known to
1793 # return 0 even without WNOHANG in odd situations.
1794 # http://bugs.python.org/issue14396.
1795 if pid == self.pid:
1796 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001797 return self.returncode
1798
1799
Reid Kleckner2b228f02011-03-16 16:57:54 -04001800 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001801 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001802 # Flush stdio buffer. This might block, if the user has
1803 # been writing to .stdin in an uncontrolled fashion.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001804 try:
1805 self.stdin.flush()
1806 except BrokenPipeError:
1807 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001808 if not input:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001809 try:
1810 self.stdin.close()
1811 except BrokenPipeError:
1812 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001813
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001814 stdout = None
1815 stderr = None
1816
1817 # Only create this mapping if we haven't already.
1818 if not self._communication_started:
1819 self._fileobj2output = {}
1820 if self.stdout:
1821 self._fileobj2output[self.stdout] = []
1822 if self.stderr:
1823 self._fileobj2output[self.stderr] = []
1824
1825 if self.stdout:
1826 stdout = self._fileobj2output[self.stdout]
1827 if self.stderr:
1828 stderr = self._fileobj2output[self.stderr]
1829
1830 self._save_input(input)
1831
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001832 if self._input:
1833 input_view = memoryview(self._input)
1834
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001835 with _PopenSelector() as selector:
1836 if self.stdin and input:
1837 selector.register(self.stdin, selectors.EVENT_WRITE)
1838 if self.stdout:
1839 selector.register(self.stdout, selectors.EVENT_READ)
1840 if self.stderr:
1841 selector.register(self.stderr, selectors.EVENT_READ)
1842
1843 while selector.get_map():
1844 timeout = self._remaining_time(endtime)
1845 if timeout is not None and timeout < 0:
1846 raise TimeoutExpired(self.args, orig_timeout)
1847
1848 ready = selector.select(timeout)
1849 self._check_timeout(endtime, orig_timeout)
1850
1851 # XXX Rewrite these to use non-blocking I/O on the file
1852 # objects; they are no longer using C stdio!
1853
1854 for key, events in ready:
1855 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001856 chunk = input_view[self._input_offset :
1857 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001858 try:
1859 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001860 except BrokenPipeError:
1861 selector.unregister(key.fileobj)
1862 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001863 else:
1864 if self._input_offset >= len(self._input):
1865 selector.unregister(key.fileobj)
1866 key.fileobj.close()
1867 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001868 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001869 if not data:
1870 selector.unregister(key.fileobj)
1871 key.fileobj.close()
1872 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001873
1874 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001875
1876 # All data exchanged. Translate lists into strings.
1877 if stdout is not None:
1878 stdout = b''.join(stdout)
1879 if stderr is not None:
1880 stderr = b''.join(stderr)
1881
1882 # Translate newlines, if requested.
1883 # This also turns bytes into strings.
andyclegg7fed7bd2017-10-23 03:01:19 +01001884 if self.text_mode:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001885 if stdout is not None:
1886 stdout = self._translate_newlines(stdout,
Steve Dower050acae2016-09-06 20:16:17 -07001887 self.stdout.encoding,
1888 self.stdout.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001889 if stderr is not None:
1890 stderr = self._translate_newlines(stderr,
Steve Dower050acae2016-09-06 20:16:17 -07001891 self.stderr.encoding,
1892 self.stderr.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001893
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001894 return (stdout, stderr)
1895
1896
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001897 def _save_input(self, input):
1898 # This method is called from the _communicate_with_*() methods
1899 # so that if we time out while communicating, we can continue
1900 # sending input if we retry.
1901 if self.stdin and self._input is None:
1902 self._input_offset = 0
1903 self._input = input
andyclegg7fed7bd2017-10-23 03:01:19 +01001904 if input is not None and self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -07001905 self._input = self._input.encode(self.stdin.encoding,
1906 self.stdin.errors)
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001907
1908
Christian Heimesa342c012008-04-20 21:01:16 +00001909 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001910 """Send a signal to the process."""
1911 # Skip signalling a process that we know has already died.
1912 if self.returncode is None:
1913 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00001914
1915 def terminate(self):
1916 """Terminate the process with SIGTERM
1917 """
1918 self.send_signal(signal.SIGTERM)
1919
1920 def kill(self):
1921 """Kill the process with SIGKILL
1922 """
1923 self.send_signal(signal.SIGKILL)