blob: e070011d980e98fed7f13d2b4a45454c4601d564 [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": []}
Victor Stinner483422f2018-07-05 22:54:17 +0200138
139 def copy(self):
140 attr_list = self.lpAttributeList.copy()
141 if 'handle_list' in attr_list:
142 attr_list['handle_list'] = list(attr_list['handle_list'])
143
144 return STARTUPINFO(dwFlags=self.dwFlags,
145 hStdInput=self.hStdInput,
146 hStdOutput=self.hStdOutput,
147 hStdError=self.hStdError,
148 wShowWindow=self.wShowWindow,
149 lpAttributeList=attr_list)
150
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000151else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -0700152 import _posixsubprocess
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100153 import select
154 import selectors
Antoine Pitroua6a4dc82017-09-07 18:56:24 +0200155 import threading
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000156
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000157 # When select or poll has indicated that the file is writable,
158 # we can write up to _PIPE_BUF bytes without risk of blocking.
159 # POSIX defines PIPE_BUF as >= 512.
160 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
161
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100162 # poll/select have the advantage of not requiring any extra file
163 # descriptor, contrarily to epoll/kqueue (also, they require a single
164 # syscall).
165 if hasattr(selectors, 'PollSelector'):
166 _PopenSelector = selectors.PollSelector
167 else:
168 _PopenSelector = selectors.SelectSelector
169
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000170
Brett Cannona23810f2008-05-26 19:04:21 +0000171__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
Gregory P. Smith6e730002015-04-14 16:14:25 -0700172 "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL",
173 "SubprocessError", "TimeoutExpired", "CompletedProcess"]
Gregory P. Smithace55862015-04-07 15:57:54 -0700174 # NOTE: We intentionally exclude list2cmdline as it is
175 # considered an internal implementation detail. issue10838.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000176
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700177if _mswindows:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200178 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
179 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
180 STD_ERROR_HANDLE, SW_HIDE,
Jamesb5d9e082017-11-08 14:18:59 +0000181 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW,
182 ABOVE_NORMAL_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS,
183 HIGH_PRIORITY_CLASS, IDLE_PRIORITY_CLASS,
184 NORMAL_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS,
185 CREATE_NO_WINDOW, DETACHED_PROCESS,
186 CREATE_DEFAULT_ERROR_MODE, CREATE_BREAKAWAY_FROM_JOB)
Brian Curtin5d9deaa2011-04-29 16:24:07 -0500187
Brian Curtin08fd8d92011-04-29 16:11:30 -0500188 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
Brian Curtin8b8e7f42011-04-29 15:48:13 -0500189 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
190 "STD_ERROR_HANDLE", "SW_HIDE",
Martin Panter528619b2016-04-16 23:42:37 +0000191 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW",
Jamesb5d9e082017-11-08 14:18:59 +0000192 "STARTUPINFO",
193 "ABOVE_NORMAL_PRIORITY_CLASS", "BELOW_NORMAL_PRIORITY_CLASS",
194 "HIGH_PRIORITY_CLASS", "IDLE_PRIORITY_CLASS",
195 "NORMAL_PRIORITY_CLASS", "REALTIME_PRIORITY_CLASS",
196 "CREATE_NO_WINDOW", "DETACHED_PROCESS",
197 "CREATE_DEFAULT_ERROR_MODE", "CREATE_BREAKAWAY_FROM_JOB"])
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200198
199 class Handle(int):
200 closed = False
201
202 def Close(self, CloseHandle=_winapi.CloseHandle):
203 if not self.closed:
204 self.closed = True
205 CloseHandle(self)
206
207 def Detach(self):
208 if not self.closed:
209 self.closed = True
210 return int(self)
211 raise ValueError("already closed")
212
213 def __repr__(self):
Serhiy Storchaka465e60e2014-07-25 23:36:00 +0300214 return "%s(%d)" % (self.__class__.__name__, int(self))
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200215
216 __del__ = Close
217 __str__ = __repr__
218
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000219
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200220# This lists holds Popen instances for which the underlying process had not
221# exited at the time its __del__ method got called: those processes are wait()ed
222# for synchronously from _cleanup() when a new Popen object is created, to avoid
223# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000224_active = []
225
226def _cleanup():
227 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000228 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200229 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000230 try:
231 _active.remove(inst)
232 except ValueError:
233 # This can happen if two threads create a new Popen instance.
234 # It's harmless that it was already removed, so ignore.
235 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000236
237PIPE = -1
238STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200239DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000240
241
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200242# XXX This function is only used by multiprocessing and the test suite,
243# but it's here so that it can be imported when Python is compiled without
244# threads.
245
Victor Stinner9def2842016-01-18 12:15:08 +0100246def _optim_args_from_interpreter_flags():
247 """Return a list of command-line arguments reproducing the current
248 optimization settings in sys.flags."""
249 args = []
250 value = sys.flags.optimize
251 if value > 0:
252 args.append('-' + 'O' * value)
253 return args
254
255
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200256def _args_from_interpreter_flags():
257 """Return a list of command-line arguments reproducing the current
Victor Stinner747f48e2017-12-12 22:59:48 +0100258 settings in sys.flags, sys.warnoptions and sys._xoptions."""
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200259 flag_opt_map = {
260 'debug': 'd',
261 # 'inspect': 'i',
262 # 'interactive': 'i',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200263 'dont_write_bytecode': 'B',
264 'no_user_site': 's',
265 'no_site': 'S',
266 'ignore_environment': 'E',
267 'verbose': 'v',
268 'bytes_warning': 'b',
269 'quiet': 'q',
Victor Stinner9def2842016-01-18 12:15:08 +0100270 # -O is handled in _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200271 }
Victor Stinner9def2842016-01-18 12:15:08 +0100272 args = _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200273 for flag, opt in flag_opt_map.items():
274 v = getattr(sys.flags, flag)
275 if v > 0:
276 args.append('-' + opt * v)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800277
278 # -W options
Victor Stinner747f48e2017-12-12 22:59:48 +0100279 warnopts = sys.warnoptions[:]
280 bytes_warning = sys.flags.bytes_warning
281 xoptions = getattr(sys, '_xoptions', {})
282 dev_mode = ('dev' in xoptions)
283
284 if bytes_warning > 1:
285 warnopts.remove("error::BytesWarning")
286 elif bytes_warning:
287 warnopts.remove("default::BytesWarning")
288 if dev_mode:
289 warnopts.remove('default')
290 for opt in warnopts:
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200291 args.append('-W' + opt)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800292
293 # -X options
Victor Stinner747f48e2017-12-12 22:59:48 +0100294 if dev_mode:
Victor Stinnerf39b6742017-11-20 15:24:56 -0800295 args.extend(('-X', 'dev'))
296 for opt in ('faulthandler', 'tracemalloc', 'importtime',
Victor Stinner91106cd2017-12-13 12:29:09 +0100297 'showalloccount', 'showrefcount', 'utf8'):
Victor Stinnerf39b6742017-11-20 15:24:56 -0800298 if opt in xoptions:
299 value = xoptions[opt]
300 if value is True:
301 arg = opt
302 else:
303 arg = '%s=%s' % (opt, value)
304 args.extend(('-X', arg))
305
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200306 return args
307
308
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400309def call(*popenargs, timeout=None, **kwargs):
310 """Run command with arguments. Wait for command to complete or
311 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000312
313 The arguments are the same as for the Popen constructor. Example:
314
315 retcode = call(["ls", "-l"])
316 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200317 with Popen(*popenargs, **kwargs) as p:
318 try:
319 return p.wait(timeout=timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800320 except: # Including KeyboardInterrupt, wait handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200321 p.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800322 # We don't call p.wait() again as p.__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200323 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000324
325
Peter Astrand454f7672005-01-01 09:36:35 +0000326def check_call(*popenargs, **kwargs):
327 """Run command with arguments. Wait for command to complete. If
328 the exit code was zero then return, otherwise raise
329 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000330 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000331
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400332 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000333
334 check_call(["ls", "-l"])
335 """
336 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000337 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000338 cmd = kwargs.get("args")
339 if cmd is None:
340 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000341 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000342 return 0
343
344
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400345def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700346 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000347
348 If the exit code was non-zero it raises a CalledProcessError. The
349 CalledProcessError object will have the return code in the returncode
350 attribute and output in the output attribute.
351
352 The arguments are the same as for the Popen constructor. Example:
353
354 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000355 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000356
357 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000358 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000359
360 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000361 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000362 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000363 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700364
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300365 There is an additional optional argument, "input", allowing you to
366 pass a string to the subprocess's stdin. If you use this argument
367 you may not also use the Popen constructor's "stdin" argument, as
368 it too will be used internally. Example:
369
370 >>> check_output(["sed", "-e", "s/foo/bar/"],
371 ... input=b"when in the course of fooman events\n")
372 b'when in the course of barman events\n'
373
andyclegg7fed7bd2017-10-23 03:01:19 +0100374 By default, all communication is in bytes, and therefore any "input"
375 should be bytes, and the return value wil be bytes. If in text mode,
376 any "input" should be a string, and the return value will be a string
377 decoded according to locale encoding, or by "encoding" if set. Text mode
378 is triggered by setting any of text, encoding, errors or universal_newlines.
Georg Brandlf9734072008-12-07 15:30:06 +0000379 """
380 if 'stdout' in kwargs:
381 raise ValueError('stdout argument not allowed, it will be overridden.')
Gregory P. Smith6e730002015-04-14 16:14:25 -0700382
383 if 'input' in kwargs and kwargs['input'] is None:
384 # Explicitly passing input=None was previously equivalent to passing an
385 # empty string. That is maintained here for backwards compatibility.
386 kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
387
388 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
389 **kwargs).stdout
390
391
392class CompletedProcess(object):
393 """A process that has finished running.
394
395 This is returned by run().
396
397 Attributes:
398 args: The list or str args passed to run().
399 returncode: The exit code of the process, negative for signals.
400 stdout: The standard output (None if not captured).
401 stderr: The standard error (None if not captured).
402 """
403 def __init__(self, args, returncode, stdout=None, stderr=None):
404 self.args = args
405 self.returncode = returncode
406 self.stdout = stdout
407 self.stderr = stderr
408
409 def __repr__(self):
410 args = ['args={!r}'.format(self.args),
411 'returncode={!r}'.format(self.returncode)]
412 if self.stdout is not None:
413 args.append('stdout={!r}'.format(self.stdout))
414 if self.stderr is not None:
415 args.append('stderr={!r}'.format(self.stderr))
416 return "{}({})".format(type(self).__name__, ', '.join(args))
417
418 def check_returncode(self):
419 """Raise CalledProcessError if the exit code is non-zero."""
420 if self.returncode:
421 raise CalledProcessError(self.returncode, self.args, self.stdout,
422 self.stderr)
423
424
Bo Baylesce0f33d2018-01-30 00:40:39 -0600425def run(*popenargs,
426 input=None, capture_output=False, timeout=None, check=False, **kwargs):
Gregory P. Smith6e730002015-04-14 16:14:25 -0700427 """Run command with arguments and return a CompletedProcess instance.
428
429 The returned instance will have attributes args, returncode, stdout and
430 stderr. By default, stdout and stderr are not captured, and those attributes
431 will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.
432
433 If check is True and the exit code was non-zero, it raises a
434 CalledProcessError. The CalledProcessError object will have the return code
435 in the returncode attribute, and output & stderr attributes if those streams
436 were captured.
437
438 If timeout is given, and the process takes too long, a TimeoutExpired
439 exception will be raised.
440
441 There is an optional argument "input", allowing you to
andyclegg7fed7bd2017-10-23 03:01:19 +0100442 pass bytes or a string to the subprocess's stdin. If you use this argument
Gregory P. Smith6e730002015-04-14 16:14:25 -0700443 you may not also use the Popen constructor's "stdin" argument, as
444 it will be used internally.
445
andyclegg7fed7bd2017-10-23 03:01:19 +0100446 By default, all communication is in bytes, and therefore any "input" should
447 be bytes, and the stdout and stderr will be bytes. If in text mode, any
448 "input" should be a string, and stdout and stderr will be strings decoded
449 according to locale encoding, or by "encoding" if set. Text mode is
450 triggered by setting any of text, encoding, errors or universal_newlines.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700451
andyclegg7fed7bd2017-10-23 03:01:19 +0100452 The other arguments are the same as for the Popen constructor.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700453 """
454 if input is not None:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300455 if 'stdin' in kwargs:
456 raise ValueError('stdin and input arguments may not both be used.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300457 kwargs['stdin'] = PIPE
Gregory P. Smith6e730002015-04-14 16:14:25 -0700458
Bo Baylesce0f33d2018-01-30 00:40:39 -0600459 if capture_output:
460 if ('stdout' in kwargs) or ('stderr' in kwargs):
461 raise ValueError('stdout and stderr arguments may not be used '
462 'with capture_output.')
463 kwargs['stdout'] = PIPE
464 kwargs['stderr'] = PIPE
465
Gregory P. Smith6e730002015-04-14 16:14:25 -0700466 with Popen(*popenargs, **kwargs) as process:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200467 try:
Gregory P. Smith6e730002015-04-14 16:14:25 -0700468 stdout, stderr = process.communicate(input, timeout=timeout)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200469 except TimeoutExpired:
470 process.kill()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700471 stdout, stderr = process.communicate()
472 raise TimeoutExpired(process.args, timeout, output=stdout,
473 stderr=stderr)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800474 except: # Including KeyboardInterrupt, communicate handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200475 process.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800476 # We don't call process.wait() as .__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200477 raise
478 retcode = process.poll()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700479 if check and retcode:
480 raise CalledProcessError(retcode, process.args,
481 output=stdout, stderr=stderr)
482 return CompletedProcess(process.args, retcode, stdout, stderr)
Peter Astrand454f7672005-01-01 09:36:35 +0000483
484
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000485def list2cmdline(seq):
486 """
487 Translate a sequence of arguments into a command line
488 string, using the same rules as the MS C runtime:
489
490 1) Arguments are delimited by white space, which is either a
491 space or a tab.
492
493 2) A string surrounded by double quotation marks is
494 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000495 contained within. A quoted string can be embedded in an
496 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000497
498 3) A double quotation mark preceded by a backslash is
499 interpreted as a literal double quotation mark.
500
501 4) Backslashes are interpreted literally, unless they
502 immediately precede a double quotation mark.
503
504 5) If backslashes immediately precede a double quotation mark,
505 every pair of backslashes is interpreted as a literal
506 backslash. If the number of backslashes is odd, the last
507 backslash escapes the next double quotation mark as
508 described in rule 3.
509 """
510
511 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000512 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
513 # or search http://msdn.microsoft.com for
514 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000515 result = []
516 needquote = False
517 for arg in seq:
518 bs_buf = []
519
520 # Add a space to separate this argument from the others
521 if result:
522 result.append(' ')
523
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000524 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000525 if needquote:
526 result.append('"')
527
528 for c in arg:
529 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000530 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000531 bs_buf.append(c)
532 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000533 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000534 result.append('\\' * len(bs_buf)*2)
535 bs_buf = []
536 result.append('\\"')
537 else:
538 # Normal char
539 if bs_buf:
540 result.extend(bs_buf)
541 bs_buf = []
542 result.append(c)
543
Christian Heimesfdab48e2008-01-20 09:06:41 +0000544 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000545 if bs_buf:
546 result.extend(bs_buf)
547
548 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000549 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000550 result.append('"')
551
552 return ''.join(result)
553
554
Brett Cannona23810f2008-05-26 19:04:21 +0000555# Various tools for executing commands and looking at their output and status.
556#
Brett Cannona23810f2008-05-26 19:04:21 +0000557
558def getstatusoutput(cmd):
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700559 """Return (exitcode, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000560
Tim Golden60798142013-11-05 12:57:25 +0000561 Execute the string 'cmd' in a shell with 'check_output' and
Steve Dower050acae2016-09-06 20:16:17 -0700562 return a 2-tuple (status, output). The locale encoding is used
563 to decode the output and process newlines.
Tim Golden60798142013-11-05 12:57:25 +0000564
565 A trailing newline is stripped from the output.
566 The exit status for the command can be interpreted
567 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000568
569 >>> import subprocess
570 >>> subprocess.getstatusoutput('ls /bin/ls')
571 (0, '/bin/ls')
572 >>> subprocess.getstatusoutput('cat /bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700573 (1, 'cat: /bin/junk: No such file or directory')
Brett Cannona23810f2008-05-26 19:04:21 +0000574 >>> subprocess.getstatusoutput('/bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700575 (127, 'sh: /bin/junk: not found')
576 >>> subprocess.getstatusoutput('/bin/kill $$')
577 (-15, '')
Brett Cannona23810f2008-05-26 19:04:21 +0000578 """
Tim Goldene0041752013-11-03 12:53:17 +0000579 try:
andyclegg7fed7bd2017-10-23 03:01:19 +0100580 data = check_output(cmd, shell=True, text=True, stderr=STDOUT)
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700581 exitcode = 0
Tim Goldene0041752013-11-03 12:53:17 +0000582 except CalledProcessError as ex:
583 data = ex.output
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700584 exitcode = ex.returncode
Tim Goldene0041752013-11-03 12:53:17 +0000585 if data[-1:] == '\n':
586 data = data[:-1]
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700587 return exitcode, data
Brett Cannona23810f2008-05-26 19:04:21 +0000588
589def getoutput(cmd):
590 """Return output (stdout or stderr) of executing cmd in a shell.
591
592 Like getstatusoutput(), except the exit status is ignored and the return
593 value is a string containing the command's output. Example:
594
595 >>> import subprocess
596 >>> subprocess.getoutput('ls /bin/ls')
597 '/bin/ls'
598 """
599 return getstatusoutput(cmd)[1]
600
601
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000602class Popen(object):
Martin Panter4afdca02016-10-25 22:20:48 +0000603 """ Execute a child program in a new process.
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200604
Martin Panter4afdca02016-10-25 22:20:48 +0000605 For a complete description of the arguments see the Python documentation.
606
607 Arguments:
608 args: A string, or a sequence of program arguments.
609
610 bufsize: supplied as the buffering argument to the open() function when
611 creating the stdin/stdout/stderr pipe file objects
612
613 executable: A replacement program to execute.
614
615 stdin, stdout and stderr: These specify the executed programs' standard
616 input, standard output and standard error file handles, respectively.
617
618 preexec_fn: (POSIX only) An object to be called in the child process
619 just before the child is executed.
620
621 close_fds: Controls closing or inheriting of file descriptors.
622
623 shell: If true, the command will be executed through the shell.
624
625 cwd: Sets the current directory before the child is executed.
626
627 env: Defines the environment variables for the new process.
628
andyclegg7fed7bd2017-10-23 03:01:19 +0100629 text: If true, decode stdin, stdout and stderr using the given encoding
630 (if set) or the system default otherwise.
631
632 universal_newlines: Alias of text, provided for backwards compatibility.
Martin Panter4afdca02016-10-25 22:20:48 +0000633
634 startupinfo and creationflags (Windows only)
635
636 restore_signals (POSIX only)
637
638 start_new_session (POSIX only)
639
640 pass_fds (POSIX only)
641
Martin Panter3dca6242016-10-25 23:41:42 +0000642 encoding and errors: Text mode encoding and error handling to use for
643 file objects stdin, stdout and stderr.
644
Martin Panter4afdca02016-10-25 22:20:48 +0000645 Attributes:
646 stdin, stdout, stderr, pid, returncode
647 """
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200648 _child_created = False # Set here since __del__ checks it
649
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700650 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000651 stdin=None, stdout=None, stderr=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200652 preexec_fn=None, close_fds=True,
andyclegg7fed7bd2017-10-23 03:01:19 +0100653 shell=False, cwd=None, env=None, universal_newlines=None,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000654 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000655 restore_signals=True, start_new_session=False,
andyclegg7fed7bd2017-10-23 03:01:19 +0100656 pass_fds=(), *, encoding=None, errors=None, text=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000657 """Create new Popen instance."""
658 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700659 # Held while anything is calling waitpid before returncode has been
660 # updated to prevent clobbering returncode if wait() or poll() are
661 # called from multiple threads at once. After acquiring the lock,
662 # code must re-check self.returncode to see if another thread just
663 # finished a waitpid() call.
664 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000665
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400666 self._input = None
667 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000668 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700669 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000670 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000671 raise TypeError("bufsize must be an integer")
672
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700673 if _mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000674 if preexec_fn is not None:
675 raise ValueError("preexec_fn is not supported on Windows "
676 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000677 else:
678 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000679 if pass_fds and not close_fds:
680 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
681 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000682 if startupinfo is not None:
683 raise ValueError("startupinfo is only supported on Windows "
684 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000685 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000686 raise ValueError("creationflags is only supported on Windows "
687 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000688
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400689 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000690 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000691 self.stdout = None
692 self.stderr = None
693 self.pid = None
694 self.returncode = None
Steve Dower050acae2016-09-06 20:16:17 -0700695 self.encoding = encoding
696 self.errors = errors
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000697
andyclegg7fed7bd2017-10-23 03:01:19 +0100698 # Validate the combinations of text and universal_newlines
699 if (text is not None and universal_newlines is not None
700 and bool(universal_newlines) != bool(text)):
701 raise SubprocessError('Cannot disambiguate when both text '
702 'and universal_newlines are supplied but '
703 'different. Pass one or the other.')
704
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000705 # Input and output objects. The general principle is like
706 # this:
707 #
708 # Parent Child
709 # ------ -----
710 # p2cwrite ---stdin---> p2cread
711 # c2pread <--stdout--- c2pwrite
712 # errread <--stderr--- errwrite
713 #
714 # On POSIX, the child objects are file descriptors. On
715 # Windows, these are Windows file handles. The parent objects
716 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000717 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000718 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000719
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000720 (p2cread, p2cwrite,
721 c2pread, c2pwrite,
722 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
723
Antoine Pitrouc9982322011-01-04 19:07:07 +0000724 # We wrap OS handles *before* launching the child, otherwise a
725 # quickly terminating child could make our fds unwrappable
726 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000727
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700728 if _mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000729 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000730 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000731 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000732 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000733 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000734 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000735
andyclegg7fed7bd2017-10-23 03:01:19 +0100736 self.text_mode = encoding or errors or text or universal_newlines
Tim Peterse718f612004-10-12 21:51:32 +0000737
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800738 # How long to resume waiting on a child after the first ^C.
739 # There is no right value for this. The purpose is to be polite
740 # yet remain good for interactive users trying to exit a tool.
741 self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber()
742
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700743 self._closed_child_pipe_fds = False
Steve Dower050acae2016-09-06 20:16:17 -0700744
Antoine Pitrouc9982322011-01-04 19:07:07 +0000745 try:
Steve Dower050acae2016-09-06 20:16:17 -0700746 if p2cwrite != -1:
747 self.stdin = io.open(p2cwrite, 'wb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100748 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700749 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
750 line_buffering=(bufsize == 1),
751 encoding=encoding, errors=errors)
752 if c2pread != -1:
753 self.stdout = io.open(c2pread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100754 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700755 self.stdout = io.TextIOWrapper(self.stdout,
756 encoding=encoding, errors=errors)
757 if errread != -1:
758 self.stderr = io.open(errread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100759 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700760 self.stderr = io.TextIOWrapper(self.stderr,
761 encoding=encoding, errors=errors)
762
Antoine Pitrouc9982322011-01-04 19:07:07 +0000763 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300764 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000765 startupinfo, creationflags, shell,
766 p2cread, p2cwrite,
767 c2pread, c2pwrite,
768 errread, errwrite,
769 restore_signals, start_new_session)
770 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800771 # Cleanup if the child failed starting.
772 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000773 try:
774 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200775 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800776 pass # Ignore EBADF or other errors.
777
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700778 if not self._closed_child_pipe_fds:
779 to_close = []
780 if stdin == PIPE:
781 to_close.append(p2cread)
782 if stdout == PIPE:
783 to_close.append(c2pwrite)
784 if stderr == PIPE:
785 to_close.append(errwrite)
786 if hasattr(self, '_devnull'):
787 to_close.append(self._devnull)
788 for fd in to_close:
789 try:
Segev Finer4d385172017-08-18 16:18:13 +0300790 if _mswindows and isinstance(fd, Handle):
791 fd.Close()
792 else:
793 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700794 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700795 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800796
Antoine Pitrouc9982322011-01-04 19:07:07 +0000797 raise
798
andyclegg7fed7bd2017-10-23 03:01:19 +0100799 @property
800 def universal_newlines(self):
801 # universal_newlines as retained as an alias of text_mode for API
luzpaza5293b42017-11-05 07:37:50 -0600802 # compatibility. bpo-31756
andyclegg7fed7bd2017-10-23 03:01:19 +0100803 return self.text_mode
804
805 @universal_newlines.setter
806 def universal_newlines(self, universal_newlines):
807 self.text_mode = bool(universal_newlines)
808
Steve Dower050acae2016-09-06 20:16:17 -0700809 def _translate_newlines(self, data, encoding, errors):
810 data = data.decode(encoding, errors)
Andrew Svetlov82860712012-08-19 22:13:41 +0300811 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000812
Brian Curtin79cdb662010-12-03 02:46:02 +0000813 def __enter__(self):
814 return self
815
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800816 def __exit__(self, exc_type, value, traceback):
Brian Curtin79cdb662010-12-03 02:46:02 +0000817 if self.stdout:
818 self.stdout.close()
819 if self.stderr:
820 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200821 try: # Flushing a BufferedWriter may raise an error
822 if self.stdin:
823 self.stdin.close()
824 finally:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800825 if exc_type == KeyboardInterrupt:
826 # https://bugs.python.org/issue25942
827 # In the case of a KeyboardInterrupt we assume the SIGINT
828 # was also already sent to our child processes. We can't
829 # block indefinitely as that is not user friendly.
830 # If we have not already waited a brief amount of time in
831 # an interrupted .wait() or .communicate() call, do so here
832 # for consistency.
833 if self._sigint_wait_secs > 0:
834 try:
835 self._wait(timeout=self._sigint_wait_secs)
836 except TimeoutExpired:
837 pass
838 self._sigint_wait_secs = 0 # Note that this has been done.
839 return # resume the KeyboardInterrupt
840
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200841 # Wait for the process to terminate, to avoid zombies.
842 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000843
Victor Stinner9505b032017-01-06 10:44:44 +0100844 def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200845 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000846 # We didn't get to successfully create a child process.
847 return
Victor Stinner5a48e212016-05-20 12:11:15 +0200848 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800849 # Not reading subprocess exit status creates a zombie process which
Victor Stinnerc206f1e2016-06-14 16:42:59 +0200850 # is only destroyed at the parent python process exit
Victor Stinner9505b032017-01-06 10:44:44 +0100851 _warn("subprocess %s is still running" % self.pid,
852 ResourceWarning, source=self)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000853 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000854 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000855 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000856 # Child is still running, keep us alive until we can wait on it.
857 _active.append(self)
858
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200859 def _get_devnull(self):
860 if not hasattr(self, '_devnull'):
861 self._devnull = os.open(os.devnull, os.O_RDWR)
862 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000863
Victor Stinnera5e881d2015-01-14 17:07:59 +0100864 def _stdin_write(self, input):
865 if input:
866 try:
867 self.stdin.write(input)
868 except BrokenPipeError:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000869 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:
872 # bpo-19612, bpo-30418: On Windows, stdin.write() fails
873 # with EINVAL if the child process exited or if the child
874 # process is still running but closed the pipe.
Victor Stinnera5e881d2015-01-14 17:07:59 +0100875 pass
876 else:
877 raise
Victor Stinnerd52aa312017-06-08 17:30:39 +0200878
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000879 try:
880 self.stdin.close()
881 except BrokenPipeError:
882 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200883 except OSError as exc:
884 if exc.errno == errno.EINVAL:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000885 pass
886 else:
887 raise
Victor Stinnera5e881d2015-01-14 17:07:59 +0100888
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400889 def communicate(self, input=None, timeout=None):
Joel Schaerer88031a92017-09-13 21:11:20 +0200890 """Interact with process: Send data to stdin and close it.
891 Read data from stdout and stderr, until end-of-file is
892 reached. Wait for process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +0000893
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400894 The optional "input" argument should be data to be sent to the
andyclegg7fed7bd2017-10-23 03:01:19 +0100895 child process, or None, if no data should be sent to the child.
896 communicate() returns a tuple (stdout, stderr).
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400897
andyclegg7fed7bd2017-10-23 03:01:19 +0100898 By default, all communication is in bytes, and therefore any
899 "input" should be bytes, and the (stdout, stderr) will be bytes.
900 If in text mode (indicated by self.text_mode), any "input" should
901 be a string, and (stdout, stderr) will be strings decoded
902 according to locale encoding, or by "encoding" if set. Text mode
903 is triggered by setting any of text, encoding, errors or
904 universal_newlines.
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400905 """
Peter Astrand23109f02005-03-03 20:28:59 +0000906
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400907 if self._communication_started and input:
908 raise ValueError("Cannot send input after starting communication")
909
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400910 # Optimization: If we are not worried about timeouts, we haven't
911 # started communicating, and we have one or zero pipes, using select()
912 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200913 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400914 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000915 stdout = None
916 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000917 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +0100918 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +0000919 elif self.stdout:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000920 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000921 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000922 elif self.stderr:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000923 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000924 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000925 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200926 else:
927 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +0200928 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +0200929 else:
930 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000931
Victor Stinner7a8d0812011-04-05 13:13:08 +0200932 try:
933 stdout, stderr = self._communicate(input, endtime, timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800934 except KeyboardInterrupt:
935 # https://bugs.python.org/issue25942
936 # See the detailed comment in .wait().
937 if timeout is not None:
938 sigint_timeout = min(self._sigint_wait_secs,
939 self._remaining_time(endtime))
940 else:
941 sigint_timeout = self._sigint_wait_secs
942 self._sigint_wait_secs = 0 # nothing else should wait.
943 try:
944 self._wait(timeout=sigint_timeout)
945 except TimeoutExpired:
946 pass
947 raise # resume the KeyboardInterrupt
948
Victor Stinner7a8d0812011-04-05 13:13:08 +0200949 finally:
950 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400951
Victor Stinner7a8d0812011-04-05 13:13:08 +0200952 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400953
954 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +0000955
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000956
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000957 def poll(self):
Martin Panter4afdca02016-10-25 22:20:48 +0000958 """Check if child process has terminated. Set and return returncode
959 attribute."""
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000960 return self._internal_poll()
961
962
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400963 def _remaining_time(self, endtime):
964 """Convenience for _communicate when computing timeouts."""
965 if endtime is None:
966 return None
967 else:
Victor Stinner949d8c92012-05-30 13:30:32 +0200968 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400969
970
Reid Kleckner2b228f02011-03-16 16:57:54 -0400971 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400972 """Convenience for checking if a timeout has expired."""
973 if endtime is None:
974 return
Victor Stinner949d8c92012-05-30 13:30:32 +0200975 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -0400976 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400977
978
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800979 def wait(self, timeout=None):
980 """Wait for child process to terminate; returns self.returncode."""
981 if timeout is not None:
982 endtime = _time() + timeout
983 try:
984 return self._wait(timeout=timeout)
985 except KeyboardInterrupt:
986 # https://bugs.python.org/issue25942
987 # The first keyboard interrupt waits briefly for the child to
988 # exit under the common assumption that it also received the ^C
989 # generated SIGINT and will exit rapidly.
990 if timeout is not None:
991 sigint_timeout = min(self._sigint_wait_secs,
992 self._remaining_time(endtime))
993 else:
994 sigint_timeout = self._sigint_wait_secs
995 self._sigint_wait_secs = 0 # nothing else should wait.
996 try:
997 self._wait(timeout=sigint_timeout)
998 except TimeoutExpired:
999 pass
1000 raise # resume the KeyboardInterrupt
1001
1002
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -07001003 if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001004 #
1005 # Windows methods
1006 #
1007 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001008 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001009 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1010 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001011 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001012 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +00001013
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001014 p2cread, p2cwrite = -1, -1
1015 c2pread, c2pwrite = -1, -1
1016 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001017
Peter Astrandd38ddf42005-02-10 08:32:50 +00001018 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001019 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001020 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001021 p2cread, _ = _winapi.CreatePipe(None, 0)
1022 p2cread = Handle(p2cread)
1023 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001024 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001025 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
1026 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001027 elif stdin == DEVNULL:
1028 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001029 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001030 p2cread = msvcrt.get_osfhandle(stdin)
1031 else:
1032 # Assuming file-like object
1033 p2cread = msvcrt.get_osfhandle(stdin.fileno())
1034 p2cread = self._make_inheritable(p2cread)
1035
Peter Astrandd38ddf42005-02-10 08:32:50 +00001036 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001037 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001038 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001039 _, c2pwrite = _winapi.CreatePipe(None, 0)
1040 c2pwrite = Handle(c2pwrite)
1041 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001042 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001043 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
1044 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001045 elif stdout == DEVNULL:
1046 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001047 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001048 c2pwrite = msvcrt.get_osfhandle(stdout)
1049 else:
1050 # Assuming file-like object
1051 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1052 c2pwrite = self._make_inheritable(c2pwrite)
1053
Peter Astrandd38ddf42005-02-10 08:32:50 +00001054 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001055 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001056 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001057 _, errwrite = _winapi.CreatePipe(None, 0)
1058 errwrite = Handle(errwrite)
1059 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001060 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001061 errread, errwrite = _winapi.CreatePipe(None, 0)
1062 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001063 elif stderr == STDOUT:
1064 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001065 elif stderr == DEVNULL:
1066 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001067 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001068 errwrite = msvcrt.get_osfhandle(stderr)
1069 else:
1070 # Assuming file-like object
1071 errwrite = msvcrt.get_osfhandle(stderr.fileno())
1072 errwrite = self._make_inheritable(errwrite)
1073
1074 return (p2cread, p2cwrite,
1075 c2pread, c2pwrite,
1076 errread, errwrite)
1077
1078
1079 def _make_inheritable(self, handle):
1080 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001081 h = _winapi.DuplicateHandle(
1082 _winapi.GetCurrentProcess(), handle,
1083 _winapi.GetCurrentProcess(), 0, 1,
1084 _winapi.DUPLICATE_SAME_ACCESS)
1085 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001086
1087
Segev Finerb2a60832017-12-18 11:28:19 +02001088 def _filter_handle_list(self, handle_list):
1089 """Filter out console handles that can't be used
1090 in lpAttributeList["handle_list"] and make sure the list
1091 isn't empty. This also removes duplicate handles."""
1092 # An handle with it's lowest two bits set might be a special console
1093 # handle that if passed in lpAttributeList["handle_list"], will
1094 # cause it to fail.
1095 return list({handle for handle in handle_list
1096 if handle & 0x3 != 0x3
1097 or _winapi.GetFileType(handle) !=
1098 _winapi.FILE_TYPE_CHAR})
1099
1100
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001101 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001102 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001103 startupinfo, creationflags, shell,
1104 p2cread, p2cwrite,
1105 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001106 errread, errwrite,
1107 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001108 """Execute program (MS Windows version)"""
1109
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001110 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001111
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001112 if not isinstance(args, str):
Serhiy Storchakabe50a7b2018-02-28 01:03:46 +02001113 args = list2cmdline(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001114
Peter Astrandc1d65362004-11-07 14:30:34 +00001115 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001116 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001117 startupinfo = STARTUPINFO()
Victor Stinner483422f2018-07-05 22:54:17 +02001118 else:
1119 # bpo-34044: Copy STARTUPINFO since it is modified above,
1120 # so the caller can reuse it multiple times.
1121 startupinfo = startupinfo.copy()
Segev Finerb2a60832017-12-18 11:28:19 +02001122
1123 use_std_handles = -1 not in (p2cread, c2pwrite, errwrite)
1124 if use_std_handles:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001125 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001126 startupinfo.hStdInput = p2cread
1127 startupinfo.hStdOutput = c2pwrite
1128 startupinfo.hStdError = errwrite
1129
Segev Finerb2a60832017-12-18 11:28:19 +02001130 attribute_list = startupinfo.lpAttributeList
1131 have_handle_list = bool(attribute_list and
1132 "handle_list" in attribute_list and
1133 attribute_list["handle_list"])
1134
1135 # If we were given an handle_list or need to create one
1136 if have_handle_list or (use_std_handles and close_fds):
1137 if attribute_list is None:
1138 attribute_list = startupinfo.lpAttributeList = {}
1139 handle_list = attribute_list["handle_list"] = \
1140 list(attribute_list.get("handle_list", []))
1141
1142 if use_std_handles:
1143 handle_list += [int(p2cread), int(c2pwrite), int(errwrite)]
1144
1145 handle_list[:] = self._filter_handle_list(handle_list)
1146
1147 if handle_list:
1148 if not close_fds:
1149 warnings.warn("startupinfo.lpAttributeList['handle_list'] "
1150 "overriding close_fds", RuntimeWarning)
1151
1152 # When using the handle_list we always request to inherit
1153 # handles but the only handles that will be inherited are
1154 # the ones in the handle_list
1155 close_fds = False
1156
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001157 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001158 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1159 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001160 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001161 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001162
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001163 # Start the process
1164 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001165 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001166 # no special security
1167 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001168 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001169 creationflags,
1170 env,
Benjamin Petersoncb90f262017-03-02 00:03:41 -08001171 os.fspath(cwd) if cwd is not None else None,
Tim Peterse8374a52004-10-13 03:15:00 +00001172 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001173 finally:
1174 # Child is launched. Close the parent's copy of those pipe
1175 # handles that only the child should have open. You need
1176 # to make sure that no handles to the write end of the
1177 # output pipe are maintained in this process or else the
1178 # pipe will not close when the child process exits and the
1179 # ReadFile will hang.
1180 if p2cread != -1:
1181 p2cread.Close()
1182 if c2pwrite != -1:
1183 c2pwrite.Close()
1184 if errwrite != -1:
1185 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001186 if hasattr(self, '_devnull'):
1187 os.close(self._devnull)
Segev Finer4d385172017-08-18 16:18:13 +03001188 # Prevent a double close of these handles/fds from __init__
1189 # on error.
1190 self._closed_child_pipe_fds = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001191
1192 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001193 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001194 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001195 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001196 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001197
Brett Cannon84df1e62010-05-14 00:33:40 +00001198 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001199 _WaitForSingleObject=_winapi.WaitForSingleObject,
1200 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1201 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001202 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001203 attribute.
1204
1205 This method is called by __del__, so it can only refer to objects
1206 in its local scope.
1207
1208 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001209 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001210 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1211 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001212 return self.returncode
1213
1214
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001215 def _wait(self, timeout):
1216 """Internal implementation of wait() on Windows."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001217 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001218 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001219 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001220 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001221 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001222 # API note: Returns immediately if timeout_millis == 0.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001223 result = _winapi.WaitForSingleObject(self._handle,
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001224 timeout_millis)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001225 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001226 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001227 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001228 return self.returncode
1229
1230
1231 def _readerthread(self, fh, buffer):
1232 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001233 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001234
1235
Reid Kleckner2b228f02011-03-16 16:57:54 -04001236 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001237 # Start reader threads feeding into a list hanging off of this
1238 # object, unless they've already been started.
1239 if self.stdout and not hasattr(self, "_stdout_buff"):
1240 self._stdout_buff = []
1241 self.stdout_thread = \
1242 threading.Thread(target=self._readerthread,
1243 args=(self.stdout, self._stdout_buff))
1244 self.stdout_thread.daemon = True
1245 self.stdout_thread.start()
1246 if self.stderr and not hasattr(self, "_stderr_buff"):
1247 self._stderr_buff = []
1248 self.stderr_thread = \
1249 threading.Thread(target=self._readerthread,
1250 args=(self.stderr, self._stderr_buff))
1251 self.stderr_thread.daemon = True
1252 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001253
1254 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001255 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001256
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001257 # Wait for the reader threads, or time out. If we time out, the
1258 # threads remain reading and the fds left open in case the user
1259 # calls communicate again.
1260 if self.stdout is not None:
1261 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001262 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001263 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001264 if self.stderr is not None:
1265 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001266 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001267 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001268
1269 # Collect the output from and close both pipes, now that we know
1270 # both have been read successfully.
1271 stdout = None
1272 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001273 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001274 stdout = self._stdout_buff
1275 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001276 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001277 stderr = self._stderr_buff
1278 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001279
1280 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001281 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001282 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001283 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001284 stderr = stderr[0]
1285
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001286 return (stdout, stderr)
1287
Christian Heimesa342c012008-04-20 21:01:16 +00001288 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001289 """Send a signal to the process."""
1290 # Don't signal a process that we know has already died.
1291 if self.returncode is not None:
1292 return
Christian Heimesa342c012008-04-20 21:01:16 +00001293 if sig == signal.SIGTERM:
1294 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001295 elif sig == signal.CTRL_C_EVENT:
1296 os.kill(self.pid, signal.CTRL_C_EVENT)
1297 elif sig == signal.CTRL_BREAK_EVENT:
1298 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001299 else:
Brian Curtin19651362010-09-07 13:24:38 +00001300 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001301
1302 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001303 """Terminates the process."""
1304 # Don't terminate a process that we know has already died.
1305 if self.returncode is not None:
1306 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001307 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001308 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001309 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001310 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1311 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001312 rc = _winapi.GetExitCodeProcess(self._handle)
1313 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001314 raise
1315 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001316
1317 kill = terminate
1318
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001319 else:
1320 #
1321 # POSIX methods
1322 #
1323 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001324 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001325 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1326 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001327 p2cread, p2cwrite = -1, -1
1328 c2pread, c2pwrite = -1, -1
1329 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001330
Peter Astrandd38ddf42005-02-10 08:32:50 +00001331 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001332 pass
1333 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001334 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001335 elif stdin == DEVNULL:
1336 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001337 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001338 p2cread = stdin
1339 else:
1340 # Assuming file-like object
1341 p2cread = stdin.fileno()
1342
Peter Astrandd38ddf42005-02-10 08:32:50 +00001343 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001344 pass
1345 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001346 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001347 elif stdout == DEVNULL:
1348 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001349 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001350 c2pwrite = stdout
1351 else:
1352 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001353 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001354
Peter Astrandd38ddf42005-02-10 08:32:50 +00001355 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001356 pass
1357 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001358 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001359 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001360 if c2pwrite != -1:
1361 errwrite = c2pwrite
1362 else: # child's stdout is not set, use parent's stdout
1363 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001364 elif stderr == DEVNULL:
1365 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001366 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001367 errwrite = stderr
1368 else:
1369 # Assuming file-like object
1370 errwrite = stderr.fileno()
1371
1372 return (p2cread, p2cwrite,
1373 c2pread, c2pwrite,
1374 errread, errwrite)
1375
1376
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001377 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001378 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001379 startupinfo, creationflags, shell,
1380 p2cread, p2cwrite,
1381 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001382 errread, errwrite,
1383 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001384 """Execute program (POSIX version)"""
1385
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001386 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001387 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001388 else:
Serhiy Storchakabe50a7b2018-02-28 01:03:46 +02001389 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001390
1391 if shell:
Xavier de Gayeb35fc622016-12-13 16:32:21 +01001392 # On Android the default shell is at '/system/bin/sh'.
1393 unix_shell = ('/system/bin/sh' if
1394 hasattr(sys, 'getandroidapilevel') else '/bin/sh')
1395 args = [unix_shell, "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001396 if executable:
1397 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001398
Peter Astrandd38ddf42005-02-10 08:32:50 +00001399 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001400 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001401 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001402
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001403 # For transferring possible exec failure from child to parent.
1404 # Data format: "exception name:hex errno:description"
1405 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001406 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001407 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1408 low_fds_to_close = []
1409 while errpipe_write < 3:
1410 low_fds_to_close.append(errpipe_write)
1411 errpipe_write = os.dup(errpipe_write)
1412 for low_fd in low_fds_to_close:
1413 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001414 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001415 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001416 # We must avoid complex work that could involve
1417 # malloc or free in the child process to avoid
1418 # potential deadlocks, thus we do all this here.
1419 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001420
Victor Stinner372b8382011-06-21 17:24:21 +02001421 if env is not None:
Serhiy Storchakad174d242017-06-23 19:39:27 +03001422 env_list = []
1423 for k, v in env.items():
1424 k = os.fsencode(k)
1425 if b'=' in k:
1426 raise ValueError("illegal environment variable name")
1427 env_list.append(k + b'=' + os.fsencode(v))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001428 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001429 env_list = None # Use execv instead of execve.
1430 executable = os.fsencode(executable)
1431 if os.path.dirname(executable):
1432 executable_list = (executable,)
1433 else:
1434 # This matches the behavior of os._execvpe().
1435 executable_list = tuple(
1436 os.path.join(os.fsencode(dir), executable)
1437 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001438 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001439 fds_to_keep.add(errpipe_write)
1440 self.pid = _posixsubprocess.fork_exec(
1441 args, executable_list,
Serhiy Storchaka66bffd12017-04-19 21:12:46 +03001442 close_fds, tuple(sorted(map(int, fds_to_keep))),
1443 cwd, env_list,
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001444 p2cread, p2cwrite, c2pread, c2pwrite,
1445 errread, errwrite,
1446 errpipe_read, errpipe_write,
1447 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001448 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001449 finally:
1450 # be sure the FD is closed no matter what
1451 os.close(errpipe_write)
1452
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001453 # self._devnull is not always defined.
1454 devnull_fd = getattr(self, '_devnull', None)
1455 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001456 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001457 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001458 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001459 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001460 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001461 if devnull_fd is not None:
1462 os.close(devnull_fd)
1463 # Prevent a double close of these fds from __init__ on error.
1464 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001465
1466 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001467 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001468 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001469 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001470 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001471 errpipe_data += part
1472 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001473 break
Facundo Batista10706e22009-06-19 20:34:30 +00001474 finally:
1475 # be sure the FD is closed no matter what
1476 os.close(errpipe_read)
1477
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001478 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001479 try:
Victor Stinnera58e2c52016-05-20 12:08:12 +02001480 pid, sts = os.waitpid(self.pid, 0)
1481 if pid == self.pid:
1482 self._handle_exitstatus(sts)
1483 else:
1484 self.returncode = sys.maxsize
Victor Stinnera5e881d2015-01-14 17:07:59 +01001485 except ChildProcessError:
1486 pass
Victor Stinnera58e2c52016-05-20 12:08:12 +02001487
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001488 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001489 exception_name, hex_errno, err_msg = (
1490 errpipe_data.split(b':', 2))
Ammar Askar3fc499b2017-09-06 02:41:30 -04001491 # The encoding here should match the encoding
1492 # written in by the subprocess implementations
1493 # like _posixsubprocess
1494 err_msg = err_msg.decode()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001495 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001496 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001497 hex_errno = b'0'
Ammar Askar3fc499b2017-09-06 02:41:30 -04001498 err_msg = 'Bad exception data from child: {!r}'.format(
1499 bytes(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001500 child_exception_type = getattr(
1501 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001502 SubprocessError)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001503 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001504 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001505 child_exec_never_called = (err_msg == "noexec")
1506 if child_exec_never_called:
1507 err_msg = ""
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001508 # The error must be from chdir(cwd).
1509 err_filename = cwd
1510 else:
1511 err_filename = orig_executable
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001512 if errno_num != 0:
1513 err_msg = os.strerror(errno_num)
1514 if errno_num == errno.ENOENT:
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001515 err_msg += ': ' + repr(err_filename)
1516 raise child_exception_type(errno_num, err_msg, err_filename)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001517 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001518
1519
Brett Cannon84df1e62010-05-14 00:33:40 +00001520 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1521 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001522 _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
1523 _WSTOPSIG=os.WSTOPSIG):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001524 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001525 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001526 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001527 if _WIFSIGNALED(sts):
1528 self.returncode = -_WTERMSIG(sts)
1529 elif _WIFEXITED(sts):
1530 self.returncode = _WEXITSTATUS(sts)
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001531 elif _WIFSTOPPED(sts):
1532 self.returncode = -_WSTOPSIG(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001533 else:
1534 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001535 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001536
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001537
Brett Cannon84df1e62010-05-14 00:33:40 +00001538 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001539 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001540 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001541 attribute.
1542
1543 This method is called by __del__, so it cannot reference anything
1544 outside of the local scope (nor can any methods it calls).
1545
1546 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001547 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001548 if not self._waitpid_lock.acquire(False):
1549 # Something else is busy calling waitpid. Don't allow two
1550 # at once. We know nothing yet.
1551 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001552 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001553 if self.returncode is not None:
1554 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001555 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001556 if pid == self.pid:
1557 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001558 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001559 if _deadstate is not None:
1560 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001561 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001562 # This happens if SIGCLD is set to be ignored or
1563 # waiting for child processes has otherwise been
1564 # disabled for our process. This child is dead, we
1565 # can't get the status.
1566 # http://bugs.python.org/issue15756
1567 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001568 finally:
1569 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001570 return self.returncode
1571
1572
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001573 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001574 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001575 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001576 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001577 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001578 # This happens if SIGCLD is set to be ignored or waiting
1579 # for child processes has otherwise been disabled for our
1580 # process. This child is dead, we can't get the status.
1581 pid = self.pid
1582 sts = 0
1583 return (pid, sts)
1584
1585
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001586 def _wait(self, timeout):
1587 """Internal implementation of wait() on POSIX."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001588 if self.returncode is not None:
1589 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001590
Gregory P. Smith82604e02016-11-20 16:31:07 -08001591 if timeout is not None:
1592 endtime = _time() + timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001593 # Enter a busy loop if we have a timeout. This busy loop was
1594 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1595 delay = 0.0005 # 500 us -> initial delay of 1 ms
1596 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001597 if self._waitpid_lock.acquire(False):
1598 try:
1599 if self.returncode is not None:
1600 break # Another thread waited.
1601 (pid, sts) = self._try_wait(os.WNOHANG)
1602 assert pid == self.pid or pid == 0
1603 if pid == self.pid:
1604 self._handle_exitstatus(sts)
1605 break
1606 finally:
1607 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001608 remaining = self._remaining_time(endtime)
1609 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001610 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001611 delay = min(delay * 2, remaining, .05)
1612 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001613 else:
1614 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001615 with self._waitpid_lock:
1616 if self.returncode is not None:
1617 break # Another thread waited.
1618 (pid, sts) = self._try_wait(0)
1619 # Check the pid and loop as waitpid has been known to
1620 # return 0 even without WNOHANG in odd situations.
1621 # http://bugs.python.org/issue14396.
1622 if pid == self.pid:
1623 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001624 return self.returncode
1625
1626
Reid Kleckner2b228f02011-03-16 16:57:54 -04001627 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001628 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001629 # Flush stdio buffer. This might block, if the user has
1630 # been writing to .stdin in an uncontrolled fashion.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001631 try:
1632 self.stdin.flush()
1633 except BrokenPipeError:
1634 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001635 if not input:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001636 try:
1637 self.stdin.close()
1638 except BrokenPipeError:
1639 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001640
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001641 stdout = None
1642 stderr = None
1643
1644 # Only create this mapping if we haven't already.
1645 if not self._communication_started:
1646 self._fileobj2output = {}
1647 if self.stdout:
1648 self._fileobj2output[self.stdout] = []
1649 if self.stderr:
1650 self._fileobj2output[self.stderr] = []
1651
1652 if self.stdout:
1653 stdout = self._fileobj2output[self.stdout]
1654 if self.stderr:
1655 stderr = self._fileobj2output[self.stderr]
1656
1657 self._save_input(input)
1658
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001659 if self._input:
1660 input_view = memoryview(self._input)
1661
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001662 with _PopenSelector() as selector:
1663 if self.stdin and input:
1664 selector.register(self.stdin, selectors.EVENT_WRITE)
1665 if self.stdout:
1666 selector.register(self.stdout, selectors.EVENT_READ)
1667 if self.stderr:
1668 selector.register(self.stderr, selectors.EVENT_READ)
1669
1670 while selector.get_map():
1671 timeout = self._remaining_time(endtime)
1672 if timeout is not None and timeout < 0:
1673 raise TimeoutExpired(self.args, orig_timeout)
1674
1675 ready = selector.select(timeout)
1676 self._check_timeout(endtime, orig_timeout)
1677
1678 # XXX Rewrite these to use non-blocking I/O on the file
1679 # objects; they are no longer using C stdio!
1680
1681 for key, events in ready:
1682 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001683 chunk = input_view[self._input_offset :
1684 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001685 try:
1686 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001687 except BrokenPipeError:
1688 selector.unregister(key.fileobj)
1689 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001690 else:
1691 if self._input_offset >= len(self._input):
1692 selector.unregister(key.fileobj)
1693 key.fileobj.close()
1694 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001695 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001696 if not data:
1697 selector.unregister(key.fileobj)
1698 key.fileobj.close()
1699 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001700
1701 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001702
1703 # All data exchanged. Translate lists into strings.
1704 if stdout is not None:
1705 stdout = b''.join(stdout)
1706 if stderr is not None:
1707 stderr = b''.join(stderr)
1708
1709 # Translate newlines, if requested.
1710 # This also turns bytes into strings.
andyclegg7fed7bd2017-10-23 03:01:19 +01001711 if self.text_mode:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001712 if stdout is not None:
1713 stdout = self._translate_newlines(stdout,
Steve Dower050acae2016-09-06 20:16:17 -07001714 self.stdout.encoding,
1715 self.stdout.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001716 if stderr is not None:
1717 stderr = self._translate_newlines(stderr,
Steve Dower050acae2016-09-06 20:16:17 -07001718 self.stderr.encoding,
1719 self.stderr.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001720
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001721 return (stdout, stderr)
1722
1723
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001724 def _save_input(self, input):
1725 # This method is called from the _communicate_with_*() methods
1726 # so that if we time out while communicating, we can continue
1727 # sending input if we retry.
1728 if self.stdin and self._input is None:
1729 self._input_offset = 0
1730 self._input = input
andyclegg7fed7bd2017-10-23 03:01:19 +01001731 if input is not None and self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -07001732 self._input = self._input.encode(self.stdin.encoding,
1733 self.stdin.errors)
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001734
1735
Christian Heimesa342c012008-04-20 21:01:16 +00001736 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001737 """Send a signal to the process."""
1738 # Skip signalling a process that we know has already died.
1739 if self.returncode is None:
1740 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00001741
1742 def terminate(self):
1743 """Terminate the process with SIGTERM
1744 """
1745 self.send_signal(signal.SIGTERM)
1746
1747 def kill(self):
1748 """Kill the process with SIGKILL
1749 """
1750 self.send_signal(signal.SIGKILL)