blob: c0bda96cbc0339e1e363a6348353909963d051e0 [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
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200221# This lists holds Popen instances for which the underlying process had not
222# exited at the time its __del__ method got called: those processes are wait()ed
223# for synchronously from _cleanup() when a new Popen object is created, to avoid
224# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000225_active = []
226
227def _cleanup():
228 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000229 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200230 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000231 try:
232 _active.remove(inst)
233 except ValueError:
234 # This can happen if two threads create a new Popen instance.
235 # It's harmless that it was already removed, so ignore.
236 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000237
238PIPE = -1
239STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200240DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000241
242
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200243# XXX This function is only used by multiprocessing and the test suite,
244# but it's here so that it can be imported when Python is compiled without
245# threads.
246
Victor Stinner9def2842016-01-18 12:15:08 +0100247def _optim_args_from_interpreter_flags():
248 """Return a list of command-line arguments reproducing the current
249 optimization settings in sys.flags."""
250 args = []
251 value = sys.flags.optimize
252 if value > 0:
253 args.append('-' + 'O' * value)
254 return args
255
256
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200257def _args_from_interpreter_flags():
258 """Return a list of command-line arguments reproducing the current
Victor Stinner747f48e2017-12-12 22:59:48 +0100259 settings in sys.flags, sys.warnoptions and sys._xoptions."""
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200260 flag_opt_map = {
261 'debug': 'd',
262 # 'inspect': 'i',
263 # 'interactive': 'i',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200264 'dont_write_bytecode': 'B',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200265 'no_site': 'S',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200266 'verbose': 'v',
267 'bytes_warning': 'b',
268 'quiet': 'q',
Victor Stinner9def2842016-01-18 12:15:08 +0100269 # -O is handled in _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200270 }
Victor Stinner9def2842016-01-18 12:15:08 +0100271 args = _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200272 for flag, opt in flag_opt_map.items():
273 v = getattr(sys.flags, flag)
274 if v > 0:
275 args.append('-' + opt * v)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800276
Victor Stinner9de36322018-11-23 17:54:20 +0100277 if sys.flags.isolated:
278 args.append('-I')
279 else:
280 if sys.flags.ignore_environment:
281 args.append('-E')
282 if sys.flags.no_user_site:
283 args.append('-s')
284
Victor Stinnerf39b6742017-11-20 15:24:56 -0800285 # -W options
Victor Stinner747f48e2017-12-12 22:59:48 +0100286 warnopts = sys.warnoptions[:]
287 bytes_warning = sys.flags.bytes_warning
288 xoptions = getattr(sys, '_xoptions', {})
289 dev_mode = ('dev' in xoptions)
290
291 if bytes_warning > 1:
292 warnopts.remove("error::BytesWarning")
293 elif bytes_warning:
294 warnopts.remove("default::BytesWarning")
295 if dev_mode:
296 warnopts.remove('default')
297 for opt in warnopts:
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200298 args.append('-W' + opt)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800299
300 # -X options
Victor Stinner747f48e2017-12-12 22:59:48 +0100301 if dev_mode:
Victor Stinnerf39b6742017-11-20 15:24:56 -0800302 args.extend(('-X', 'dev'))
303 for opt in ('faulthandler', 'tracemalloc', 'importtime',
Victor Stinner91106cd2017-12-13 12:29:09 +0100304 'showalloccount', 'showrefcount', 'utf8'):
Victor Stinnerf39b6742017-11-20 15:24:56 -0800305 if opt in xoptions:
306 value = xoptions[opt]
307 if value is True:
308 arg = opt
309 else:
310 arg = '%s=%s' % (opt, value)
311 args.extend(('-X', arg))
312
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200313 return args
314
315
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400316def call(*popenargs, timeout=None, **kwargs):
317 """Run command with arguments. Wait for command to complete or
318 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000319
320 The arguments are the same as for the Popen constructor. Example:
321
322 retcode = call(["ls", "-l"])
323 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200324 with Popen(*popenargs, **kwargs) as p:
325 try:
326 return p.wait(timeout=timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800327 except: # Including KeyboardInterrupt, wait handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200328 p.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800329 # We don't call p.wait() again as p.__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200330 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000331
332
Peter Astrand454f7672005-01-01 09:36:35 +0000333def check_call(*popenargs, **kwargs):
334 """Run command with arguments. Wait for command to complete. If
335 the exit code was zero then return, otherwise raise
336 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000337 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000338
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400339 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000340
341 check_call(["ls", "-l"])
342 """
343 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000344 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000345 cmd = kwargs.get("args")
346 if cmd is None:
347 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000348 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000349 return 0
350
351
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400352def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700353 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000354
355 If the exit code was non-zero it raises a CalledProcessError. The
356 CalledProcessError object will have the return code in the returncode
357 attribute and output in the output attribute.
358
359 The arguments are the same as for the Popen constructor. Example:
360
361 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000362 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000363
364 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000365 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000366
367 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000368 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000369 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000370 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700371
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300372 There is an additional optional argument, "input", allowing you to
373 pass a string to the subprocess's stdin. If you use this argument
374 you may not also use the Popen constructor's "stdin" argument, as
375 it too will be used internally. Example:
376
377 >>> check_output(["sed", "-e", "s/foo/bar/"],
378 ... input=b"when in the course of fooman events\n")
379 b'when in the course of barman events\n'
380
andyclegg7fed7bd2017-10-23 03:01:19 +0100381 By default, all communication is in bytes, and therefore any "input"
382 should be bytes, and the return value wil be bytes. If in text mode,
383 any "input" should be a string, and the return value will be a string
384 decoded according to locale encoding, or by "encoding" if set. Text mode
385 is triggered by setting any of text, encoding, errors or universal_newlines.
Georg Brandlf9734072008-12-07 15:30:06 +0000386 """
387 if 'stdout' in kwargs:
388 raise ValueError('stdout argument not allowed, it will be overridden.')
Gregory P. Smith6e730002015-04-14 16:14:25 -0700389
390 if 'input' in kwargs and kwargs['input'] is None:
391 # Explicitly passing input=None was previously equivalent to passing an
392 # empty string. That is maintained here for backwards compatibility.
393 kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
394
395 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
396 **kwargs).stdout
397
398
399class CompletedProcess(object):
400 """A process that has finished running.
401
402 This is returned by run().
403
404 Attributes:
405 args: The list or str args passed to run().
406 returncode: The exit code of the process, negative for signals.
407 stdout: The standard output (None if not captured).
408 stderr: The standard error (None if not captured).
409 """
410 def __init__(self, args, returncode, stdout=None, stderr=None):
411 self.args = args
412 self.returncode = returncode
413 self.stdout = stdout
414 self.stderr = stderr
415
416 def __repr__(self):
417 args = ['args={!r}'.format(self.args),
418 'returncode={!r}'.format(self.returncode)]
419 if self.stdout is not None:
420 args.append('stdout={!r}'.format(self.stdout))
421 if self.stderr is not None:
422 args.append('stderr={!r}'.format(self.stderr))
423 return "{}({})".format(type(self).__name__, ', '.join(args))
424
425 def check_returncode(self):
426 """Raise CalledProcessError if the exit code is non-zero."""
427 if self.returncode:
428 raise CalledProcessError(self.returncode, self.args, self.stdout,
429 self.stderr)
430
431
Bo Baylesce0f33d2018-01-30 00:40:39 -0600432def run(*popenargs,
433 input=None, capture_output=False, timeout=None, check=False, **kwargs):
Gregory P. Smith6e730002015-04-14 16:14:25 -0700434 """Run command with arguments and return a CompletedProcess instance.
435
436 The returned instance will have attributes args, returncode, stdout and
437 stderr. By default, stdout and stderr are not captured, and those attributes
438 will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.
439
440 If check is True and the exit code was non-zero, it raises a
441 CalledProcessError. The CalledProcessError object will have the return code
442 in the returncode attribute, and output & stderr attributes if those streams
443 were captured.
444
445 If timeout is given, and the process takes too long, a TimeoutExpired
446 exception will be raised.
447
448 There is an optional argument "input", allowing you to
andyclegg7fed7bd2017-10-23 03:01:19 +0100449 pass bytes or a string to the subprocess's stdin. If you use this argument
Gregory P. Smith6e730002015-04-14 16:14:25 -0700450 you may not also use the Popen constructor's "stdin" argument, as
451 it will be used internally.
452
andyclegg7fed7bd2017-10-23 03:01:19 +0100453 By default, all communication is in bytes, and therefore any "input" should
454 be bytes, and the stdout and stderr will be bytes. If in text mode, any
455 "input" should be a string, and stdout and stderr will be strings decoded
456 according to locale encoding, or by "encoding" if set. Text mode is
457 triggered by setting any of text, encoding, errors or universal_newlines.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700458
andyclegg7fed7bd2017-10-23 03:01:19 +0100459 The other arguments are the same as for the Popen constructor.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700460 """
461 if input is not None:
Rémi Lapeyre8cc605a2019-06-08 16:56:24 +0200462 if kwargs.get('stdin') is not None:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300463 raise ValueError('stdin and input arguments may not both be used.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300464 kwargs['stdin'] = PIPE
Gregory P. Smith6e730002015-04-14 16:14:25 -0700465
Bo Baylesce0f33d2018-01-30 00:40:39 -0600466 if capture_output:
Rémi Lapeyre8cc605a2019-06-08 16:56:24 +0200467 if kwargs.get('stdout') is not None or kwargs.get('stderr') is not None:
Bo Baylesce0f33d2018-01-30 00:40:39 -0600468 raise ValueError('stdout and stderr arguments may not be used '
469 'with capture_output.')
470 kwargs['stdout'] = PIPE
471 kwargs['stderr'] = PIPE
472
Gregory P. Smith6e730002015-04-14 16:14:25 -0700473 with Popen(*popenargs, **kwargs) as process:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200474 try:
Gregory P. Smith6e730002015-04-14 16:14:25 -0700475 stdout, stderr = process.communicate(input, timeout=timeout)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200476 except TimeoutExpired:
477 process.kill()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700478 stdout, stderr = process.communicate()
479 raise TimeoutExpired(process.args, timeout, output=stdout,
480 stderr=stderr)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800481 except: # Including KeyboardInterrupt, communicate handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200482 process.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800483 # We don't call process.wait() as .__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200484 raise
485 retcode = process.poll()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700486 if check and retcode:
487 raise CalledProcessError(retcode, process.args,
488 output=stdout, stderr=stderr)
489 return CompletedProcess(process.args, retcode, stdout, stderr)
Peter Astrand454f7672005-01-01 09:36:35 +0000490
491
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000492def list2cmdline(seq):
493 """
494 Translate a sequence of arguments into a command line
495 string, using the same rules as the MS C runtime:
496
497 1) Arguments are delimited by white space, which is either a
498 space or a tab.
499
500 2) A string surrounded by double quotation marks is
501 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000502 contained within. A quoted string can be embedded in an
503 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000504
505 3) A double quotation mark preceded by a backslash is
506 interpreted as a literal double quotation mark.
507
508 4) Backslashes are interpreted literally, unless they
509 immediately precede a double quotation mark.
510
511 5) If backslashes immediately precede a double quotation mark,
512 every pair of backslashes is interpreted as a literal
513 backslash. If the number of backslashes is odd, the last
514 backslash escapes the next double quotation mark as
515 described in rule 3.
516 """
517
518 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000519 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
520 # or search http://msdn.microsoft.com for
521 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000522 result = []
523 needquote = False
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +0300524 for arg in map(os.fsdecode, seq):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000525 bs_buf = []
526
527 # Add a space to separate this argument from the others
528 if result:
529 result.append(' ')
530
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000531 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000532 if needquote:
533 result.append('"')
534
535 for c in arg:
536 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000537 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000538 bs_buf.append(c)
539 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000540 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000541 result.append('\\' * len(bs_buf)*2)
542 bs_buf = []
543 result.append('\\"')
544 else:
545 # Normal char
546 if bs_buf:
547 result.extend(bs_buf)
548 bs_buf = []
549 result.append(c)
550
Christian Heimesfdab48e2008-01-20 09:06:41 +0000551 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000552 if bs_buf:
553 result.extend(bs_buf)
554
555 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000556 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000557 result.append('"')
558
559 return ''.join(result)
560
561
Brett Cannona23810f2008-05-26 19:04:21 +0000562# Various tools for executing commands and looking at their output and status.
563#
Brett Cannona23810f2008-05-26 19:04:21 +0000564
565def getstatusoutput(cmd):
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700566 """Return (exitcode, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000567
Tim Golden60798142013-11-05 12:57:25 +0000568 Execute the string 'cmd' in a shell with 'check_output' and
Steve Dower050acae2016-09-06 20:16:17 -0700569 return a 2-tuple (status, output). The locale encoding is used
570 to decode the output and process newlines.
Tim Golden60798142013-11-05 12:57:25 +0000571
572 A trailing newline is stripped from the output.
573 The exit status for the command can be interpreted
574 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000575
576 >>> import subprocess
577 >>> subprocess.getstatusoutput('ls /bin/ls')
578 (0, '/bin/ls')
579 >>> subprocess.getstatusoutput('cat /bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700580 (1, 'cat: /bin/junk: No such file or directory')
Brett Cannona23810f2008-05-26 19:04:21 +0000581 >>> subprocess.getstatusoutput('/bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700582 (127, 'sh: /bin/junk: not found')
583 >>> subprocess.getstatusoutput('/bin/kill $$')
584 (-15, '')
Brett Cannona23810f2008-05-26 19:04:21 +0000585 """
Tim Goldene0041752013-11-03 12:53:17 +0000586 try:
andyclegg7fed7bd2017-10-23 03:01:19 +0100587 data = check_output(cmd, shell=True, text=True, stderr=STDOUT)
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700588 exitcode = 0
Tim Goldene0041752013-11-03 12:53:17 +0000589 except CalledProcessError as ex:
590 data = ex.output
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700591 exitcode = ex.returncode
Tim Goldene0041752013-11-03 12:53:17 +0000592 if data[-1:] == '\n':
593 data = data[:-1]
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700594 return exitcode, data
Brett Cannona23810f2008-05-26 19:04:21 +0000595
596def getoutput(cmd):
597 """Return output (stdout or stderr) of executing cmd in a shell.
598
599 Like getstatusoutput(), except the exit status is ignored and the return
600 value is a string containing the command's output. Example:
601
602 >>> import subprocess
603 >>> subprocess.getoutput('ls /bin/ls')
604 '/bin/ls'
605 """
606 return getstatusoutput(cmd)[1]
607
608
Victor Stinner9daecf32019-01-16 00:02:35 +0100609def _use_posix_spawn():
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800610 """Check if posix_spawn() can be used for subprocess.
Victor Stinner9daecf32019-01-16 00:02:35 +0100611
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800612 subprocess requires a posix_spawn() implementation that properly reports
613 errors to the parent process, & sets errno on the following failures:
Victor Stinner9daecf32019-01-16 00:02:35 +0100614
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800615 * Process attribute actions failed.
616 * File actions failed.
617 * exec() failed.
Victor Stinner9daecf32019-01-16 00:02:35 +0100618
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800619 Prefer an implementation which can use vfork() in some cases for best
620 performance.
Victor Stinner9daecf32019-01-16 00:02:35 +0100621 """
622 if _mswindows or not hasattr(os, 'posix_spawn'):
623 # os.posix_spawn() is not available
624 return False
625
626 if sys.platform == 'darwin':
627 # posix_spawn() is a syscall on macOS and properly reports errors
628 return True
629
630 # Check libc name and runtime libc version
631 try:
632 ver = os.confstr('CS_GNU_LIBC_VERSION')
633 # parse 'glibc 2.28' as ('glibc', (2, 28))
634 parts = ver.split(maxsplit=1)
635 if len(parts) != 2:
636 # reject unknown format
637 raise ValueError
638 libc = parts[0]
639 version = tuple(map(int, parts[1].split('.')))
640
641 if sys.platform == 'linux' and libc == 'glibc' and version >= (2, 24):
642 # glibc 2.24 has a new Linux posix_spawn implementation using vfork
643 # which properly reports errors to the parent process.
644 return True
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800645 # Note: Don't use the implementation in earlier glibc because it doesn't
Victor Stinner9daecf32019-01-16 00:02:35 +0100646 # use vfork (even if glibc 2.26 added a pipe to properly report errors
647 # to the parent process).
648 except (AttributeError, ValueError, OSError):
649 # os.confstr() or CS_GNU_LIBC_VERSION value not available
650 pass
651
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800652 # By default, assume that posix_spawn() does not properly report errors.
Victor Stinner9daecf32019-01-16 00:02:35 +0100653 return False
654
655
656_USE_POSIX_SPAWN = _use_posix_spawn()
657
658
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000659class Popen(object):
Martin Panter4afdca02016-10-25 22:20:48 +0000660 """ Execute a child program in a new process.
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200661
Martin Panter4afdca02016-10-25 22:20:48 +0000662 For a complete description of the arguments see the Python documentation.
663
664 Arguments:
665 args: A string, or a sequence of program arguments.
666
667 bufsize: supplied as the buffering argument to the open() function when
668 creating the stdin/stdout/stderr pipe file objects
669
670 executable: A replacement program to execute.
671
672 stdin, stdout and stderr: These specify the executed programs' standard
673 input, standard output and standard error file handles, respectively.
674
675 preexec_fn: (POSIX only) An object to be called in the child process
676 just before the child is executed.
677
678 close_fds: Controls closing or inheriting of file descriptors.
679
680 shell: If true, the command will be executed through the shell.
681
682 cwd: Sets the current directory before the child is executed.
683
684 env: Defines the environment variables for the new process.
685
andyclegg7fed7bd2017-10-23 03:01:19 +0100686 text: If true, decode stdin, stdout and stderr using the given encoding
687 (if set) or the system default otherwise.
688
689 universal_newlines: Alias of text, provided for backwards compatibility.
Martin Panter4afdca02016-10-25 22:20:48 +0000690
691 startupinfo and creationflags (Windows only)
692
693 restore_signals (POSIX only)
694
695 start_new_session (POSIX only)
696
697 pass_fds (POSIX only)
698
Martin Panter3dca6242016-10-25 23:41:42 +0000699 encoding and errors: Text mode encoding and error handling to use for
700 file objects stdin, stdout and stderr.
701
Martin Panter4afdca02016-10-25 22:20:48 +0000702 Attributes:
703 stdin, stdout, stderr, pid, returncode
704 """
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200705 _child_created = False # Set here since __del__ checks it
706
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700707 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000708 stdin=None, stdout=None, stderr=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200709 preexec_fn=None, close_fds=True,
andyclegg7fed7bd2017-10-23 03:01:19 +0100710 shell=False, cwd=None, env=None, universal_newlines=None,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000711 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000712 restore_signals=True, start_new_session=False,
andyclegg7fed7bd2017-10-23 03:01:19 +0100713 pass_fds=(), *, encoding=None, errors=None, text=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000714 """Create new Popen instance."""
715 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700716 # Held while anything is calling waitpid before returncode has been
717 # updated to prevent clobbering returncode if wait() or poll() are
718 # called from multiple threads at once. After acquiring the lock,
719 # code must re-check self.returncode to see if another thread just
720 # finished a waitpid() call.
721 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000722
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400723 self._input = None
724 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000725 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700726 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000727 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000728 raise TypeError("bufsize must be an integer")
729
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700730 if _mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000731 if preexec_fn is not None:
732 raise ValueError("preexec_fn is not supported on Windows "
733 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000734 else:
735 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000736 if pass_fds and not close_fds:
737 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
738 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000739 if startupinfo is not None:
740 raise ValueError("startupinfo is only supported on Windows "
741 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000742 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000743 raise ValueError("creationflags is only supported on Windows "
744 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000745
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400746 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000747 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000748 self.stdout = None
749 self.stderr = None
750 self.pid = None
751 self.returncode = None
Steve Dower050acae2016-09-06 20:16:17 -0700752 self.encoding = encoding
753 self.errors = errors
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000754
andyclegg7fed7bd2017-10-23 03:01:19 +0100755 # Validate the combinations of text and universal_newlines
756 if (text is not None and universal_newlines is not None
757 and bool(universal_newlines) != bool(text)):
758 raise SubprocessError('Cannot disambiguate when both text '
759 'and universal_newlines are supplied but '
760 'different. Pass one or the other.')
761
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000762 # Input and output objects. The general principle is like
763 # this:
764 #
765 # Parent Child
766 # ------ -----
767 # p2cwrite ---stdin---> p2cread
768 # c2pread <--stdout--- c2pwrite
769 # errread <--stderr--- errwrite
770 #
771 # On POSIX, the child objects are file descriptors. On
772 # Windows, these are Windows file handles. The parent objects
773 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000774 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000775 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000776
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000777 (p2cread, p2cwrite,
778 c2pread, c2pwrite,
779 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
780
Antoine Pitrouc9982322011-01-04 19:07:07 +0000781 # We wrap OS handles *before* launching the child, otherwise a
782 # quickly terminating child could make our fds unwrappable
783 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000784
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700785 if _mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000786 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000787 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000788 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000789 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000790 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000791 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000792
andyclegg7fed7bd2017-10-23 03:01:19 +0100793 self.text_mode = encoding or errors or text or universal_newlines
Tim Peterse718f612004-10-12 21:51:32 +0000794
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800795 # How long to resume waiting on a child after the first ^C.
796 # There is no right value for this. The purpose is to be polite
797 # yet remain good for interactive users trying to exit a tool.
798 self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber()
799
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700800 self._closed_child_pipe_fds = False
Steve Dower050acae2016-09-06 20:16:17 -0700801
Alexey Izbysheva2670562018-10-20 03:22:31 +0300802 if self.text_mode:
803 if bufsize == 1:
804 line_buffering = True
805 # Use the default buffer size for the underlying binary streams
806 # since they don't support line buffering.
807 bufsize = -1
808 else:
809 line_buffering = False
810
Antoine Pitrouc9982322011-01-04 19:07:07 +0000811 try:
Steve Dower050acae2016-09-06 20:16:17 -0700812 if p2cwrite != -1:
813 self.stdin = io.open(p2cwrite, 'wb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100814 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700815 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
Alexey Izbysheva2670562018-10-20 03:22:31 +0300816 line_buffering=line_buffering,
Steve Dower050acae2016-09-06 20:16:17 -0700817 encoding=encoding, errors=errors)
818 if c2pread != -1:
819 self.stdout = io.open(c2pread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100820 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700821 self.stdout = io.TextIOWrapper(self.stdout,
822 encoding=encoding, errors=errors)
823 if errread != -1:
824 self.stderr = io.open(errread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100825 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700826 self.stderr = io.TextIOWrapper(self.stderr,
827 encoding=encoding, errors=errors)
828
Antoine Pitrouc9982322011-01-04 19:07:07 +0000829 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300830 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000831 startupinfo, creationflags, shell,
832 p2cread, p2cwrite,
833 c2pread, c2pwrite,
834 errread, errwrite,
835 restore_signals, start_new_session)
836 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800837 # Cleanup if the child failed starting.
838 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000839 try:
840 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200841 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800842 pass # Ignore EBADF or other errors.
843
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700844 if not self._closed_child_pipe_fds:
845 to_close = []
846 if stdin == PIPE:
847 to_close.append(p2cread)
848 if stdout == PIPE:
849 to_close.append(c2pwrite)
850 if stderr == PIPE:
851 to_close.append(errwrite)
852 if hasattr(self, '_devnull'):
853 to_close.append(self._devnull)
854 for fd in to_close:
855 try:
Segev Finer4d385172017-08-18 16:18:13 +0300856 if _mswindows and isinstance(fd, Handle):
857 fd.Close()
858 else:
859 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700860 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700861 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800862
Antoine Pitrouc9982322011-01-04 19:07:07 +0000863 raise
864
andyclegg7fed7bd2017-10-23 03:01:19 +0100865 @property
866 def universal_newlines(self):
867 # universal_newlines as retained as an alias of text_mode for API
luzpaza5293b42017-11-05 07:37:50 -0600868 # compatibility. bpo-31756
andyclegg7fed7bd2017-10-23 03:01:19 +0100869 return self.text_mode
870
871 @universal_newlines.setter
872 def universal_newlines(self, universal_newlines):
873 self.text_mode = bool(universal_newlines)
874
Steve Dower050acae2016-09-06 20:16:17 -0700875 def _translate_newlines(self, data, encoding, errors):
876 data = data.decode(encoding, errors)
Andrew Svetlov82860712012-08-19 22:13:41 +0300877 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000878
Brian Curtin79cdb662010-12-03 02:46:02 +0000879 def __enter__(self):
880 return self
881
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800882 def __exit__(self, exc_type, value, traceback):
Brian Curtin79cdb662010-12-03 02:46:02 +0000883 if self.stdout:
884 self.stdout.close()
885 if self.stderr:
886 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200887 try: # Flushing a BufferedWriter may raise an error
888 if self.stdin:
889 self.stdin.close()
890 finally:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800891 if exc_type == KeyboardInterrupt:
892 # https://bugs.python.org/issue25942
893 # In the case of a KeyboardInterrupt we assume the SIGINT
894 # was also already sent to our child processes. We can't
895 # block indefinitely as that is not user friendly.
896 # If we have not already waited a brief amount of time in
897 # an interrupted .wait() or .communicate() call, do so here
898 # for consistency.
899 if self._sigint_wait_secs > 0:
900 try:
901 self._wait(timeout=self._sigint_wait_secs)
902 except TimeoutExpired:
903 pass
904 self._sigint_wait_secs = 0 # Note that this has been done.
905 return # resume the KeyboardInterrupt
906
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200907 # Wait for the process to terminate, to avoid zombies.
908 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000909
Victor Stinner9505b032017-01-06 10:44:44 +0100910 def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200911 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000912 # We didn't get to successfully create a child process.
913 return
Victor Stinner5a48e212016-05-20 12:11:15 +0200914 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800915 # Not reading subprocess exit status creates a zombie process which
Victor Stinnerc206f1e2016-06-14 16:42:59 +0200916 # is only destroyed at the parent python process exit
Victor Stinner9505b032017-01-06 10:44:44 +0100917 _warn("subprocess %s is still running" % self.pid,
918 ResourceWarning, source=self)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000919 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000920 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000921 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000922 # Child is still running, keep us alive until we can wait on it.
923 _active.append(self)
924
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200925 def _get_devnull(self):
926 if not hasattr(self, '_devnull'):
927 self._devnull = os.open(os.devnull, os.O_RDWR)
928 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000929
Victor Stinnera5e881d2015-01-14 17:07:59 +0100930 def _stdin_write(self, input):
931 if input:
932 try:
933 self.stdin.write(input)
934 except BrokenPipeError:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000935 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200936 except OSError as exc:
937 if exc.errno == errno.EINVAL:
938 # bpo-19612, bpo-30418: On Windows, stdin.write() fails
939 # with EINVAL if the child process exited or if the child
940 # process is still running but closed the pipe.
Victor Stinnera5e881d2015-01-14 17:07:59 +0100941 pass
942 else:
943 raise
Victor Stinnerd52aa312017-06-08 17:30:39 +0200944
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000945 try:
946 self.stdin.close()
947 except BrokenPipeError:
948 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200949 except OSError as exc:
950 if exc.errno == errno.EINVAL:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000951 pass
952 else:
953 raise
Victor Stinnera5e881d2015-01-14 17:07:59 +0100954
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400955 def communicate(self, input=None, timeout=None):
Joel Schaerer88031a92017-09-13 21:11:20 +0200956 """Interact with process: Send data to stdin and close it.
957 Read data from stdout and stderr, until end-of-file is
958 reached. Wait for process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +0000959
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400960 The optional "input" argument should be data to be sent to the
andyclegg7fed7bd2017-10-23 03:01:19 +0100961 child process, or None, if no data should be sent to the child.
962 communicate() returns a tuple (stdout, stderr).
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400963
andyclegg7fed7bd2017-10-23 03:01:19 +0100964 By default, all communication is in bytes, and therefore any
965 "input" should be bytes, and the (stdout, stderr) will be bytes.
966 If in text mode (indicated by self.text_mode), any "input" should
967 be a string, and (stdout, stderr) will be strings decoded
968 according to locale encoding, or by "encoding" if set. Text mode
969 is triggered by setting any of text, encoding, errors or
970 universal_newlines.
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400971 """
Peter Astrand23109f02005-03-03 20:28:59 +0000972
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400973 if self._communication_started and input:
974 raise ValueError("Cannot send input after starting communication")
975
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400976 # Optimization: If we are not worried about timeouts, we haven't
977 # started communicating, and we have one or zero pipes, using select()
978 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200979 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400980 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000981 stdout = None
982 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000983 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +0100984 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +0000985 elif self.stdout:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000986 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000987 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000988 elif self.stderr:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000989 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000990 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000991 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200992 else:
993 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +0200994 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +0200995 else:
996 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000997
Victor Stinner7a8d0812011-04-05 13:13:08 +0200998 try:
999 stdout, stderr = self._communicate(input, endtime, timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001000 except KeyboardInterrupt:
1001 # https://bugs.python.org/issue25942
1002 # See the detailed comment in .wait().
1003 if timeout is not None:
1004 sigint_timeout = min(self._sigint_wait_secs,
1005 self._remaining_time(endtime))
1006 else:
1007 sigint_timeout = self._sigint_wait_secs
1008 self._sigint_wait_secs = 0 # nothing else should wait.
1009 try:
1010 self._wait(timeout=sigint_timeout)
1011 except TimeoutExpired:
1012 pass
1013 raise # resume the KeyboardInterrupt
1014
Victor Stinner7a8d0812011-04-05 13:13:08 +02001015 finally:
1016 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001017
Victor Stinner7a8d0812011-04-05 13:13:08 +02001018 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001019
1020 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +00001021
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001022
Georg Brandl6aa2d1f2008-08-12 08:35:52 +00001023 def poll(self):
Martin Panter4afdca02016-10-25 22:20:48 +00001024 """Check if child process has terminated. Set and return returncode
1025 attribute."""
Georg Brandl6aa2d1f2008-08-12 08:35:52 +00001026 return self._internal_poll()
1027
1028
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001029 def _remaining_time(self, endtime):
1030 """Convenience for _communicate when computing timeouts."""
1031 if endtime is None:
1032 return None
1033 else:
Victor Stinner949d8c92012-05-30 13:30:32 +02001034 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001035
1036
Reid Kleckner2b228f02011-03-16 16:57:54 -04001037 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001038 """Convenience for checking if a timeout has expired."""
1039 if endtime is None:
1040 return
Victor Stinner949d8c92012-05-30 13:30:32 +02001041 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001042 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001043
1044
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001045 def wait(self, timeout=None):
1046 """Wait for child process to terminate; returns self.returncode."""
1047 if timeout is not None:
1048 endtime = _time() + timeout
1049 try:
1050 return self._wait(timeout=timeout)
1051 except KeyboardInterrupt:
1052 # https://bugs.python.org/issue25942
1053 # The first keyboard interrupt waits briefly for the child to
1054 # exit under the common assumption that it also received the ^C
1055 # generated SIGINT and will exit rapidly.
1056 if timeout is not None:
1057 sigint_timeout = min(self._sigint_wait_secs,
1058 self._remaining_time(endtime))
1059 else:
1060 sigint_timeout = self._sigint_wait_secs
1061 self._sigint_wait_secs = 0 # nothing else should wait.
1062 try:
1063 self._wait(timeout=sigint_timeout)
1064 except TimeoutExpired:
1065 pass
1066 raise # resume the KeyboardInterrupt
1067
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001068 def _close_pipe_fds(self,
1069 p2cread, p2cwrite,
1070 c2pread, c2pwrite,
1071 errread, errwrite):
1072 # self._devnull is not always defined.
1073 devnull_fd = getattr(self, '_devnull', None)
1074
Giampaolo Rodolabafa8482019-01-29 22:14:24 +01001075 with contextlib.ExitStack() as stack:
1076 if _mswindows:
1077 if p2cread != -1:
1078 stack.callback(p2cread.Close)
1079 if c2pwrite != -1:
1080 stack.callback(c2pwrite.Close)
1081 if errwrite != -1:
1082 stack.callback(errwrite.Close)
1083 else:
1084 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
1085 stack.callback(os.close, p2cread)
1086 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
1087 stack.callback(os.close, c2pwrite)
1088 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
1089 stack.callback(os.close, errwrite)
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001090
Giampaolo Rodolabafa8482019-01-29 22:14:24 +01001091 if devnull_fd is not None:
1092 stack.callback(os.close, devnull_fd)
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001093
1094 # Prevent a double close of these handles/fds from __init__ on error.
1095 self._closed_child_pipe_fds = True
1096
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -07001097 if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001098 #
1099 # Windows methods
1100 #
1101 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001102 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001103 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1104 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001105 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001106 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +00001107
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001108 p2cread, p2cwrite = -1, -1
1109 c2pread, c2pwrite = -1, -1
1110 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001111
Peter Astrandd38ddf42005-02-10 08:32:50 +00001112 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001113 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001114 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001115 p2cread, _ = _winapi.CreatePipe(None, 0)
1116 p2cread = Handle(p2cread)
1117 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001118 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001119 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
1120 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001121 elif stdin == DEVNULL:
1122 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001123 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001124 p2cread = msvcrt.get_osfhandle(stdin)
1125 else:
1126 # Assuming file-like object
1127 p2cread = msvcrt.get_osfhandle(stdin.fileno())
1128 p2cread = self._make_inheritable(p2cread)
1129
Peter Astrandd38ddf42005-02-10 08:32:50 +00001130 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001131 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001132 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001133 _, c2pwrite = _winapi.CreatePipe(None, 0)
1134 c2pwrite = Handle(c2pwrite)
1135 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001136 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001137 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
1138 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001139 elif stdout == DEVNULL:
1140 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001141 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001142 c2pwrite = msvcrt.get_osfhandle(stdout)
1143 else:
1144 # Assuming file-like object
1145 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1146 c2pwrite = self._make_inheritable(c2pwrite)
1147
Peter Astrandd38ddf42005-02-10 08:32:50 +00001148 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001149 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001150 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001151 _, errwrite = _winapi.CreatePipe(None, 0)
1152 errwrite = Handle(errwrite)
1153 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001154 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001155 errread, errwrite = _winapi.CreatePipe(None, 0)
1156 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001157 elif stderr == STDOUT:
1158 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001159 elif stderr == DEVNULL:
1160 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001161 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001162 errwrite = msvcrt.get_osfhandle(stderr)
1163 else:
1164 # Assuming file-like object
1165 errwrite = msvcrt.get_osfhandle(stderr.fileno())
1166 errwrite = self._make_inheritable(errwrite)
1167
1168 return (p2cread, p2cwrite,
1169 c2pread, c2pwrite,
1170 errread, errwrite)
1171
1172
1173 def _make_inheritable(self, handle):
1174 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001175 h = _winapi.DuplicateHandle(
1176 _winapi.GetCurrentProcess(), handle,
1177 _winapi.GetCurrentProcess(), 0, 1,
1178 _winapi.DUPLICATE_SAME_ACCESS)
1179 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001180
1181
Segev Finerb2a60832017-12-18 11:28:19 +02001182 def _filter_handle_list(self, handle_list):
1183 """Filter out console handles that can't be used
1184 in lpAttributeList["handle_list"] and make sure the list
1185 isn't empty. This also removes duplicate handles."""
1186 # An handle with it's lowest two bits set might be a special console
1187 # handle that if passed in lpAttributeList["handle_list"], will
1188 # cause it to fail.
1189 return list({handle for handle in handle_list
1190 if handle & 0x3 != 0x3
1191 or _winapi.GetFileType(handle) !=
1192 _winapi.FILE_TYPE_CHAR})
1193
1194
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001195 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001196 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001197 startupinfo, creationflags, shell,
1198 p2cread, p2cwrite,
1199 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001200 errread, errwrite,
1201 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001202 """Execute program (MS Windows version)"""
1203
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001204 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001205
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +03001206 if isinstance(args, str):
1207 pass
1208 elif isinstance(args, bytes):
1209 if shell:
1210 raise TypeError('bytes args is not allowed on Windows')
1211 args = list2cmdline([args])
1212 elif isinstance(args, os.PathLike):
1213 if shell:
1214 raise TypeError('path-like args is not allowed when '
1215 'shell is true')
1216 args = list2cmdline([args])
1217 else:
Serhiy Storchakabe50a7b2018-02-28 01:03:46 +02001218 args = list2cmdline(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001219
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +03001220 if executable is not None:
1221 executable = os.fsdecode(executable)
1222
Peter Astrandc1d65362004-11-07 14:30:34 +00001223 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001224 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001225 startupinfo = STARTUPINFO()
Victor Stinner483422f2018-07-05 22:54:17 +02001226 else:
1227 # bpo-34044: Copy STARTUPINFO since it is modified above,
1228 # so the caller can reuse it multiple times.
1229 startupinfo = startupinfo.copy()
Segev Finerb2a60832017-12-18 11:28:19 +02001230
1231 use_std_handles = -1 not in (p2cread, c2pwrite, errwrite)
1232 if use_std_handles:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001233 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001234 startupinfo.hStdInput = p2cread
1235 startupinfo.hStdOutput = c2pwrite
1236 startupinfo.hStdError = errwrite
1237
Segev Finerb2a60832017-12-18 11:28:19 +02001238 attribute_list = startupinfo.lpAttributeList
1239 have_handle_list = bool(attribute_list and
1240 "handle_list" in attribute_list and
1241 attribute_list["handle_list"])
1242
1243 # If we were given an handle_list or need to create one
1244 if have_handle_list or (use_std_handles and close_fds):
1245 if attribute_list is None:
1246 attribute_list = startupinfo.lpAttributeList = {}
1247 handle_list = attribute_list["handle_list"] = \
1248 list(attribute_list.get("handle_list", []))
1249
1250 if use_std_handles:
1251 handle_list += [int(p2cread), int(c2pwrite), int(errwrite)]
1252
1253 handle_list[:] = self._filter_handle_list(handle_list)
1254
1255 if handle_list:
1256 if not close_fds:
1257 warnings.warn("startupinfo.lpAttributeList['handle_list'] "
1258 "overriding close_fds", RuntimeWarning)
1259
1260 # When using the handle_list we always request to inherit
1261 # handles but the only handles that will be inherited are
1262 # the ones in the handle_list
1263 close_fds = False
1264
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001265 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001266 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1267 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001268 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001269 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001270
Steve Dower60419a72019-06-24 08:42:54 -07001271 if cwd is not None:
1272 cwd = os.fsdecode(cwd)
1273
1274 sys.audit("subprocess.Popen", executable, args, cwd, env)
1275
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001276 # Start the process
1277 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001278 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001279 # no special security
1280 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001281 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001282 creationflags,
1283 env,
Steve Dower60419a72019-06-24 08:42:54 -07001284 cwd,
Tim Peterse8374a52004-10-13 03:15:00 +00001285 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001286 finally:
1287 # Child is launched. Close the parent's copy of those pipe
1288 # handles that only the child should have open. You need
1289 # to make sure that no handles to the write end of the
1290 # output pipe are maintained in this process or else the
1291 # pipe will not close when the child process exits and the
1292 # ReadFile will hang.
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001293 self._close_pipe_fds(p2cread, p2cwrite,
1294 c2pread, c2pwrite,
1295 errread, errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001296
1297 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001298 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001299 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001300 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001301 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001302
Brett Cannon84df1e62010-05-14 00:33:40 +00001303 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001304 _WaitForSingleObject=_winapi.WaitForSingleObject,
1305 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1306 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001307 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001308 attribute.
1309
1310 This method is called by __del__, so it can only refer to objects
1311 in its local scope.
1312
1313 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001314 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001315 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1316 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001317 return self.returncode
1318
1319
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001320 def _wait(self, timeout):
1321 """Internal implementation of wait() on Windows."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001322 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001323 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001324 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001325 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001326 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001327 # API note: Returns immediately if timeout_millis == 0.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001328 result = _winapi.WaitForSingleObject(self._handle,
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001329 timeout_millis)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001330 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001331 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001332 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001333 return self.returncode
1334
1335
1336 def _readerthread(self, fh, buffer):
1337 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001338 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001339
1340
Reid Kleckner2b228f02011-03-16 16:57:54 -04001341 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001342 # Start reader threads feeding into a list hanging off of this
1343 # object, unless they've already been started.
1344 if self.stdout and not hasattr(self, "_stdout_buff"):
1345 self._stdout_buff = []
1346 self.stdout_thread = \
1347 threading.Thread(target=self._readerthread,
1348 args=(self.stdout, self._stdout_buff))
1349 self.stdout_thread.daemon = True
1350 self.stdout_thread.start()
1351 if self.stderr and not hasattr(self, "_stderr_buff"):
1352 self._stderr_buff = []
1353 self.stderr_thread = \
1354 threading.Thread(target=self._readerthread,
1355 args=(self.stderr, self._stderr_buff))
1356 self.stderr_thread.daemon = True
1357 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001358
1359 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001360 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001361
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001362 # Wait for the reader threads, or time out. If we time out, the
1363 # threads remain reading and the fds left open in case the user
1364 # calls communicate again.
1365 if self.stdout is not None:
1366 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001367 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001368 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001369 if self.stderr is not None:
1370 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001371 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001372 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001373
1374 # Collect the output from and close both pipes, now that we know
1375 # both have been read successfully.
1376 stdout = None
1377 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001378 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001379 stdout = self._stdout_buff
1380 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001381 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001382 stderr = self._stderr_buff
1383 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001384
1385 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001386 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001387 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001388 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001389 stderr = stderr[0]
1390
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001391 return (stdout, stderr)
1392
Christian Heimesa342c012008-04-20 21:01:16 +00001393 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001394 """Send a signal to the process."""
1395 # Don't signal a process that we know has already died.
1396 if self.returncode is not None:
1397 return
Christian Heimesa342c012008-04-20 21:01:16 +00001398 if sig == signal.SIGTERM:
1399 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001400 elif sig == signal.CTRL_C_EVENT:
1401 os.kill(self.pid, signal.CTRL_C_EVENT)
1402 elif sig == signal.CTRL_BREAK_EVENT:
1403 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001404 else:
Brian Curtin19651362010-09-07 13:24:38 +00001405 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001406
1407 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001408 """Terminates the process."""
1409 # Don't terminate a process that we know has already died.
1410 if self.returncode is not None:
1411 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001412 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001413 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001414 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001415 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1416 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001417 rc = _winapi.GetExitCodeProcess(self._handle)
1418 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001419 raise
1420 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001421
1422 kill = terminate
1423
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001424 else:
1425 #
1426 # POSIX methods
1427 #
1428 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001429 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001430 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1431 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001432 p2cread, p2cwrite = -1, -1
1433 c2pread, c2pwrite = -1, -1
1434 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001435
Peter Astrandd38ddf42005-02-10 08:32:50 +00001436 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001437 pass
1438 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001439 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001440 elif stdin == DEVNULL:
1441 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001442 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001443 p2cread = stdin
1444 else:
1445 # Assuming file-like object
1446 p2cread = stdin.fileno()
1447
Peter Astrandd38ddf42005-02-10 08:32:50 +00001448 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001449 pass
1450 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001451 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001452 elif stdout == DEVNULL:
1453 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001454 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001455 c2pwrite = stdout
1456 else:
1457 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001458 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001459
Peter Astrandd38ddf42005-02-10 08:32:50 +00001460 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001461 pass
1462 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001463 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001464 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001465 if c2pwrite != -1:
1466 errwrite = c2pwrite
1467 else: # child's stdout is not set, use parent's stdout
1468 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001469 elif stderr == DEVNULL:
1470 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001471 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001472 errwrite = stderr
1473 else:
1474 # Assuming file-like object
1475 errwrite = stderr.fileno()
1476
1477 return (p2cread, p2cwrite,
1478 c2pread, c2pwrite,
1479 errread, errwrite)
1480
1481
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001482 def _posix_spawn(self, args, executable, env, restore_signals,
1483 p2cread, p2cwrite,
1484 c2pread, c2pwrite,
1485 errread, errwrite):
Victor Stinner8c349562019-01-16 23:38:06 +01001486 """Execute program using os.posix_spawn()."""
Victor Stinner9daecf32019-01-16 00:02:35 +01001487 if env is None:
1488 env = os.environ
1489
1490 kwargs = {}
1491 if restore_signals:
1492 # See _Py_RestoreSignals() in Python/pylifecycle.c
1493 sigset = []
1494 for signame in ('SIGPIPE', 'SIGXFZ', 'SIGXFSZ'):
1495 signum = getattr(signal, signame, None)
1496 if signum is not None:
1497 sigset.append(signum)
1498 kwargs['setsigdef'] = sigset
1499
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001500 file_actions = []
1501 for fd in (p2cwrite, c2pread, errread):
1502 if fd != -1:
1503 file_actions.append((os.POSIX_SPAWN_CLOSE, fd))
1504 for fd, fd2 in (
1505 (p2cread, 0),
1506 (c2pwrite, 1),
1507 (errwrite, 2),
1508 ):
1509 if fd != -1:
1510 file_actions.append((os.POSIX_SPAWN_DUP2, fd, fd2))
1511 if file_actions:
1512 kwargs['file_actions'] = file_actions
1513
Victor Stinner8c349562019-01-16 23:38:06 +01001514 self.pid = os.posix_spawn(executable, args, env, **kwargs)
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001515 self._child_created = True
1516
1517 self._close_pipe_fds(p2cread, p2cwrite,
1518 c2pread, c2pwrite,
1519 errread, errwrite)
Victor Stinner9daecf32019-01-16 00:02:35 +01001520
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001521 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001522 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001523 startupinfo, creationflags, shell,
1524 p2cread, p2cwrite,
1525 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001526 errread, errwrite,
1527 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001528 """Execute program (POSIX version)"""
1529
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001530 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001531 args = [args]
Serhiy Storchaka9e3c4522019-05-28 22:49:35 +03001532 elif isinstance(args, os.PathLike):
1533 if shell:
1534 raise TypeError('path-like args is not allowed when '
1535 'shell is true')
1536 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001537 else:
Serhiy Storchakabe50a7b2018-02-28 01:03:46 +02001538 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001539
1540 if shell:
Xavier de Gayeb35fc622016-12-13 16:32:21 +01001541 # On Android the default shell is at '/system/bin/sh'.
1542 unix_shell = ('/system/bin/sh' if
1543 hasattr(sys, 'getandroidapilevel') else '/bin/sh')
1544 args = [unix_shell, "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001545 if executable:
1546 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001547
Peter Astrandd38ddf42005-02-10 08:32:50 +00001548 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001549 executable = args[0]
Victor Stinner9daecf32019-01-16 00:02:35 +01001550
Steve Dower60419a72019-06-24 08:42:54 -07001551 sys.audit("subprocess.Popen", executable, args, cwd, env)
1552
Victor Stinner9daecf32019-01-16 00:02:35 +01001553 if (_USE_POSIX_SPAWN
Victor Stinner8c349562019-01-16 23:38:06 +01001554 and os.path.dirname(executable)
Victor Stinner9daecf32019-01-16 00:02:35 +01001555 and preexec_fn is None
1556 and not close_fds
1557 and not pass_fds
1558 and cwd is None
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001559 and (p2cread == -1 or p2cread > 2)
1560 and (c2pwrite == -1 or c2pwrite > 2)
1561 and (errwrite == -1 or errwrite > 2)
Victor Stinner9daecf32019-01-16 00:02:35 +01001562 and not start_new_session):
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001563 self._posix_spawn(args, executable, env, restore_signals,
1564 p2cread, p2cwrite,
1565 c2pread, c2pwrite,
1566 errread, errwrite)
Victor Stinner9daecf32019-01-16 00:02:35 +01001567 return
1568
Gregory P. Smith5591b022012-10-10 03:34:47 -07001569 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001570
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001571 # For transferring possible exec failure from child to parent.
1572 # Data format: "exception name:hex errno:description"
1573 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001574 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001575 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1576 low_fds_to_close = []
1577 while errpipe_write < 3:
1578 low_fds_to_close.append(errpipe_write)
1579 errpipe_write = os.dup(errpipe_write)
1580 for low_fd in low_fds_to_close:
1581 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001582 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001583 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001584 # We must avoid complex work that could involve
1585 # malloc or free in the child process to avoid
1586 # potential deadlocks, thus we do all this here.
1587 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001588
Victor Stinner372b8382011-06-21 17:24:21 +02001589 if env is not None:
Serhiy Storchakad174d242017-06-23 19:39:27 +03001590 env_list = []
1591 for k, v in env.items():
1592 k = os.fsencode(k)
1593 if b'=' in k:
1594 raise ValueError("illegal environment variable name")
1595 env_list.append(k + b'=' + os.fsencode(v))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001596 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001597 env_list = None # Use execv instead of execve.
1598 executable = os.fsencode(executable)
1599 if os.path.dirname(executable):
1600 executable_list = (executable,)
1601 else:
1602 # This matches the behavior of os._execvpe().
1603 executable_list = tuple(
1604 os.path.join(os.fsencode(dir), executable)
1605 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001606 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001607 fds_to_keep.add(errpipe_write)
1608 self.pid = _posixsubprocess.fork_exec(
1609 args, executable_list,
Serhiy Storchaka66bffd12017-04-19 21:12:46 +03001610 close_fds, tuple(sorted(map(int, fds_to_keep))),
1611 cwd, env_list,
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001612 p2cread, p2cwrite, c2pread, c2pwrite,
1613 errread, errwrite,
1614 errpipe_read, errpipe_write,
1615 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001616 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001617 finally:
1618 # be sure the FD is closed no matter what
1619 os.close(errpipe_write)
1620
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001621 self._close_pipe_fds(p2cread, p2cwrite,
1622 c2pread, c2pwrite,
1623 errread, errwrite)
Facundo Batista10706e22009-06-19 20:34:30 +00001624
1625 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001626 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001627 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001628 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001629 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001630 errpipe_data += part
1631 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001632 break
Facundo Batista10706e22009-06-19 20:34:30 +00001633 finally:
1634 # be sure the FD is closed no matter what
1635 os.close(errpipe_read)
1636
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001637 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001638 try:
Victor Stinnera58e2c52016-05-20 12:08:12 +02001639 pid, sts = os.waitpid(self.pid, 0)
1640 if pid == self.pid:
1641 self._handle_exitstatus(sts)
1642 else:
1643 self.returncode = sys.maxsize
Victor Stinnera5e881d2015-01-14 17:07:59 +01001644 except ChildProcessError:
1645 pass
Victor Stinnera58e2c52016-05-20 12:08:12 +02001646
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001647 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001648 exception_name, hex_errno, err_msg = (
1649 errpipe_data.split(b':', 2))
Ammar Askar3fc499b2017-09-06 02:41:30 -04001650 # The encoding here should match the encoding
1651 # written in by the subprocess implementations
1652 # like _posixsubprocess
1653 err_msg = err_msg.decode()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001654 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001655 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001656 hex_errno = b'0'
Ammar Askar3fc499b2017-09-06 02:41:30 -04001657 err_msg = 'Bad exception data from child: {!r}'.format(
1658 bytes(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001659 child_exception_type = getattr(
1660 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001661 SubprocessError)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001662 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001663 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001664 child_exec_never_called = (err_msg == "noexec")
1665 if child_exec_never_called:
1666 err_msg = ""
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001667 # The error must be from chdir(cwd).
1668 err_filename = cwd
1669 else:
1670 err_filename = orig_executable
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001671 if errno_num != 0:
1672 err_msg = os.strerror(errno_num)
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001673 raise child_exception_type(errno_num, err_msg, err_filename)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001674 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001675
1676
Brett Cannon84df1e62010-05-14 00:33:40 +00001677 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1678 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001679 _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
1680 _WSTOPSIG=os.WSTOPSIG):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001681 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001682 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001683 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001684 if _WIFSIGNALED(sts):
1685 self.returncode = -_WTERMSIG(sts)
1686 elif _WIFEXITED(sts):
1687 self.returncode = _WEXITSTATUS(sts)
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001688 elif _WIFSTOPPED(sts):
1689 self.returncode = -_WSTOPSIG(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001690 else:
1691 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001692 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001693
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001694
Brett Cannon84df1e62010-05-14 00:33:40 +00001695 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001696 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001697 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001698 attribute.
1699
1700 This method is called by __del__, so it cannot reference anything
1701 outside of the local scope (nor can any methods it calls).
1702
1703 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001704 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001705 if not self._waitpid_lock.acquire(False):
1706 # Something else is busy calling waitpid. Don't allow two
1707 # at once. We know nothing yet.
1708 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001709 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001710 if self.returncode is not None:
1711 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001712 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001713 if pid == self.pid:
1714 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001715 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001716 if _deadstate is not None:
1717 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001718 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001719 # This happens if SIGCLD is set to be ignored or
1720 # waiting for child processes has otherwise been
1721 # disabled for our process. This child is dead, we
1722 # can't get the status.
1723 # http://bugs.python.org/issue15756
1724 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001725 finally:
1726 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001727 return self.returncode
1728
1729
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001730 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001731 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001732 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001733 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001734 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001735 # This happens if SIGCLD is set to be ignored or waiting
1736 # for child processes has otherwise been disabled for our
1737 # process. This child is dead, we can't get the status.
1738 pid = self.pid
1739 sts = 0
1740 return (pid, sts)
1741
1742
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001743 def _wait(self, timeout):
1744 """Internal implementation of wait() on POSIX."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001745 if self.returncode is not None:
1746 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001747
Gregory P. Smith82604e02016-11-20 16:31:07 -08001748 if timeout is not None:
1749 endtime = _time() + timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001750 # Enter a busy loop if we have a timeout. This busy loop was
1751 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1752 delay = 0.0005 # 500 us -> initial delay of 1 ms
1753 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001754 if self._waitpid_lock.acquire(False):
1755 try:
1756 if self.returncode is not None:
1757 break # Another thread waited.
1758 (pid, sts) = self._try_wait(os.WNOHANG)
1759 assert pid == self.pid or pid == 0
1760 if pid == self.pid:
1761 self._handle_exitstatus(sts)
1762 break
1763 finally:
1764 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001765 remaining = self._remaining_time(endtime)
1766 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001767 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001768 delay = min(delay * 2, remaining, .05)
1769 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001770 else:
1771 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001772 with self._waitpid_lock:
1773 if self.returncode is not None:
1774 break # Another thread waited.
1775 (pid, sts) = self._try_wait(0)
1776 # Check the pid and loop as waitpid has been known to
1777 # return 0 even without WNOHANG in odd situations.
1778 # http://bugs.python.org/issue14396.
1779 if pid == self.pid:
1780 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001781 return self.returncode
1782
1783
Reid Kleckner2b228f02011-03-16 16:57:54 -04001784 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001785 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001786 # Flush stdio buffer. This might block, if the user has
1787 # been writing to .stdin in an uncontrolled fashion.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001788 try:
1789 self.stdin.flush()
1790 except BrokenPipeError:
1791 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001792 if not input:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001793 try:
1794 self.stdin.close()
1795 except BrokenPipeError:
1796 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001797
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001798 stdout = None
1799 stderr = None
1800
1801 # Only create this mapping if we haven't already.
1802 if not self._communication_started:
1803 self._fileobj2output = {}
1804 if self.stdout:
1805 self._fileobj2output[self.stdout] = []
1806 if self.stderr:
1807 self._fileobj2output[self.stderr] = []
1808
1809 if self.stdout:
1810 stdout = self._fileobj2output[self.stdout]
1811 if self.stderr:
1812 stderr = self._fileobj2output[self.stderr]
1813
1814 self._save_input(input)
1815
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001816 if self._input:
1817 input_view = memoryview(self._input)
1818
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001819 with _PopenSelector() as selector:
1820 if self.stdin and input:
1821 selector.register(self.stdin, selectors.EVENT_WRITE)
1822 if self.stdout:
1823 selector.register(self.stdout, selectors.EVENT_READ)
1824 if self.stderr:
1825 selector.register(self.stderr, selectors.EVENT_READ)
1826
1827 while selector.get_map():
1828 timeout = self._remaining_time(endtime)
1829 if timeout is not None and timeout < 0:
1830 raise TimeoutExpired(self.args, orig_timeout)
1831
1832 ready = selector.select(timeout)
1833 self._check_timeout(endtime, orig_timeout)
1834
1835 # XXX Rewrite these to use non-blocking I/O on the file
1836 # objects; they are no longer using C stdio!
1837
1838 for key, events in ready:
1839 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001840 chunk = input_view[self._input_offset :
1841 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001842 try:
1843 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001844 except BrokenPipeError:
1845 selector.unregister(key.fileobj)
1846 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001847 else:
1848 if self._input_offset >= len(self._input):
1849 selector.unregister(key.fileobj)
1850 key.fileobj.close()
1851 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001852 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001853 if not data:
1854 selector.unregister(key.fileobj)
1855 key.fileobj.close()
1856 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001857
1858 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001859
1860 # All data exchanged. Translate lists into strings.
1861 if stdout is not None:
1862 stdout = b''.join(stdout)
1863 if stderr is not None:
1864 stderr = b''.join(stderr)
1865
1866 # Translate newlines, if requested.
1867 # This also turns bytes into strings.
andyclegg7fed7bd2017-10-23 03:01:19 +01001868 if self.text_mode:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001869 if stdout is not None:
1870 stdout = self._translate_newlines(stdout,
Steve Dower050acae2016-09-06 20:16:17 -07001871 self.stdout.encoding,
1872 self.stdout.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001873 if stderr is not None:
1874 stderr = self._translate_newlines(stderr,
Steve Dower050acae2016-09-06 20:16:17 -07001875 self.stderr.encoding,
1876 self.stderr.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001877
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001878 return (stdout, stderr)
1879
1880
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001881 def _save_input(self, input):
1882 # This method is called from the _communicate_with_*() methods
1883 # so that if we time out while communicating, we can continue
1884 # sending input if we retry.
1885 if self.stdin and self._input is None:
1886 self._input_offset = 0
1887 self._input = input
andyclegg7fed7bd2017-10-23 03:01:19 +01001888 if input is not None and self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -07001889 self._input = self._input.encode(self.stdin.encoding,
1890 self.stdin.errors)
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001891
1892
Christian Heimesa342c012008-04-20 21:01:16 +00001893 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001894 """Send a signal to the process."""
1895 # Skip signalling a process that we know has already died.
1896 if self.returncode is None:
1897 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00001898
1899 def terminate(self):
1900 """Terminate the process with SIGTERM
1901 """
1902 self.send_signal(signal.SIGTERM)
1903
1904 def kill(self):
1905 """Kill the process with SIGKILL
1906 """
1907 self.send_signal(signal.SIGKILL)