blob: 93635ee61f7e9ffce2361d8b63384107fd04cd4a [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):
Miss Islington (bot)b7dcae32018-02-27 15:30:30 -08001100 args = list2cmdline(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001101
Peter Astrandc1d65362004-11-07 14:30:34 +00001102 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001103 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001104 startupinfo = STARTUPINFO()
Segev Finerb2a60832017-12-18 11:28:19 +02001105
1106 use_std_handles = -1 not in (p2cread, c2pwrite, errwrite)
1107 if use_std_handles:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001108 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001109 startupinfo.hStdInput = p2cread
1110 startupinfo.hStdOutput = c2pwrite
1111 startupinfo.hStdError = errwrite
1112
Segev Finerb2a60832017-12-18 11:28:19 +02001113 attribute_list = startupinfo.lpAttributeList
1114 have_handle_list = bool(attribute_list and
1115 "handle_list" in attribute_list and
1116 attribute_list["handle_list"])
1117
1118 # If we were given an handle_list or need to create one
1119 if have_handle_list or (use_std_handles and close_fds):
1120 if attribute_list is None:
1121 attribute_list = startupinfo.lpAttributeList = {}
1122 handle_list = attribute_list["handle_list"] = \
1123 list(attribute_list.get("handle_list", []))
1124
1125 if use_std_handles:
1126 handle_list += [int(p2cread), int(c2pwrite), int(errwrite)]
1127
1128 handle_list[:] = self._filter_handle_list(handle_list)
1129
1130 if handle_list:
1131 if not close_fds:
1132 warnings.warn("startupinfo.lpAttributeList['handle_list'] "
1133 "overriding close_fds", RuntimeWarning)
1134
1135 # When using the handle_list we always request to inherit
1136 # handles but the only handles that will be inherited are
1137 # the ones in the handle_list
1138 close_fds = False
1139
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001140 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001141 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1142 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001143 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001144 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001145
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001146 # Start the process
1147 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001148 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001149 # no special security
1150 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001151 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001152 creationflags,
1153 env,
Benjamin Petersoncb90f262017-03-02 00:03:41 -08001154 os.fspath(cwd) if cwd is not None else None,
Tim Peterse8374a52004-10-13 03:15:00 +00001155 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001156 finally:
1157 # Child is launched. Close the parent's copy of those pipe
1158 # handles that only the child should have open. You need
1159 # to make sure that no handles to the write end of the
1160 # output pipe are maintained in this process or else the
1161 # pipe will not close when the child process exits and the
1162 # ReadFile will hang.
1163 if p2cread != -1:
1164 p2cread.Close()
1165 if c2pwrite != -1:
1166 c2pwrite.Close()
1167 if errwrite != -1:
1168 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001169 if hasattr(self, '_devnull'):
1170 os.close(self._devnull)
Segev Finer4d385172017-08-18 16:18:13 +03001171 # Prevent a double close of these handles/fds from __init__
1172 # on error.
1173 self._closed_child_pipe_fds = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001174
1175 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001176 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001177 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001178 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001179 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001180
Brett Cannon84df1e62010-05-14 00:33:40 +00001181 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001182 _WaitForSingleObject=_winapi.WaitForSingleObject,
1183 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1184 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001185 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001186 attribute.
1187
1188 This method is called by __del__, so it can only refer to objects
1189 in its local scope.
1190
1191 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001192 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001193 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1194 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001195 return self.returncode
1196
1197
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001198 def _wait(self, timeout):
1199 """Internal implementation of wait() on Windows."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001200 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001201 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001202 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001203 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001204 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001205 # API note: Returns immediately if timeout_millis == 0.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001206 result = _winapi.WaitForSingleObject(self._handle,
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001207 timeout_millis)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001208 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001209 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001210 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001211 return self.returncode
1212
1213
1214 def _readerthread(self, fh, buffer):
1215 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001216 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001217
1218
Reid Kleckner2b228f02011-03-16 16:57:54 -04001219 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001220 # Start reader threads feeding into a list hanging off of this
1221 # object, unless they've already been started.
1222 if self.stdout and not hasattr(self, "_stdout_buff"):
1223 self._stdout_buff = []
1224 self.stdout_thread = \
1225 threading.Thread(target=self._readerthread,
1226 args=(self.stdout, self._stdout_buff))
1227 self.stdout_thread.daemon = True
1228 self.stdout_thread.start()
1229 if self.stderr and not hasattr(self, "_stderr_buff"):
1230 self._stderr_buff = []
1231 self.stderr_thread = \
1232 threading.Thread(target=self._readerthread,
1233 args=(self.stderr, self._stderr_buff))
1234 self.stderr_thread.daemon = True
1235 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001236
1237 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001238 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001239
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001240 # Wait for the reader threads, or time out. If we time out, the
1241 # threads remain reading and the fds left open in case the user
1242 # calls communicate again.
1243 if self.stdout is not None:
1244 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001245 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001246 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001247 if self.stderr is not None:
1248 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001249 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001250 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001251
1252 # Collect the output from and close both pipes, now that we know
1253 # both have been read successfully.
1254 stdout = None
1255 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001256 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001257 stdout = self._stdout_buff
1258 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001259 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001260 stderr = self._stderr_buff
1261 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001262
1263 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001264 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001265 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001266 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001267 stderr = stderr[0]
1268
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001269 return (stdout, stderr)
1270
Christian Heimesa342c012008-04-20 21:01:16 +00001271 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001272 """Send a signal to the process."""
1273 # Don't signal a process that we know has already died.
1274 if self.returncode is not None:
1275 return
Christian Heimesa342c012008-04-20 21:01:16 +00001276 if sig == signal.SIGTERM:
1277 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001278 elif sig == signal.CTRL_C_EVENT:
1279 os.kill(self.pid, signal.CTRL_C_EVENT)
1280 elif sig == signal.CTRL_BREAK_EVENT:
1281 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001282 else:
Brian Curtin19651362010-09-07 13:24:38 +00001283 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001284
1285 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001286 """Terminates the process."""
1287 # Don't terminate a process that we know has already died.
1288 if self.returncode is not None:
1289 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001290 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001291 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001292 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001293 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1294 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001295 rc = _winapi.GetExitCodeProcess(self._handle)
1296 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001297 raise
1298 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001299
1300 kill = terminate
1301
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001302 else:
1303 #
1304 # POSIX methods
1305 #
1306 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001307 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001308 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1309 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001310 p2cread, p2cwrite = -1, -1
1311 c2pread, c2pwrite = -1, -1
1312 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001313
Peter Astrandd38ddf42005-02-10 08:32:50 +00001314 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001315 pass
1316 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001317 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001318 elif stdin == DEVNULL:
1319 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001320 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001321 p2cread = stdin
1322 else:
1323 # Assuming file-like object
1324 p2cread = stdin.fileno()
1325
Peter Astrandd38ddf42005-02-10 08:32:50 +00001326 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001327 pass
1328 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001329 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001330 elif stdout == DEVNULL:
1331 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001332 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001333 c2pwrite = stdout
1334 else:
1335 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001336 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001337
Peter Astrandd38ddf42005-02-10 08:32:50 +00001338 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001339 pass
1340 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001341 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001342 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001343 if c2pwrite != -1:
1344 errwrite = c2pwrite
1345 else: # child's stdout is not set, use parent's stdout
1346 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001347 elif stderr == DEVNULL:
1348 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001349 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001350 errwrite = stderr
1351 else:
1352 # Assuming file-like object
1353 errwrite = stderr.fileno()
1354
1355 return (p2cread, p2cwrite,
1356 c2pread, c2pwrite,
1357 errread, errwrite)
1358
1359
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001360 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001361 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001362 startupinfo, creationflags, shell,
1363 p2cread, p2cwrite,
1364 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001365 errread, errwrite,
1366 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001367 """Execute program (POSIX version)"""
1368
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001369 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001370 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001371 else:
Miss Islington (bot)b7dcae32018-02-27 15:30:30 -08001372 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001373
1374 if shell:
Xavier de Gayeb35fc622016-12-13 16:32:21 +01001375 # On Android the default shell is at '/system/bin/sh'.
1376 unix_shell = ('/system/bin/sh' if
1377 hasattr(sys, 'getandroidapilevel') else '/bin/sh')
1378 args = [unix_shell, "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001379 if executable:
1380 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001381
Peter Astrandd38ddf42005-02-10 08:32:50 +00001382 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001383 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001384 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001385
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001386 # For transferring possible exec failure from child to parent.
1387 # Data format: "exception name:hex errno:description"
1388 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001389 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001390 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1391 low_fds_to_close = []
1392 while errpipe_write < 3:
1393 low_fds_to_close.append(errpipe_write)
1394 errpipe_write = os.dup(errpipe_write)
1395 for low_fd in low_fds_to_close:
1396 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001397 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001398 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001399 # We must avoid complex work that could involve
1400 # malloc or free in the child process to avoid
1401 # potential deadlocks, thus we do all this here.
1402 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001403
Victor Stinner372b8382011-06-21 17:24:21 +02001404 if env is not None:
Serhiy Storchakad174d242017-06-23 19:39:27 +03001405 env_list = []
1406 for k, v in env.items():
1407 k = os.fsencode(k)
1408 if b'=' in k:
1409 raise ValueError("illegal environment variable name")
1410 env_list.append(k + b'=' + os.fsencode(v))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001411 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001412 env_list = None # Use execv instead of execve.
1413 executable = os.fsencode(executable)
1414 if os.path.dirname(executable):
1415 executable_list = (executable,)
1416 else:
1417 # This matches the behavior of os._execvpe().
1418 executable_list = tuple(
1419 os.path.join(os.fsencode(dir), executable)
1420 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001421 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001422 fds_to_keep.add(errpipe_write)
1423 self.pid = _posixsubprocess.fork_exec(
1424 args, executable_list,
Serhiy Storchaka66bffd12017-04-19 21:12:46 +03001425 close_fds, tuple(sorted(map(int, fds_to_keep))),
1426 cwd, env_list,
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001427 p2cread, p2cwrite, c2pread, c2pwrite,
1428 errread, errwrite,
1429 errpipe_read, errpipe_write,
1430 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001431 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001432 finally:
1433 # be sure the FD is closed no matter what
1434 os.close(errpipe_write)
1435
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001436 # self._devnull is not always defined.
1437 devnull_fd = getattr(self, '_devnull', None)
1438 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001439 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001440 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001441 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001442 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001443 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001444 if devnull_fd is not None:
1445 os.close(devnull_fd)
1446 # Prevent a double close of these fds from __init__ on error.
1447 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001448
1449 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001450 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001451 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001452 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001453 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001454 errpipe_data += part
1455 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001456 break
Facundo Batista10706e22009-06-19 20:34:30 +00001457 finally:
1458 # be sure the FD is closed no matter what
1459 os.close(errpipe_read)
1460
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001461 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001462 try:
Victor Stinnera58e2c52016-05-20 12:08:12 +02001463 pid, sts = os.waitpid(self.pid, 0)
1464 if pid == self.pid:
1465 self._handle_exitstatus(sts)
1466 else:
1467 self.returncode = sys.maxsize
Victor Stinnera5e881d2015-01-14 17:07:59 +01001468 except ChildProcessError:
1469 pass
Victor Stinnera58e2c52016-05-20 12:08:12 +02001470
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001471 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001472 exception_name, hex_errno, err_msg = (
1473 errpipe_data.split(b':', 2))
Ammar Askar3fc499b2017-09-06 02:41:30 -04001474 # The encoding here should match the encoding
1475 # written in by the subprocess implementations
1476 # like _posixsubprocess
1477 err_msg = err_msg.decode()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001478 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001479 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001480 hex_errno = b'0'
Ammar Askar3fc499b2017-09-06 02:41:30 -04001481 err_msg = 'Bad exception data from child: {!r}'.format(
1482 bytes(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001483 child_exception_type = getattr(
1484 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001485 SubprocessError)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001486 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001487 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001488 child_exec_never_called = (err_msg == "noexec")
1489 if child_exec_never_called:
1490 err_msg = ""
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001491 # The error must be from chdir(cwd).
1492 err_filename = cwd
1493 else:
1494 err_filename = orig_executable
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001495 if errno_num != 0:
1496 err_msg = os.strerror(errno_num)
1497 if errno_num == errno.ENOENT:
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001498 err_msg += ': ' + repr(err_filename)
1499 raise child_exception_type(errno_num, err_msg, err_filename)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001500 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001501
1502
Brett Cannon84df1e62010-05-14 00:33:40 +00001503 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1504 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001505 _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
1506 _WSTOPSIG=os.WSTOPSIG):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001507 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001508 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001509 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001510 if _WIFSIGNALED(sts):
1511 self.returncode = -_WTERMSIG(sts)
1512 elif _WIFEXITED(sts):
1513 self.returncode = _WEXITSTATUS(sts)
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001514 elif _WIFSTOPPED(sts):
1515 self.returncode = -_WSTOPSIG(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001516 else:
1517 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001518 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001519
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001520
Brett Cannon84df1e62010-05-14 00:33:40 +00001521 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001522 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001523 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001524 attribute.
1525
1526 This method is called by __del__, so it cannot reference anything
1527 outside of the local scope (nor can any methods it calls).
1528
1529 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001530 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001531 if not self._waitpid_lock.acquire(False):
1532 # Something else is busy calling waitpid. Don't allow two
1533 # at once. We know nothing yet.
1534 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001535 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001536 if self.returncode is not None:
1537 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001538 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001539 if pid == self.pid:
1540 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001541 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001542 if _deadstate is not None:
1543 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001544 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001545 # This happens if SIGCLD is set to be ignored or
1546 # waiting for child processes has otherwise been
1547 # disabled for our process. This child is dead, we
1548 # can't get the status.
1549 # http://bugs.python.org/issue15756
1550 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001551 finally:
1552 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001553 return self.returncode
1554
1555
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001556 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001557 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001558 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001559 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001560 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001561 # This happens if SIGCLD is set to be ignored or waiting
1562 # for child processes has otherwise been disabled for our
1563 # process. This child is dead, we can't get the status.
1564 pid = self.pid
1565 sts = 0
1566 return (pid, sts)
1567
1568
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001569 def _wait(self, timeout):
1570 """Internal implementation of wait() on POSIX."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001571 if self.returncode is not None:
1572 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001573
Gregory P. Smith82604e02016-11-20 16:31:07 -08001574 if timeout is not None:
1575 endtime = _time() + timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001576 # Enter a busy loop if we have a timeout. This busy loop was
1577 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1578 delay = 0.0005 # 500 us -> initial delay of 1 ms
1579 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001580 if self._waitpid_lock.acquire(False):
1581 try:
1582 if self.returncode is not None:
1583 break # Another thread waited.
1584 (pid, sts) = self._try_wait(os.WNOHANG)
1585 assert pid == self.pid or pid == 0
1586 if pid == self.pid:
1587 self._handle_exitstatus(sts)
1588 break
1589 finally:
1590 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001591 remaining = self._remaining_time(endtime)
1592 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001593 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001594 delay = min(delay * 2, remaining, .05)
1595 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001596 else:
1597 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001598 with self._waitpid_lock:
1599 if self.returncode is not None:
1600 break # Another thread waited.
1601 (pid, sts) = self._try_wait(0)
1602 # Check the pid and loop as waitpid has been known to
1603 # return 0 even without WNOHANG in odd situations.
1604 # http://bugs.python.org/issue14396.
1605 if pid == self.pid:
1606 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001607 return self.returncode
1608
1609
Reid Kleckner2b228f02011-03-16 16:57:54 -04001610 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001611 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001612 # Flush stdio buffer. This might block, if the user has
1613 # been writing to .stdin in an uncontrolled fashion.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001614 try:
1615 self.stdin.flush()
1616 except BrokenPipeError:
1617 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001618 if not input:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001619 try:
1620 self.stdin.close()
1621 except BrokenPipeError:
1622 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001623
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001624 stdout = None
1625 stderr = None
1626
1627 # Only create this mapping if we haven't already.
1628 if not self._communication_started:
1629 self._fileobj2output = {}
1630 if self.stdout:
1631 self._fileobj2output[self.stdout] = []
1632 if self.stderr:
1633 self._fileobj2output[self.stderr] = []
1634
1635 if self.stdout:
1636 stdout = self._fileobj2output[self.stdout]
1637 if self.stderr:
1638 stderr = self._fileobj2output[self.stderr]
1639
1640 self._save_input(input)
1641
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001642 if self._input:
1643 input_view = memoryview(self._input)
1644
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001645 with _PopenSelector() as selector:
1646 if self.stdin and input:
1647 selector.register(self.stdin, selectors.EVENT_WRITE)
1648 if self.stdout:
1649 selector.register(self.stdout, selectors.EVENT_READ)
1650 if self.stderr:
1651 selector.register(self.stderr, selectors.EVENT_READ)
1652
1653 while selector.get_map():
1654 timeout = self._remaining_time(endtime)
1655 if timeout is not None and timeout < 0:
1656 raise TimeoutExpired(self.args, orig_timeout)
1657
1658 ready = selector.select(timeout)
1659 self._check_timeout(endtime, orig_timeout)
1660
1661 # XXX Rewrite these to use non-blocking I/O on the file
1662 # objects; they are no longer using C stdio!
1663
1664 for key, events in ready:
1665 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001666 chunk = input_view[self._input_offset :
1667 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001668 try:
1669 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001670 except BrokenPipeError:
1671 selector.unregister(key.fileobj)
1672 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001673 else:
1674 if self._input_offset >= len(self._input):
1675 selector.unregister(key.fileobj)
1676 key.fileobj.close()
1677 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001678 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001679 if not data:
1680 selector.unregister(key.fileobj)
1681 key.fileobj.close()
1682 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001683
1684 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001685
1686 # All data exchanged. Translate lists into strings.
1687 if stdout is not None:
1688 stdout = b''.join(stdout)
1689 if stderr is not None:
1690 stderr = b''.join(stderr)
1691
1692 # Translate newlines, if requested.
1693 # This also turns bytes into strings.
andyclegg7fed7bd2017-10-23 03:01:19 +01001694 if self.text_mode:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001695 if stdout is not None:
1696 stdout = self._translate_newlines(stdout,
Steve Dower050acae2016-09-06 20:16:17 -07001697 self.stdout.encoding,
1698 self.stdout.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001699 if stderr is not None:
1700 stderr = self._translate_newlines(stderr,
Steve Dower050acae2016-09-06 20:16:17 -07001701 self.stderr.encoding,
1702 self.stderr.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001703
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001704 return (stdout, stderr)
1705
1706
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001707 def _save_input(self, input):
1708 # This method is called from the _communicate_with_*() methods
1709 # so that if we time out while communicating, we can continue
1710 # sending input if we retry.
1711 if self.stdin and self._input is None:
1712 self._input_offset = 0
1713 self._input = input
andyclegg7fed7bd2017-10-23 03:01:19 +01001714 if input is not None and self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -07001715 self._input = self._input.encode(self.stdin.encoding,
1716 self.stdin.errors)
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001717
1718
Christian Heimesa342c012008-04-20 21:01:16 +00001719 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001720 """Send a signal to the process."""
1721 # Skip signalling a process that we know has already died.
1722 if self.returncode is None:
1723 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00001724
1725 def terminate(self):
1726 """Terminate the process with SIGTERM
1727 """
1728 self.send_signal(signal.SIGTERM)
1729
1730 def kill(self):
1731 """Kill the process with SIGKILL
1732 """
1733 self.send_signal(signal.SIGKILL)