blob: 2723bc9e4274c3a3b1439ea29127c35084764362 [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
44import sys
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -070045_mswindows = (sys.platform == "win32")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000046
Guido van Rossumfa0054a2007-05-24 04:05:35 +000047import io
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000048import os
Reid Kleckner31aa7dd2011-03-14 12:02:10 -040049import time
Christian Heimesa342c012008-04-20 21:01:16 +000050import signal
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +000051import builtins
Gregory P. Smithd23047b2010-12-04 09:10:44 +000052import warnings
Ross Lagerwall4f61b022011-04-05 15:34:00 +020053import errno
Victor Stinnerae586492014-09-02 23:18:25 +020054from time import monotonic as _time
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000055
Peter Astrand454f7672005-01-01 09:36:35 +000056# Exception classes used by this module.
Gregory P. Smith54d412e2011-03-14 14:08:43 -040057class SubprocessError(Exception): pass
58
59
60class CalledProcessError(SubprocessError):
Martin Panter4afdca02016-10-25 22:20:48 +000061 """Raised when run() is called with check=True and the process
62 returns a non-zero exit status.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)d6da7602016-06-03 06:14:06 +000063
Martin Panter4afdca02016-10-25 22:20:48 +000064 Attributes:
65 cmd, returncode, stdout, stderr, output
Georg Brandlf9734072008-12-07 15:30:06 +000066 """
Gregory P. Smith6e730002015-04-14 16:14:25 -070067 def __init__(self, returncode, cmd, output=None, stderr=None):
Thomas Wouters0e3f5912006-08-11 14:57:12 +000068 self.returncode = returncode
69 self.cmd = cmd
Georg Brandlf9734072008-12-07 15:30:06 +000070 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -070071 self.stderr = stderr
72
Thomas Wouters0e3f5912006-08-11 14:57:12 +000073 def __str__(self):
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)d6da7602016-06-03 06:14:06 +000074 if self.returncode and self.returncode < 0:
75 try:
76 return "Command '%s' died with %r." % (
77 self.cmd, signal.Signals(-self.returncode))
78 except ValueError:
79 return "Command '%s' died with unknown signal %d." % (
80 self.cmd, -self.returncode)
81 else:
82 return "Command '%s' returned non-zero exit status %d." % (
83 self.cmd, self.returncode)
Thomas Wouters0e3f5912006-08-11 14:57:12 +000084
Gregory P. Smith6e730002015-04-14 16:14:25 -070085 @property
86 def stdout(self):
87 """Alias for output attribute, to match stderr"""
88 return self.output
89
90 @stdout.setter
91 def stdout(self, value):
92 # There's no obvious reason to set this, but allow it anyway so
93 # .stdout is a transparent alias for .output
94 self.output = value
95
Peter Astrand454f7672005-01-01 09:36:35 +000096
Gregory P. Smith54d412e2011-03-14 14:08:43 -040097class TimeoutExpired(SubprocessError):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -040098 """This exception is raised when the timeout expires while waiting for a
99 child process.
Martin Panter4afdca02016-10-25 22:20:48 +0000100
101 Attributes:
102 cmd, output, stdout, stderr, timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400103 """
Gregory P. Smith6e730002015-04-14 16:14:25 -0700104 def __init__(self, cmd, timeout, output=None, stderr=None):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400105 self.cmd = cmd
Reid Kleckner2b228f02011-03-16 16:57:54 -0400106 self.timeout = timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400107 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -0700108 self.stderr = stderr
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400109
110 def __str__(self):
111 return ("Command '%s' timed out after %s seconds" %
112 (self.cmd, self.timeout))
113
Gregory P. Smith6e730002015-04-14 16:14:25 -0700114 @property
115 def stdout(self):
116 return self.output
117
118 @stdout.setter
119 def stdout(self, value):
120 # There's no obvious reason to set this, but allow it anyway so
121 # .stdout is a transparent alias for .output
122 self.output = value
123
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400124
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700125if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000126 import threading
127 import msvcrt
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200128 import _winapi
Brian Curtin1ce6b582010-04-24 16:19:22 +0000129 class STARTUPINFO:
Subhendu Ghoshae160bb2017-02-25 20:29:05 +0530130 def __init__(self, *, dwFlags=0, hStdInput=None, hStdOutput=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200131 hStdError=None, wShowWindow=0, lpAttributeList=None):
Subhendu Ghoshae160bb2017-02-25 20:29:05 +0530132 self.dwFlags = dwFlags
133 self.hStdInput = hStdInput
134 self.hStdOutput = hStdOutput
135 self.hStdError = hStdError
136 self.wShowWindow = wShowWindow
Segev Finerb2a60832017-12-18 11:28:19 +0200137 self.lpAttributeList = lpAttributeList or {"handle_list": []}
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000138else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -0700139 import _posixsubprocess
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100140 import select
141 import selectors
Antoine Pitroua6a4dc82017-09-07 18:56:24 +0200142 import threading
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000143
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000144 # When select or poll has indicated that the file is writable,
145 # we can write up to _PIPE_BUF bytes without risk of blocking.
146 # POSIX defines PIPE_BUF as >= 512.
147 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
148
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100149 # poll/select have the advantage of not requiring any extra file
150 # descriptor, contrarily to epoll/kqueue (also, they require a single
151 # syscall).
152 if hasattr(selectors, 'PollSelector'):
153 _PopenSelector = selectors.PollSelector
154 else:
155 _PopenSelector = selectors.SelectSelector
156
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000157
Brett Cannona23810f2008-05-26 19:04:21 +0000158__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
Gregory P. Smith6e730002015-04-14 16:14:25 -0700159 "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL",
160 "SubprocessError", "TimeoutExpired", "CompletedProcess"]
Gregory P. Smithace55862015-04-07 15:57:54 -0700161 # NOTE: We intentionally exclude list2cmdline as it is
162 # considered an internal implementation detail. issue10838.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000163
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700164if _mswindows:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200165 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
166 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
167 STD_ERROR_HANDLE, SW_HIDE,
Jamesb5d9e082017-11-08 14:18:59 +0000168 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW,
169 ABOVE_NORMAL_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS,
170 HIGH_PRIORITY_CLASS, IDLE_PRIORITY_CLASS,
171 NORMAL_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS,
172 CREATE_NO_WINDOW, DETACHED_PROCESS,
173 CREATE_DEFAULT_ERROR_MODE, CREATE_BREAKAWAY_FROM_JOB)
Brian Curtin5d9deaa2011-04-29 16:24:07 -0500174
Brian Curtin08fd8d92011-04-29 16:11:30 -0500175 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
Brian Curtin8b8e7f42011-04-29 15:48:13 -0500176 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
177 "STD_ERROR_HANDLE", "SW_HIDE",
Martin Panter528619b2016-04-16 23:42:37 +0000178 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW",
Jamesb5d9e082017-11-08 14:18:59 +0000179 "STARTUPINFO",
180 "ABOVE_NORMAL_PRIORITY_CLASS", "BELOW_NORMAL_PRIORITY_CLASS",
181 "HIGH_PRIORITY_CLASS", "IDLE_PRIORITY_CLASS",
182 "NORMAL_PRIORITY_CLASS", "REALTIME_PRIORITY_CLASS",
183 "CREATE_NO_WINDOW", "DETACHED_PROCESS",
184 "CREATE_DEFAULT_ERROR_MODE", "CREATE_BREAKAWAY_FROM_JOB"])
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200185
186 class Handle(int):
187 closed = False
188
189 def Close(self, CloseHandle=_winapi.CloseHandle):
190 if not self.closed:
191 self.closed = True
192 CloseHandle(self)
193
194 def Detach(self):
195 if not self.closed:
196 self.closed = True
197 return int(self)
198 raise ValueError("already closed")
199
200 def __repr__(self):
Serhiy Storchaka465e60e2014-07-25 23:36:00 +0300201 return "%s(%d)" % (self.__class__.__name__, int(self))
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200202
203 __del__ = Close
204 __str__ = __repr__
205
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000206
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200207# This lists holds Popen instances for which the underlying process had not
208# exited at the time its __del__ method got called: those processes are wait()ed
209# for synchronously from _cleanup() when a new Popen object is created, to avoid
210# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000211_active = []
212
213def _cleanup():
214 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000215 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200216 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000217 try:
218 _active.remove(inst)
219 except ValueError:
220 # This can happen if two threads create a new Popen instance.
221 # It's harmless that it was already removed, so ignore.
222 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000223
224PIPE = -1
225STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200226DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000227
228
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200229# XXX This function is only used by multiprocessing and the test suite,
230# but it's here so that it can be imported when Python is compiled without
231# threads.
232
Victor Stinner9def2842016-01-18 12:15:08 +0100233def _optim_args_from_interpreter_flags():
234 """Return a list of command-line arguments reproducing the current
235 optimization settings in sys.flags."""
236 args = []
237 value = sys.flags.optimize
238 if value > 0:
239 args.append('-' + 'O' * value)
240 return args
241
242
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200243def _args_from_interpreter_flags():
244 """Return a list of command-line arguments reproducing the current
Victor Stinner747f48e2017-12-12 22:59:48 +0100245 settings in sys.flags, sys.warnoptions and sys._xoptions."""
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200246 flag_opt_map = {
247 'debug': 'd',
248 # 'inspect': 'i',
249 # 'interactive': 'i',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200250 'dont_write_bytecode': 'B',
251 'no_user_site': 's',
252 'no_site': 'S',
253 'ignore_environment': 'E',
254 'verbose': 'v',
255 'bytes_warning': 'b',
256 'quiet': 'q',
Victor Stinner9def2842016-01-18 12:15:08 +0100257 # -O is handled in _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200258 }
Victor Stinner9def2842016-01-18 12:15:08 +0100259 args = _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200260 for flag, opt in flag_opt_map.items():
261 v = getattr(sys.flags, flag)
262 if v > 0:
263 args.append('-' + opt * v)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800264
265 # -W options
Victor Stinner747f48e2017-12-12 22:59:48 +0100266 warnopts = sys.warnoptions[:]
267 bytes_warning = sys.flags.bytes_warning
268 xoptions = getattr(sys, '_xoptions', {})
269 dev_mode = ('dev' in xoptions)
270
271 if bytes_warning > 1:
272 warnopts.remove("error::BytesWarning")
273 elif bytes_warning:
274 warnopts.remove("default::BytesWarning")
275 if dev_mode:
276 warnopts.remove('default')
277 for opt in warnopts:
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200278 args.append('-W' + opt)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800279
280 # -X options
Victor Stinner747f48e2017-12-12 22:59:48 +0100281 if dev_mode:
Victor Stinnerf39b6742017-11-20 15:24:56 -0800282 args.extend(('-X', 'dev'))
283 for opt in ('faulthandler', 'tracemalloc', 'importtime',
Victor Stinner91106cd2017-12-13 12:29:09 +0100284 'showalloccount', 'showrefcount', 'utf8'):
Victor Stinnerf39b6742017-11-20 15:24:56 -0800285 if opt in xoptions:
286 value = xoptions[opt]
287 if value is True:
288 arg = opt
289 else:
290 arg = '%s=%s' % (opt, value)
291 args.extend(('-X', arg))
292
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200293 return args
294
295
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400296def call(*popenargs, timeout=None, **kwargs):
297 """Run command with arguments. Wait for command to complete or
298 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000299
300 The arguments are the same as for the Popen constructor. Example:
301
302 retcode = call(["ls", "-l"])
303 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200304 with Popen(*popenargs, **kwargs) as p:
305 try:
306 return p.wait(timeout=timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800307 except: # Including KeyboardInterrupt, wait handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200308 p.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800309 # We don't call p.wait() again as p.__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200310 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000311
312
Peter Astrand454f7672005-01-01 09:36:35 +0000313def check_call(*popenargs, **kwargs):
314 """Run command with arguments. Wait for command to complete. If
315 the exit code was zero then return, otherwise raise
316 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000317 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000318
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400319 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000320
321 check_call(["ls", "-l"])
322 """
323 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000324 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000325 cmd = kwargs.get("args")
326 if cmd is None:
327 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000328 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000329 return 0
330
331
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400332def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700333 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000334
335 If the exit code was non-zero it raises a CalledProcessError. The
336 CalledProcessError object will have the return code in the returncode
337 attribute and output in the output attribute.
338
339 The arguments are the same as for the Popen constructor. Example:
340
341 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000342 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000343
344 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000345 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000346
347 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000348 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000349 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000350 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700351
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300352 There is an additional optional argument, "input", allowing you to
353 pass a string to the subprocess's stdin. If you use this argument
354 you may not also use the Popen constructor's "stdin" argument, as
355 it too will be used internally. Example:
356
357 >>> check_output(["sed", "-e", "s/foo/bar/"],
358 ... input=b"when in the course of fooman events\n")
359 b'when in the course of barman events\n'
360
andyclegg7fed7bd2017-10-23 03:01:19 +0100361 By default, all communication is in bytes, and therefore any "input"
362 should be bytes, and the return value wil be bytes. If in text mode,
363 any "input" should be a string, and the return value will be a string
364 decoded according to locale encoding, or by "encoding" if set. Text mode
365 is triggered by setting any of text, encoding, errors or universal_newlines.
Georg Brandlf9734072008-12-07 15:30:06 +0000366 """
367 if 'stdout' in kwargs:
368 raise ValueError('stdout argument not allowed, it will be overridden.')
Gregory P. Smith6e730002015-04-14 16:14:25 -0700369
370 if 'input' in kwargs and kwargs['input'] is None:
371 # Explicitly passing input=None was previously equivalent to passing an
372 # empty string. That is maintained here for backwards compatibility.
373 kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
374
375 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
376 **kwargs).stdout
377
378
379class CompletedProcess(object):
380 """A process that has finished running.
381
382 This is returned by run().
383
384 Attributes:
385 args: The list or str args passed to run().
386 returncode: The exit code of the process, negative for signals.
387 stdout: The standard output (None if not captured).
388 stderr: The standard error (None if not captured).
389 """
390 def __init__(self, args, returncode, stdout=None, stderr=None):
391 self.args = args
392 self.returncode = returncode
393 self.stdout = stdout
394 self.stderr = stderr
395
396 def __repr__(self):
397 args = ['args={!r}'.format(self.args),
398 'returncode={!r}'.format(self.returncode)]
399 if self.stdout is not None:
400 args.append('stdout={!r}'.format(self.stdout))
401 if self.stderr is not None:
402 args.append('stderr={!r}'.format(self.stderr))
403 return "{}({})".format(type(self).__name__, ', '.join(args))
404
405 def check_returncode(self):
406 """Raise CalledProcessError if the exit code is non-zero."""
407 if self.returncode:
408 raise CalledProcessError(self.returncode, self.args, self.stdout,
409 self.stderr)
410
411
Bo Baylesce0f33d2018-01-30 00:40:39 -0600412def run(*popenargs,
413 input=None, capture_output=False, timeout=None, check=False, **kwargs):
Gregory P. Smith6e730002015-04-14 16:14:25 -0700414 """Run command with arguments and return a CompletedProcess instance.
415
416 The returned instance will have attributes args, returncode, stdout and
417 stderr. By default, stdout and stderr are not captured, and those attributes
418 will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.
419
420 If check is True and the exit code was non-zero, it raises a
421 CalledProcessError. The CalledProcessError object will have the return code
422 in the returncode attribute, and output & stderr attributes if those streams
423 were captured.
424
425 If timeout is given, and the process takes too long, a TimeoutExpired
426 exception will be raised.
427
428 There is an optional argument "input", allowing you to
andyclegg7fed7bd2017-10-23 03:01:19 +0100429 pass bytes or a string to the subprocess's stdin. If you use this argument
Gregory P. Smith6e730002015-04-14 16:14:25 -0700430 you may not also use the Popen constructor's "stdin" argument, as
431 it will be used internally.
432
andyclegg7fed7bd2017-10-23 03:01:19 +0100433 By default, all communication is in bytes, and therefore any "input" should
434 be bytes, and the stdout and stderr will be bytes. If in text mode, any
435 "input" should be a string, and stdout and stderr will be strings decoded
436 according to locale encoding, or by "encoding" if set. Text mode is
437 triggered by setting any of text, encoding, errors or universal_newlines.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700438
andyclegg7fed7bd2017-10-23 03:01:19 +0100439 The other arguments are the same as for the Popen constructor.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700440 """
441 if input is not None:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300442 if 'stdin' in kwargs:
443 raise ValueError('stdin and input arguments may not both be used.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300444 kwargs['stdin'] = PIPE
Gregory P. Smith6e730002015-04-14 16:14:25 -0700445
Bo Baylesce0f33d2018-01-30 00:40:39 -0600446 if capture_output:
447 if ('stdout' in kwargs) or ('stderr' in kwargs):
448 raise ValueError('stdout and stderr arguments may not be used '
449 'with capture_output.')
450 kwargs['stdout'] = PIPE
451 kwargs['stderr'] = PIPE
452
Gregory P. Smith6e730002015-04-14 16:14:25 -0700453 with Popen(*popenargs, **kwargs) as process:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200454 try:
Gregory P. Smith6e730002015-04-14 16:14:25 -0700455 stdout, stderr = process.communicate(input, timeout=timeout)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200456 except TimeoutExpired:
457 process.kill()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700458 stdout, stderr = process.communicate()
459 raise TimeoutExpired(process.args, timeout, output=stdout,
460 stderr=stderr)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800461 except: # Including KeyboardInterrupt, communicate handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200462 process.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800463 # We don't call process.wait() as .__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200464 raise
465 retcode = process.poll()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700466 if check and retcode:
467 raise CalledProcessError(retcode, process.args,
468 output=stdout, stderr=stderr)
469 return CompletedProcess(process.args, retcode, stdout, stderr)
Peter Astrand454f7672005-01-01 09:36:35 +0000470
471
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000472def list2cmdline(seq):
473 """
474 Translate a sequence of arguments into a command line
475 string, using the same rules as the MS C runtime:
476
477 1) Arguments are delimited by white space, which is either a
478 space or a tab.
479
480 2) A string surrounded by double quotation marks is
481 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000482 contained within. A quoted string can be embedded in an
483 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000484
485 3) A double quotation mark preceded by a backslash is
486 interpreted as a literal double quotation mark.
487
488 4) Backslashes are interpreted literally, unless they
489 immediately precede a double quotation mark.
490
491 5) If backslashes immediately precede a double quotation mark,
492 every pair of backslashes is interpreted as a literal
493 backslash. If the number of backslashes is odd, the last
494 backslash escapes the next double quotation mark as
495 described in rule 3.
496 """
497
498 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000499 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
500 # or search http://msdn.microsoft.com for
501 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000502 result = []
503 needquote = False
504 for arg in seq:
505 bs_buf = []
506
507 # Add a space to separate this argument from the others
508 if result:
509 result.append(' ')
510
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000511 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000512 if needquote:
513 result.append('"')
514
515 for c in arg:
516 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000517 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000518 bs_buf.append(c)
519 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000520 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000521 result.append('\\' * len(bs_buf)*2)
522 bs_buf = []
523 result.append('\\"')
524 else:
525 # Normal char
526 if bs_buf:
527 result.extend(bs_buf)
528 bs_buf = []
529 result.append(c)
530
Christian Heimesfdab48e2008-01-20 09:06:41 +0000531 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000532 if bs_buf:
533 result.extend(bs_buf)
534
535 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000536 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000537 result.append('"')
538
539 return ''.join(result)
540
541
Brett Cannona23810f2008-05-26 19:04:21 +0000542# Various tools for executing commands and looking at their output and status.
543#
Brett Cannona23810f2008-05-26 19:04:21 +0000544
545def getstatusoutput(cmd):
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700546 """Return (exitcode, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000547
Tim Golden60798142013-11-05 12:57:25 +0000548 Execute the string 'cmd' in a shell with 'check_output' and
Steve Dower050acae2016-09-06 20:16:17 -0700549 return a 2-tuple (status, output). The locale encoding is used
550 to decode the output and process newlines.
Tim Golden60798142013-11-05 12:57:25 +0000551
552 A trailing newline is stripped from the output.
553 The exit status for the command can be interpreted
554 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000555
556 >>> import subprocess
557 >>> subprocess.getstatusoutput('ls /bin/ls')
558 (0, '/bin/ls')
559 >>> subprocess.getstatusoutput('cat /bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700560 (1, 'cat: /bin/junk: No such file or directory')
Brett Cannona23810f2008-05-26 19:04:21 +0000561 >>> subprocess.getstatusoutput('/bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700562 (127, 'sh: /bin/junk: not found')
563 >>> subprocess.getstatusoutput('/bin/kill $$')
564 (-15, '')
Brett Cannona23810f2008-05-26 19:04:21 +0000565 """
Tim Goldene0041752013-11-03 12:53:17 +0000566 try:
andyclegg7fed7bd2017-10-23 03:01:19 +0100567 data = check_output(cmd, shell=True, text=True, stderr=STDOUT)
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700568 exitcode = 0
Tim Goldene0041752013-11-03 12:53:17 +0000569 except CalledProcessError as ex:
570 data = ex.output
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700571 exitcode = ex.returncode
Tim Goldene0041752013-11-03 12:53:17 +0000572 if data[-1:] == '\n':
573 data = data[:-1]
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700574 return exitcode, data
Brett Cannona23810f2008-05-26 19:04:21 +0000575
576def getoutput(cmd):
577 """Return output (stdout or stderr) of executing cmd in a shell.
578
579 Like getstatusoutput(), except the exit status is ignored and the return
580 value is a string containing the command's output. Example:
581
582 >>> import subprocess
583 >>> subprocess.getoutput('ls /bin/ls')
584 '/bin/ls'
585 """
586 return getstatusoutput(cmd)[1]
587
588
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000589class Popen(object):
Martin Panter4afdca02016-10-25 22:20:48 +0000590 """ Execute a child program in a new process.
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200591
Martin Panter4afdca02016-10-25 22:20:48 +0000592 For a complete description of the arguments see the Python documentation.
593
594 Arguments:
595 args: A string, or a sequence of program arguments.
596
597 bufsize: supplied as the buffering argument to the open() function when
598 creating the stdin/stdout/stderr pipe file objects
599
600 executable: A replacement program to execute.
601
602 stdin, stdout and stderr: These specify the executed programs' standard
603 input, standard output and standard error file handles, respectively.
604
605 preexec_fn: (POSIX only) An object to be called in the child process
606 just before the child is executed.
607
608 close_fds: Controls closing or inheriting of file descriptors.
609
610 shell: If true, the command will be executed through the shell.
611
612 cwd: Sets the current directory before the child is executed.
613
614 env: Defines the environment variables for the new process.
615
andyclegg7fed7bd2017-10-23 03:01:19 +0100616 text: If true, decode stdin, stdout and stderr using the given encoding
617 (if set) or the system default otherwise.
618
619 universal_newlines: Alias of text, provided for backwards compatibility.
Martin Panter4afdca02016-10-25 22:20:48 +0000620
621 startupinfo and creationflags (Windows only)
622
623 restore_signals (POSIX only)
624
625 start_new_session (POSIX only)
626
627 pass_fds (POSIX only)
628
Martin Panter3dca6242016-10-25 23:41:42 +0000629 encoding and errors: Text mode encoding and error handling to use for
630 file objects stdin, stdout and stderr.
631
Martin Panter4afdca02016-10-25 22:20:48 +0000632 Attributes:
633 stdin, stdout, stderr, pid, returncode
634 """
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200635 _child_created = False # Set here since __del__ checks it
636
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700637 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000638 stdin=None, stdout=None, stderr=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200639 preexec_fn=None, close_fds=True,
andyclegg7fed7bd2017-10-23 03:01:19 +0100640 shell=False, cwd=None, env=None, universal_newlines=None,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000641 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000642 restore_signals=True, start_new_session=False,
andyclegg7fed7bd2017-10-23 03:01:19 +0100643 pass_fds=(), *, encoding=None, errors=None, text=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000644 """Create new Popen instance."""
645 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700646 # Held while anything is calling waitpid before returncode has been
647 # updated to prevent clobbering returncode if wait() or poll() are
648 # called from multiple threads at once. After acquiring the lock,
649 # code must re-check self.returncode to see if another thread just
650 # finished a waitpid() call.
651 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000652
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400653 self._input = None
654 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000655 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700656 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000657 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000658 raise TypeError("bufsize must be an integer")
659
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700660 if _mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000661 if preexec_fn is not None:
662 raise ValueError("preexec_fn is not supported on Windows "
663 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000664 else:
665 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000666 if pass_fds and not close_fds:
667 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
668 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000669 if startupinfo is not None:
670 raise ValueError("startupinfo is only supported on Windows "
671 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000672 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000673 raise ValueError("creationflags is only supported on Windows "
674 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000675
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400676 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000677 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000678 self.stdout = None
679 self.stderr = None
680 self.pid = None
681 self.returncode = None
Steve Dower050acae2016-09-06 20:16:17 -0700682 self.encoding = encoding
683 self.errors = errors
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000684
andyclegg7fed7bd2017-10-23 03:01:19 +0100685 # Validate the combinations of text and universal_newlines
686 if (text is not None and universal_newlines is not None
687 and bool(universal_newlines) != bool(text)):
688 raise SubprocessError('Cannot disambiguate when both text '
689 'and universal_newlines are supplied but '
690 'different. Pass one or the other.')
691
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000692 # Input and output objects. The general principle is like
693 # this:
694 #
695 # Parent Child
696 # ------ -----
697 # p2cwrite ---stdin---> p2cread
698 # c2pread <--stdout--- c2pwrite
699 # errread <--stderr--- errwrite
700 #
701 # On POSIX, the child objects are file descriptors. On
702 # Windows, these are Windows file handles. The parent objects
703 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000704 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000705 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000706
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000707 (p2cread, p2cwrite,
708 c2pread, c2pwrite,
709 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
710
Antoine Pitrouc9982322011-01-04 19:07:07 +0000711 # We wrap OS handles *before* launching the child, otherwise a
712 # quickly terminating child could make our fds unwrappable
713 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000714
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700715 if _mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000716 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000717 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000718 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000719 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000720 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000721 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000722
andyclegg7fed7bd2017-10-23 03:01:19 +0100723 self.text_mode = encoding or errors or text or universal_newlines
Tim Peterse718f612004-10-12 21:51:32 +0000724
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800725 # How long to resume waiting on a child after the first ^C.
726 # There is no right value for this. The purpose is to be polite
727 # yet remain good for interactive users trying to exit a tool.
728 self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber()
729
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700730 self._closed_child_pipe_fds = False
Steve Dower050acae2016-09-06 20:16:17 -0700731
Antoine Pitrouc9982322011-01-04 19:07:07 +0000732 try:
Steve Dower050acae2016-09-06 20:16:17 -0700733 if p2cwrite != -1:
734 self.stdin = io.open(p2cwrite, 'wb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100735 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700736 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
737 line_buffering=(bufsize == 1),
738 encoding=encoding, errors=errors)
739 if c2pread != -1:
740 self.stdout = io.open(c2pread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100741 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700742 self.stdout = io.TextIOWrapper(self.stdout,
743 encoding=encoding, errors=errors)
744 if errread != -1:
745 self.stderr = io.open(errread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100746 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700747 self.stderr = io.TextIOWrapper(self.stderr,
748 encoding=encoding, errors=errors)
749
Antoine Pitrouc9982322011-01-04 19:07:07 +0000750 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300751 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000752 startupinfo, creationflags, shell,
753 p2cread, p2cwrite,
754 c2pread, c2pwrite,
755 errread, errwrite,
756 restore_signals, start_new_session)
757 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800758 # Cleanup if the child failed starting.
759 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000760 try:
761 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200762 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800763 pass # Ignore EBADF or other errors.
764
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700765 if not self._closed_child_pipe_fds:
766 to_close = []
767 if stdin == PIPE:
768 to_close.append(p2cread)
769 if stdout == PIPE:
770 to_close.append(c2pwrite)
771 if stderr == PIPE:
772 to_close.append(errwrite)
773 if hasattr(self, '_devnull'):
774 to_close.append(self._devnull)
775 for fd in to_close:
776 try:
Segev Finer4d385172017-08-18 16:18:13 +0300777 if _mswindows and isinstance(fd, Handle):
778 fd.Close()
779 else:
780 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700781 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700782 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800783
Antoine Pitrouc9982322011-01-04 19:07:07 +0000784 raise
785
andyclegg7fed7bd2017-10-23 03:01:19 +0100786 @property
787 def universal_newlines(self):
788 # universal_newlines as retained as an alias of text_mode for API
luzpaza5293b42017-11-05 07:37:50 -0600789 # compatibility. bpo-31756
andyclegg7fed7bd2017-10-23 03:01:19 +0100790 return self.text_mode
791
792 @universal_newlines.setter
793 def universal_newlines(self, universal_newlines):
794 self.text_mode = bool(universal_newlines)
795
Steve Dower050acae2016-09-06 20:16:17 -0700796 def _translate_newlines(self, data, encoding, errors):
797 data = data.decode(encoding, errors)
Andrew Svetlov82860712012-08-19 22:13:41 +0300798 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000799
Brian Curtin79cdb662010-12-03 02:46:02 +0000800 def __enter__(self):
801 return self
802
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800803 def __exit__(self, exc_type, value, traceback):
Brian Curtin79cdb662010-12-03 02:46:02 +0000804 if self.stdout:
805 self.stdout.close()
806 if self.stderr:
807 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200808 try: # Flushing a BufferedWriter may raise an error
809 if self.stdin:
810 self.stdin.close()
811 finally:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800812 if exc_type == KeyboardInterrupt:
813 # https://bugs.python.org/issue25942
814 # In the case of a KeyboardInterrupt we assume the SIGINT
815 # was also already sent to our child processes. We can't
816 # block indefinitely as that is not user friendly.
817 # If we have not already waited a brief amount of time in
818 # an interrupted .wait() or .communicate() call, do so here
819 # for consistency.
820 if self._sigint_wait_secs > 0:
821 try:
822 self._wait(timeout=self._sigint_wait_secs)
823 except TimeoutExpired:
824 pass
825 self._sigint_wait_secs = 0 # Note that this has been done.
826 return # resume the KeyboardInterrupt
827
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200828 # Wait for the process to terminate, to avoid zombies.
829 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000830
Victor Stinner9505b032017-01-06 10:44:44 +0100831 def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200832 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000833 # We didn't get to successfully create a child process.
834 return
Victor Stinner5a48e212016-05-20 12:11:15 +0200835 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800836 # Not reading subprocess exit status creates a zombie process which
Victor Stinnerc206f1e2016-06-14 16:42:59 +0200837 # is only destroyed at the parent python process exit
Victor Stinner9505b032017-01-06 10:44:44 +0100838 _warn("subprocess %s is still running" % self.pid,
839 ResourceWarning, source=self)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000840 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000841 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000842 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000843 # Child is still running, keep us alive until we can wait on it.
844 _active.append(self)
845
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200846 def _get_devnull(self):
847 if not hasattr(self, '_devnull'):
848 self._devnull = os.open(os.devnull, os.O_RDWR)
849 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000850
Victor Stinnera5e881d2015-01-14 17:07:59 +0100851 def _stdin_write(self, input):
852 if input:
853 try:
854 self.stdin.write(input)
855 except BrokenPipeError:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000856 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200857 except OSError as exc:
858 if exc.errno == errno.EINVAL:
859 # bpo-19612, bpo-30418: On Windows, stdin.write() fails
860 # with EINVAL if the child process exited or if the child
861 # process is still running but closed the pipe.
Victor Stinnera5e881d2015-01-14 17:07:59 +0100862 pass
863 else:
864 raise
Victor Stinnerd52aa312017-06-08 17:30:39 +0200865
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000866 try:
867 self.stdin.close()
868 except BrokenPipeError:
869 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200870 except OSError as exc:
871 if exc.errno == errno.EINVAL:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000872 pass
873 else:
874 raise
Victor Stinnera5e881d2015-01-14 17:07:59 +0100875
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400876 def communicate(self, input=None, timeout=None):
Joel Schaerer88031a92017-09-13 21:11:20 +0200877 """Interact with process: Send data to stdin and close it.
878 Read data from stdout and stderr, until end-of-file is
879 reached. Wait for process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +0000880
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400881 The optional "input" argument should be data to be sent to the
andyclegg7fed7bd2017-10-23 03:01:19 +0100882 child process, or None, if no data should be sent to the child.
883 communicate() returns a tuple (stdout, stderr).
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400884
andyclegg7fed7bd2017-10-23 03:01:19 +0100885 By default, all communication is in bytes, and therefore any
886 "input" should be bytes, and the (stdout, stderr) will be bytes.
887 If in text mode (indicated by self.text_mode), any "input" should
888 be a string, and (stdout, stderr) will be strings decoded
889 according to locale encoding, or by "encoding" if set. Text mode
890 is triggered by setting any of text, encoding, errors or
891 universal_newlines.
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400892 """
Peter Astrand23109f02005-03-03 20:28:59 +0000893
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400894 if self._communication_started and input:
895 raise ValueError("Cannot send input after starting communication")
896
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400897 # Optimization: If we are not worried about timeouts, we haven't
898 # started communicating, and we have one or zero pipes, using select()
899 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200900 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400901 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000902 stdout = None
903 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000904 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +0100905 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +0000906 elif self.stdout:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000907 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000908 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000909 elif self.stderr:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000910 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000911 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000912 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200913 else:
914 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +0200915 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +0200916 else:
917 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000918
Victor Stinner7a8d0812011-04-05 13:13:08 +0200919 try:
920 stdout, stderr = self._communicate(input, endtime, timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800921 except KeyboardInterrupt:
922 # https://bugs.python.org/issue25942
923 # See the detailed comment in .wait().
924 if timeout is not None:
925 sigint_timeout = min(self._sigint_wait_secs,
926 self._remaining_time(endtime))
927 else:
928 sigint_timeout = self._sigint_wait_secs
929 self._sigint_wait_secs = 0 # nothing else should wait.
930 try:
931 self._wait(timeout=sigint_timeout)
932 except TimeoutExpired:
933 pass
934 raise # resume the KeyboardInterrupt
935
Victor Stinner7a8d0812011-04-05 13:13:08 +0200936 finally:
937 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400938
Victor Stinner7a8d0812011-04-05 13:13:08 +0200939 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400940
941 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +0000942
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000943
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000944 def poll(self):
Martin Panter4afdca02016-10-25 22:20:48 +0000945 """Check if child process has terminated. Set and return returncode
946 attribute."""
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000947 return self._internal_poll()
948
949
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400950 def _remaining_time(self, endtime):
951 """Convenience for _communicate when computing timeouts."""
952 if endtime is None:
953 return None
954 else:
Victor Stinner949d8c92012-05-30 13:30:32 +0200955 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400956
957
Reid Kleckner2b228f02011-03-16 16:57:54 -0400958 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400959 """Convenience for checking if a timeout has expired."""
960 if endtime is None:
961 return
Victor Stinner949d8c92012-05-30 13:30:32 +0200962 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -0400963 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400964
965
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800966 def wait(self, timeout=None):
967 """Wait for child process to terminate; returns self.returncode."""
968 if timeout is not None:
969 endtime = _time() + timeout
970 try:
971 return self._wait(timeout=timeout)
972 except KeyboardInterrupt:
973 # https://bugs.python.org/issue25942
974 # The first keyboard interrupt waits briefly for the child to
975 # exit under the common assumption that it also received the ^C
976 # generated SIGINT and will exit rapidly.
977 if timeout is not None:
978 sigint_timeout = min(self._sigint_wait_secs,
979 self._remaining_time(endtime))
980 else:
981 sigint_timeout = self._sigint_wait_secs
982 self._sigint_wait_secs = 0 # nothing else should wait.
983 try:
984 self._wait(timeout=sigint_timeout)
985 except TimeoutExpired:
986 pass
987 raise # resume the KeyboardInterrupt
988
989
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700990 if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000991 #
992 # Windows methods
993 #
994 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +0000995 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000996 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
997 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000998 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000999 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +00001000
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001001 p2cread, p2cwrite = -1, -1
1002 c2pread, c2pwrite = -1, -1
1003 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001004
Peter Astrandd38ddf42005-02-10 08:32:50 +00001005 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001006 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001007 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001008 p2cread, _ = _winapi.CreatePipe(None, 0)
1009 p2cread = Handle(p2cread)
1010 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001011 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001012 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
1013 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001014 elif stdin == DEVNULL:
1015 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001016 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001017 p2cread = msvcrt.get_osfhandle(stdin)
1018 else:
1019 # Assuming file-like object
1020 p2cread = msvcrt.get_osfhandle(stdin.fileno())
1021 p2cread = self._make_inheritable(p2cread)
1022
Peter Astrandd38ddf42005-02-10 08:32:50 +00001023 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001024 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001025 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001026 _, c2pwrite = _winapi.CreatePipe(None, 0)
1027 c2pwrite = Handle(c2pwrite)
1028 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001029 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001030 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
1031 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001032 elif stdout == DEVNULL:
1033 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001034 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001035 c2pwrite = msvcrt.get_osfhandle(stdout)
1036 else:
1037 # Assuming file-like object
1038 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1039 c2pwrite = self._make_inheritable(c2pwrite)
1040
Peter Astrandd38ddf42005-02-10 08:32:50 +00001041 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001042 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001043 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001044 _, errwrite = _winapi.CreatePipe(None, 0)
1045 errwrite = Handle(errwrite)
1046 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001047 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001048 errread, errwrite = _winapi.CreatePipe(None, 0)
1049 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001050 elif stderr == STDOUT:
1051 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001052 elif stderr == DEVNULL:
1053 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001054 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001055 errwrite = msvcrt.get_osfhandle(stderr)
1056 else:
1057 # Assuming file-like object
1058 errwrite = msvcrt.get_osfhandle(stderr.fileno())
1059 errwrite = self._make_inheritable(errwrite)
1060
1061 return (p2cread, p2cwrite,
1062 c2pread, c2pwrite,
1063 errread, errwrite)
1064
1065
1066 def _make_inheritable(self, handle):
1067 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001068 h = _winapi.DuplicateHandle(
1069 _winapi.GetCurrentProcess(), handle,
1070 _winapi.GetCurrentProcess(), 0, 1,
1071 _winapi.DUPLICATE_SAME_ACCESS)
1072 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001073
1074
Segev Finerb2a60832017-12-18 11:28:19 +02001075 def _filter_handle_list(self, handle_list):
1076 """Filter out console handles that can't be used
1077 in lpAttributeList["handle_list"] and make sure the list
1078 isn't empty. This also removes duplicate handles."""
1079 # An handle with it's lowest two bits set might be a special console
1080 # handle that if passed in lpAttributeList["handle_list"], will
1081 # cause it to fail.
1082 return list({handle for handle in handle_list
1083 if handle & 0x3 != 0x3
1084 or _winapi.GetFileType(handle) !=
1085 _winapi.FILE_TYPE_CHAR})
1086
1087
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001088 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001089 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001090 startupinfo, creationflags, shell,
1091 p2cread, p2cwrite,
1092 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001093 errread, errwrite,
1094 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001095 """Execute program (MS Windows version)"""
1096
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001097 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001098
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001099 if not isinstance(args, str):
Anders Lorentsendd42cb72018-01-30 08:27:28 +01001100 try:
1101 args = os.fsdecode(args) # os.PathLike -> str
1102 except TypeError: # not an os.PathLike, must be a sequence.
1103 args = list(args)
1104 args[0] = os.fsdecode(args[0]) # os.PathLike -> str
1105 args = list2cmdline(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001106
Peter Astrandc1d65362004-11-07 14:30:34 +00001107 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001108 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001109 startupinfo = STARTUPINFO()
Segev Finerb2a60832017-12-18 11:28:19 +02001110
1111 use_std_handles = -1 not in (p2cread, c2pwrite, errwrite)
1112 if use_std_handles:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001113 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001114 startupinfo.hStdInput = p2cread
1115 startupinfo.hStdOutput = c2pwrite
1116 startupinfo.hStdError = errwrite
1117
Segev Finerb2a60832017-12-18 11:28:19 +02001118 attribute_list = startupinfo.lpAttributeList
1119 have_handle_list = bool(attribute_list and
1120 "handle_list" in attribute_list and
1121 attribute_list["handle_list"])
1122
1123 # If we were given an handle_list or need to create one
1124 if have_handle_list or (use_std_handles and close_fds):
1125 if attribute_list is None:
1126 attribute_list = startupinfo.lpAttributeList = {}
1127 handle_list = attribute_list["handle_list"] = \
1128 list(attribute_list.get("handle_list", []))
1129
1130 if use_std_handles:
1131 handle_list += [int(p2cread), int(c2pwrite), int(errwrite)]
1132
1133 handle_list[:] = self._filter_handle_list(handle_list)
1134
1135 if handle_list:
1136 if not close_fds:
1137 warnings.warn("startupinfo.lpAttributeList['handle_list'] "
1138 "overriding close_fds", RuntimeWarning)
1139
1140 # When using the handle_list we always request to inherit
1141 # handles but the only handles that will be inherited are
1142 # the ones in the handle_list
1143 close_fds = False
1144
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001145 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001146 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1147 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001148 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001149 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001150
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001151 # Start the process
1152 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001153 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001154 # no special security
1155 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001156 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001157 creationflags,
1158 env,
Benjamin Petersoncb90f262017-03-02 00:03:41 -08001159 os.fspath(cwd) if cwd is not None else None,
Tim Peterse8374a52004-10-13 03:15:00 +00001160 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001161 finally:
1162 # Child is launched. Close the parent's copy of those pipe
1163 # handles that only the child should have open. You need
1164 # to make sure that no handles to the write end of the
1165 # output pipe are maintained in this process or else the
1166 # pipe will not close when the child process exits and the
1167 # ReadFile will hang.
1168 if p2cread != -1:
1169 p2cread.Close()
1170 if c2pwrite != -1:
1171 c2pwrite.Close()
1172 if errwrite != -1:
1173 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001174 if hasattr(self, '_devnull'):
1175 os.close(self._devnull)
Segev Finer4d385172017-08-18 16:18:13 +03001176 # Prevent a double close of these handles/fds from __init__
1177 # on error.
1178 self._closed_child_pipe_fds = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001179
1180 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001181 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001182 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001183 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001184 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001185
Brett Cannon84df1e62010-05-14 00:33:40 +00001186 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001187 _WaitForSingleObject=_winapi.WaitForSingleObject,
1188 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1189 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001190 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001191 attribute.
1192
1193 This method is called by __del__, so it can only refer to objects
1194 in its local scope.
1195
1196 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001197 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001198 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1199 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001200 return self.returncode
1201
1202
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001203 def _wait(self, timeout):
1204 """Internal implementation of wait() on Windows."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001205 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001206 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001207 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001208 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001209 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001210 # API note: Returns immediately if timeout_millis == 0.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001211 result = _winapi.WaitForSingleObject(self._handle,
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001212 timeout_millis)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001213 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001214 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001215 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001216 return self.returncode
1217
1218
1219 def _readerthread(self, fh, buffer):
1220 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001221 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001222
1223
Reid Kleckner2b228f02011-03-16 16:57:54 -04001224 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001225 # Start reader threads feeding into a list hanging off of this
1226 # object, unless they've already been started.
1227 if self.stdout and not hasattr(self, "_stdout_buff"):
1228 self._stdout_buff = []
1229 self.stdout_thread = \
1230 threading.Thread(target=self._readerthread,
1231 args=(self.stdout, self._stdout_buff))
1232 self.stdout_thread.daemon = True
1233 self.stdout_thread.start()
1234 if self.stderr and not hasattr(self, "_stderr_buff"):
1235 self._stderr_buff = []
1236 self.stderr_thread = \
1237 threading.Thread(target=self._readerthread,
1238 args=(self.stderr, self._stderr_buff))
1239 self.stderr_thread.daemon = True
1240 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001241
1242 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001243 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001244
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001245 # Wait for the reader threads, or time out. If we time out, the
1246 # threads remain reading and the fds left open in case the user
1247 # calls communicate again.
1248 if self.stdout is not None:
1249 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001250 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001251 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001252 if self.stderr is not None:
1253 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001254 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001255 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001256
1257 # Collect the output from and close both pipes, now that we know
1258 # both have been read successfully.
1259 stdout = None
1260 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001261 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001262 stdout = self._stdout_buff
1263 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001264 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001265 stderr = self._stderr_buff
1266 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001267
1268 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001269 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001270 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001271 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001272 stderr = stderr[0]
1273
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001274 return (stdout, stderr)
1275
Christian Heimesa342c012008-04-20 21:01:16 +00001276 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001277 """Send a signal to the process."""
1278 # Don't signal a process that we know has already died.
1279 if self.returncode is not None:
1280 return
Christian Heimesa342c012008-04-20 21:01:16 +00001281 if sig == signal.SIGTERM:
1282 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001283 elif sig == signal.CTRL_C_EVENT:
1284 os.kill(self.pid, signal.CTRL_C_EVENT)
1285 elif sig == signal.CTRL_BREAK_EVENT:
1286 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001287 else:
Brian Curtin19651362010-09-07 13:24:38 +00001288 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001289
1290 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001291 """Terminates the process."""
1292 # Don't terminate a process that we know has already died.
1293 if self.returncode is not None:
1294 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001295 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001296 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001297 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001298 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1299 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001300 rc = _winapi.GetExitCodeProcess(self._handle)
1301 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001302 raise
1303 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001304
1305 kill = terminate
1306
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001307 else:
1308 #
1309 # POSIX methods
1310 #
1311 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001312 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001313 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1314 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001315 p2cread, p2cwrite = -1, -1
1316 c2pread, c2pwrite = -1, -1
1317 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001318
Peter Astrandd38ddf42005-02-10 08:32:50 +00001319 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001320 pass
1321 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001322 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001323 elif stdin == DEVNULL:
1324 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001325 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001326 p2cread = stdin
1327 else:
1328 # Assuming file-like object
1329 p2cread = stdin.fileno()
1330
Peter Astrandd38ddf42005-02-10 08:32:50 +00001331 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001332 pass
1333 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001334 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001335 elif stdout == DEVNULL:
1336 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001337 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001338 c2pwrite = stdout
1339 else:
1340 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001341 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001342
Peter Astrandd38ddf42005-02-10 08:32:50 +00001343 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001344 pass
1345 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001346 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001347 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001348 if c2pwrite != -1:
1349 errwrite = c2pwrite
1350 else: # child's stdout is not set, use parent's stdout
1351 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001352 elif stderr == DEVNULL:
1353 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001354 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001355 errwrite = stderr
1356 else:
1357 # Assuming file-like object
1358 errwrite = stderr.fileno()
1359
1360 return (p2cread, p2cwrite,
1361 c2pread, c2pwrite,
1362 errread, errwrite)
1363
1364
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001365 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001366 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001367 startupinfo, creationflags, shell,
1368 p2cread, p2cwrite,
1369 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001370 errread, errwrite,
1371 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001372 """Execute program (POSIX version)"""
1373
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001374 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001375 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001376 else:
Anders Lorentsendd42cb72018-01-30 08:27:28 +01001377 try:
1378 args = list(args)
1379 except TypeError: # os.PathLike instead of a sequence?
1380 args = [os.fsencode(args)] # os.PathLike -> [str]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001381
1382 if shell:
Xavier de Gayeb35fc622016-12-13 16:32:21 +01001383 # On Android the default shell is at '/system/bin/sh'.
1384 unix_shell = ('/system/bin/sh' if
1385 hasattr(sys, 'getandroidapilevel') else '/bin/sh')
1386 args = [unix_shell, "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001387 if executable:
1388 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001389
Peter Astrandd38ddf42005-02-10 08:32:50 +00001390 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001391 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001392 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001393
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001394 # For transferring possible exec failure from child to parent.
1395 # Data format: "exception name:hex errno:description"
1396 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001397 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001398 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1399 low_fds_to_close = []
1400 while errpipe_write < 3:
1401 low_fds_to_close.append(errpipe_write)
1402 errpipe_write = os.dup(errpipe_write)
1403 for low_fd in low_fds_to_close:
1404 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001405 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001406 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001407 # We must avoid complex work that could involve
1408 # malloc or free in the child process to avoid
1409 # potential deadlocks, thus we do all this here.
1410 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001411
Victor Stinner372b8382011-06-21 17:24:21 +02001412 if env is not None:
Serhiy Storchakad174d242017-06-23 19:39:27 +03001413 env_list = []
1414 for k, v in env.items():
1415 k = os.fsencode(k)
1416 if b'=' in k:
1417 raise ValueError("illegal environment variable name")
1418 env_list.append(k + b'=' + os.fsencode(v))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001419 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001420 env_list = None # Use execv instead of execve.
1421 executable = os.fsencode(executable)
1422 if os.path.dirname(executable):
1423 executable_list = (executable,)
1424 else:
1425 # This matches the behavior of os._execvpe().
1426 executable_list = tuple(
1427 os.path.join(os.fsencode(dir), executable)
1428 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001429 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001430 fds_to_keep.add(errpipe_write)
1431 self.pid = _posixsubprocess.fork_exec(
1432 args, executable_list,
Serhiy Storchaka66bffd12017-04-19 21:12:46 +03001433 close_fds, tuple(sorted(map(int, fds_to_keep))),
1434 cwd, env_list,
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001435 p2cread, p2cwrite, c2pread, c2pwrite,
1436 errread, errwrite,
1437 errpipe_read, errpipe_write,
1438 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001439 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001440 finally:
1441 # be sure the FD is closed no matter what
1442 os.close(errpipe_write)
1443
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001444 # self._devnull is not always defined.
1445 devnull_fd = getattr(self, '_devnull', None)
1446 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001447 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001448 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001449 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001450 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001451 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001452 if devnull_fd is not None:
1453 os.close(devnull_fd)
1454 # Prevent a double close of these fds from __init__ on error.
1455 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001456
1457 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001458 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001459 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001460 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001461 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001462 errpipe_data += part
1463 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001464 break
Facundo Batista10706e22009-06-19 20:34:30 +00001465 finally:
1466 # be sure the FD is closed no matter what
1467 os.close(errpipe_read)
1468
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001469 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001470 try:
Victor Stinnera58e2c52016-05-20 12:08:12 +02001471 pid, sts = os.waitpid(self.pid, 0)
1472 if pid == self.pid:
1473 self._handle_exitstatus(sts)
1474 else:
1475 self.returncode = sys.maxsize
Victor Stinnera5e881d2015-01-14 17:07:59 +01001476 except ChildProcessError:
1477 pass
Victor Stinnera58e2c52016-05-20 12:08:12 +02001478
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001479 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001480 exception_name, hex_errno, err_msg = (
1481 errpipe_data.split(b':', 2))
Ammar Askar3fc499b2017-09-06 02:41:30 -04001482 # The encoding here should match the encoding
1483 # written in by the subprocess implementations
1484 # like _posixsubprocess
1485 err_msg = err_msg.decode()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001486 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001487 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001488 hex_errno = b'0'
Ammar Askar3fc499b2017-09-06 02:41:30 -04001489 err_msg = 'Bad exception data from child: {!r}'.format(
1490 bytes(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001491 child_exception_type = getattr(
1492 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001493 SubprocessError)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001494 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001495 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001496 child_exec_never_called = (err_msg == "noexec")
1497 if child_exec_never_called:
1498 err_msg = ""
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001499 # The error must be from chdir(cwd).
1500 err_filename = cwd
1501 else:
1502 err_filename = orig_executable
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001503 if errno_num != 0:
1504 err_msg = os.strerror(errno_num)
1505 if errno_num == errno.ENOENT:
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001506 err_msg += ': ' + repr(err_filename)
1507 raise child_exception_type(errno_num, err_msg, err_filename)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001508 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001509
1510
Brett Cannon84df1e62010-05-14 00:33:40 +00001511 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1512 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001513 _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
1514 _WSTOPSIG=os.WSTOPSIG):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001515 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001516 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001517 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001518 if _WIFSIGNALED(sts):
1519 self.returncode = -_WTERMSIG(sts)
1520 elif _WIFEXITED(sts):
1521 self.returncode = _WEXITSTATUS(sts)
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001522 elif _WIFSTOPPED(sts):
1523 self.returncode = -_WSTOPSIG(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001524 else:
1525 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001526 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001527
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001528
Brett Cannon84df1e62010-05-14 00:33:40 +00001529 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001530 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001531 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001532 attribute.
1533
1534 This method is called by __del__, so it cannot reference anything
1535 outside of the local scope (nor can any methods it calls).
1536
1537 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001538 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001539 if not self._waitpid_lock.acquire(False):
1540 # Something else is busy calling waitpid. Don't allow two
1541 # at once. We know nothing yet.
1542 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001543 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001544 if self.returncode is not None:
1545 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001546 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001547 if pid == self.pid:
1548 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001549 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001550 if _deadstate is not None:
1551 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001552 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001553 # This happens if SIGCLD is set to be ignored or
1554 # waiting for child processes has otherwise been
1555 # disabled for our process. This child is dead, we
1556 # can't get the status.
1557 # http://bugs.python.org/issue15756
1558 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001559 finally:
1560 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001561 return self.returncode
1562
1563
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001564 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001565 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001566 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001567 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001568 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001569 # This happens if SIGCLD is set to be ignored or waiting
1570 # for child processes has otherwise been disabled for our
1571 # process. This child is dead, we can't get the status.
1572 pid = self.pid
1573 sts = 0
1574 return (pid, sts)
1575
1576
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001577 def _wait(self, timeout):
1578 """Internal implementation of wait() on POSIX."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001579 if self.returncode is not None:
1580 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001581
Gregory P. Smith82604e02016-11-20 16:31:07 -08001582 if timeout is not None:
1583 endtime = _time() + timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001584 # Enter a busy loop if we have a timeout. This busy loop was
1585 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1586 delay = 0.0005 # 500 us -> initial delay of 1 ms
1587 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001588 if self._waitpid_lock.acquire(False):
1589 try:
1590 if self.returncode is not None:
1591 break # Another thread waited.
1592 (pid, sts) = self._try_wait(os.WNOHANG)
1593 assert pid == self.pid or pid == 0
1594 if pid == self.pid:
1595 self._handle_exitstatus(sts)
1596 break
1597 finally:
1598 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001599 remaining = self._remaining_time(endtime)
1600 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001601 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001602 delay = min(delay * 2, remaining, .05)
1603 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001604 else:
1605 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001606 with self._waitpid_lock:
1607 if self.returncode is not None:
1608 break # Another thread waited.
1609 (pid, sts) = self._try_wait(0)
1610 # Check the pid and loop as waitpid has been known to
1611 # return 0 even without WNOHANG in odd situations.
1612 # http://bugs.python.org/issue14396.
1613 if pid == self.pid:
1614 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001615 return self.returncode
1616
1617
Reid Kleckner2b228f02011-03-16 16:57:54 -04001618 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001619 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001620 # Flush stdio buffer. This might block, if the user has
1621 # been writing to .stdin in an uncontrolled fashion.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001622 try:
1623 self.stdin.flush()
1624 except BrokenPipeError:
1625 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001626 if not input:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001627 try:
1628 self.stdin.close()
1629 except BrokenPipeError:
1630 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001631
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001632 stdout = None
1633 stderr = None
1634
1635 # Only create this mapping if we haven't already.
1636 if not self._communication_started:
1637 self._fileobj2output = {}
1638 if self.stdout:
1639 self._fileobj2output[self.stdout] = []
1640 if self.stderr:
1641 self._fileobj2output[self.stderr] = []
1642
1643 if self.stdout:
1644 stdout = self._fileobj2output[self.stdout]
1645 if self.stderr:
1646 stderr = self._fileobj2output[self.stderr]
1647
1648 self._save_input(input)
1649
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001650 if self._input:
1651 input_view = memoryview(self._input)
1652
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001653 with _PopenSelector() as selector:
1654 if self.stdin and input:
1655 selector.register(self.stdin, selectors.EVENT_WRITE)
1656 if self.stdout:
1657 selector.register(self.stdout, selectors.EVENT_READ)
1658 if self.stderr:
1659 selector.register(self.stderr, selectors.EVENT_READ)
1660
1661 while selector.get_map():
1662 timeout = self._remaining_time(endtime)
1663 if timeout is not None and timeout < 0:
1664 raise TimeoutExpired(self.args, orig_timeout)
1665
1666 ready = selector.select(timeout)
1667 self._check_timeout(endtime, orig_timeout)
1668
1669 # XXX Rewrite these to use non-blocking I/O on the file
1670 # objects; they are no longer using C stdio!
1671
1672 for key, events in ready:
1673 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001674 chunk = input_view[self._input_offset :
1675 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001676 try:
1677 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001678 except BrokenPipeError:
1679 selector.unregister(key.fileobj)
1680 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001681 else:
1682 if self._input_offset >= len(self._input):
1683 selector.unregister(key.fileobj)
1684 key.fileobj.close()
1685 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001686 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001687 if not data:
1688 selector.unregister(key.fileobj)
1689 key.fileobj.close()
1690 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001691
1692 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001693
1694 # All data exchanged. Translate lists into strings.
1695 if stdout is not None:
1696 stdout = b''.join(stdout)
1697 if stderr is not None:
1698 stderr = b''.join(stderr)
1699
1700 # Translate newlines, if requested.
1701 # This also turns bytes into strings.
andyclegg7fed7bd2017-10-23 03:01:19 +01001702 if self.text_mode:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001703 if stdout is not None:
1704 stdout = self._translate_newlines(stdout,
Steve Dower050acae2016-09-06 20:16:17 -07001705 self.stdout.encoding,
1706 self.stdout.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001707 if stderr is not None:
1708 stderr = self._translate_newlines(stderr,
Steve Dower050acae2016-09-06 20:16:17 -07001709 self.stderr.encoding,
1710 self.stderr.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001711
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001712 return (stdout, stderr)
1713
1714
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001715 def _save_input(self, input):
1716 # This method is called from the _communicate_with_*() methods
1717 # so that if we time out while communicating, we can continue
1718 # sending input if we retry.
1719 if self.stdin and self._input is None:
1720 self._input_offset = 0
1721 self._input = input
andyclegg7fed7bd2017-10-23 03:01:19 +01001722 if input is not None and self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -07001723 self._input = self._input.encode(self.stdin.encoding,
1724 self.stdin.errors)
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001725
1726
Christian Heimesa342c012008-04-20 21:01:16 +00001727 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001728 """Send a signal to the process."""
1729 # Skip signalling a process that we know has already died.
1730 if self.returncode is None:
1731 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00001732
1733 def terminate(self):
1734 """Terminate the process with SIGTERM
1735 """
1736 self.send_signal(signal.SIGTERM)
1737
1738 def kill(self):
1739 """Kill the process with SIGKILL
1740 """
1741 self.send_signal(signal.SIGKILL)