blob: 5db6f0cc24ba331e35a8f124d7072a601ede156f [file] [log] [blame]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001# subprocess - Subprocesses with accessible I/O streams
2#
Tim Peterse718f612004-10-12 21:51:32 +00003# For more information about this module, see PEP 324.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00004#
Peter Astrand3a708df2005-09-23 17:37:29 +00005# Copyright (c) 2003-2005 by Peter Astrand <astrand@lysator.liu.se>
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00006#
Peter Astrand69bf13f2005-02-14 08:56:32 +00007# Licensed to PSF under a Contributor Agreement.
Peter Astrand3a708df2005-09-23 17:37:29 +00008# See http://www.python.org/2.4/license for licensing details.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00009
Martin Panter4afdca02016-10-25 22:20:48 +000010r"""Subprocesses with accessible I/O streams
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000011
Fredrik Lundh15aaacc2004-10-17 14:47:05 +000012This module allows you to spawn processes, connect to their
Martin Panter4afdca02016-10-25 22:20:48 +000013input/output/error pipes, and obtain their return codes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000014
Martin Panter4afdca02016-10-25 22:20:48 +000015For a complete description of this module see the Python documentation.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000016
Martin Panter4afdca02016-10-25 22:20:48 +000017Main API
18========
19run(...): Runs a command, waits for it to complete, then returns a
20 CompletedProcess instance.
21Popen(...): A class for flexibly executing a command in a new process
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000022
Martin Panter4afdca02016-10-25 22:20:48 +000023Constants
24---------
25DEVNULL: Special value that indicates that os.devnull should be used
26PIPE: Special value that indicates a pipe should be created
27STDOUT: Special value that indicates that stderr should go to stdout
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000028
29
Martin Panter4afdca02016-10-25 22:20:48 +000030Older API
31=========
32call(...): Runs a command, waits for it to complete, then returns
33 the return code.
34check_call(...): Same as call() but raises CalledProcessError()
35 if return code is not 0
36check_output(...): Same as check_call() but returns the contents of
37 stdout instead of a return code
38getoutput(...): Runs a command in the shell, waits for it to complete,
39 then returns the output
40getstatusoutput(...): Runs a command in the shell, waits for it to complete,
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -070041 then returns a (exitcode, output) tuple
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000042"""
43
Zachary Ware880d42a2018-09-10 16:16:08 -070044import builtins
45import errno
Guido van Rossumfa0054a2007-05-24 04:05:35 +000046import io
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000047import os
Reid Kleckner31aa7dd2011-03-14 12:02:10 -040048import time
Christian Heimesa342c012008-04-20 21:01:16 +000049import signal
Zachary Ware880d42a2018-09-10 16:16:08 -070050import sys
51import threading
Gregory P. Smithd23047b2010-12-04 09:10:44 +000052import warnings
Victor Stinnerae586492014-09-02 23:18:25 +020053from time import monotonic as _time
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000054
Zachary Ware880d42a2018-09-10 16:16:08 -070055
56__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
57 "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL",
58 "SubprocessError", "TimeoutExpired", "CompletedProcess"]
59 # NOTE: We intentionally exclude list2cmdline as it is
60 # considered an internal implementation detail. issue10838.
61
62try:
63 import msvcrt
64 import _winapi
65 _mswindows = True
66except ModuleNotFoundError:
67 _mswindows = False
68 import _posixsubprocess
69 import select
70 import selectors
71else:
72 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
73 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
74 STD_ERROR_HANDLE, SW_HIDE,
75 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW,
76 ABOVE_NORMAL_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS,
77 HIGH_PRIORITY_CLASS, IDLE_PRIORITY_CLASS,
78 NORMAL_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS,
79 CREATE_NO_WINDOW, DETACHED_PROCESS,
80 CREATE_DEFAULT_ERROR_MODE, CREATE_BREAKAWAY_FROM_JOB)
81
82 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
83 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
84 "STD_ERROR_HANDLE", "SW_HIDE",
85 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW",
86 "STARTUPINFO",
87 "ABOVE_NORMAL_PRIORITY_CLASS", "BELOW_NORMAL_PRIORITY_CLASS",
88 "HIGH_PRIORITY_CLASS", "IDLE_PRIORITY_CLASS",
89 "NORMAL_PRIORITY_CLASS", "REALTIME_PRIORITY_CLASS",
90 "CREATE_NO_WINDOW", "DETACHED_PROCESS",
91 "CREATE_DEFAULT_ERROR_MODE", "CREATE_BREAKAWAY_FROM_JOB"])
92
93
Peter Astrand454f7672005-01-01 09:36:35 +000094# Exception classes used by this module.
Gregory P. Smith54d412e2011-03-14 14:08:43 -040095class SubprocessError(Exception): pass
96
97
98class CalledProcessError(SubprocessError):
Martin Panter4afdca02016-10-25 22:20:48 +000099 """Raised when run() is called with check=True and the process
100 returns a non-zero exit status.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)d6da7602016-06-03 06:14:06 +0000101
Martin Panter4afdca02016-10-25 22:20:48 +0000102 Attributes:
103 cmd, returncode, stdout, stderr, output
Georg Brandlf9734072008-12-07 15:30:06 +0000104 """
Gregory P. Smith6e730002015-04-14 16:14:25 -0700105 def __init__(self, returncode, cmd, output=None, stderr=None):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000106 self.returncode = returncode
107 self.cmd = cmd
Georg Brandlf9734072008-12-07 15:30:06 +0000108 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -0700109 self.stderr = stderr
110
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000111 def __str__(self):
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)d6da7602016-06-03 06:14:06 +0000112 if self.returncode and self.returncode < 0:
113 try:
114 return "Command '%s' died with %r." % (
115 self.cmd, signal.Signals(-self.returncode))
116 except ValueError:
117 return "Command '%s' died with unknown signal %d." % (
118 self.cmd, -self.returncode)
119 else:
120 return "Command '%s' returned non-zero exit status %d." % (
121 self.cmd, self.returncode)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000122
Gregory P. Smith6e730002015-04-14 16:14:25 -0700123 @property
124 def stdout(self):
125 """Alias for output attribute, to match stderr"""
126 return self.output
127
128 @stdout.setter
129 def stdout(self, value):
130 # There's no obvious reason to set this, but allow it anyway so
131 # .stdout is a transparent alias for .output
132 self.output = value
133
Peter Astrand454f7672005-01-01 09:36:35 +0000134
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400135class TimeoutExpired(SubprocessError):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400136 """This exception is raised when the timeout expires while waiting for a
137 child process.
Martin Panter4afdca02016-10-25 22:20:48 +0000138
139 Attributes:
140 cmd, output, stdout, stderr, timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400141 """
Gregory P. Smith6e730002015-04-14 16:14:25 -0700142 def __init__(self, cmd, timeout, output=None, stderr=None):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400143 self.cmd = cmd
Reid Kleckner2b228f02011-03-16 16:57:54 -0400144 self.timeout = timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400145 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -0700146 self.stderr = stderr
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400147
148 def __str__(self):
149 return ("Command '%s' timed out after %s seconds" %
150 (self.cmd, self.timeout))
151
Gregory P. Smith6e730002015-04-14 16:14:25 -0700152 @property
153 def stdout(self):
154 return self.output
155
156 @stdout.setter
157 def stdout(self, value):
158 # There's no obvious reason to set this, but allow it anyway so
159 # .stdout is a transparent alias for .output
160 self.output = value
161
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400162
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700163if _mswindows:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000164 class STARTUPINFO:
Subhendu Ghoshae160bb2017-02-25 20:29:05 +0530165 def __init__(self, *, dwFlags=0, hStdInput=None, hStdOutput=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200166 hStdError=None, wShowWindow=0, lpAttributeList=None):
Subhendu Ghoshae160bb2017-02-25 20:29:05 +0530167 self.dwFlags = dwFlags
168 self.hStdInput = hStdInput
169 self.hStdOutput = hStdOutput
170 self.hStdError = hStdError
171 self.wShowWindow = wShowWindow
Segev Finerb2a60832017-12-18 11:28:19 +0200172 self.lpAttributeList = lpAttributeList or {"handle_list": []}
Victor Stinner483422f2018-07-05 22:54:17 +0200173
174 def copy(self):
175 attr_list = self.lpAttributeList.copy()
176 if 'handle_list' in attr_list:
177 attr_list['handle_list'] = list(attr_list['handle_list'])
178
179 return STARTUPINFO(dwFlags=self.dwFlags,
180 hStdInput=self.hStdInput,
181 hStdOutput=self.hStdOutput,
182 hStdError=self.hStdError,
183 wShowWindow=self.wShowWindow,
184 lpAttributeList=attr_list)
185
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200186
187 class Handle(int):
188 closed = False
189
190 def Close(self, CloseHandle=_winapi.CloseHandle):
191 if not self.closed:
192 self.closed = True
193 CloseHandle(self)
194
195 def Detach(self):
196 if not self.closed:
197 self.closed = True
198 return int(self)
199 raise ValueError("already closed")
200
201 def __repr__(self):
Serhiy Storchaka465e60e2014-07-25 23:36:00 +0300202 return "%s(%d)" % (self.__class__.__name__, int(self))
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200203
204 __del__ = Close
205 __str__ = __repr__
Zachary Ware880d42a2018-09-10 16:16:08 -0700206else:
207 # When select or poll has indicated that the file is writable,
208 # we can write up to _PIPE_BUF bytes without risk of blocking.
209 # POSIX defines PIPE_BUF as >= 512.
210 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
211
212 # poll/select have the advantage of not requiring any extra file
213 # descriptor, contrarily to epoll/kqueue (also, they require a single
214 # syscall).
215 if hasattr(selectors, 'PollSelector'):
216 _PopenSelector = selectors.PollSelector
217 else:
218 _PopenSelector = selectors.SelectSelector
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200219
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000220
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200221# This lists holds Popen instances for which the underlying process had not
222# exited at the time its __del__ method got called: those processes are wait()ed
223# for synchronously from _cleanup() when a new Popen object is created, to avoid
224# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000225_active = []
226
227def _cleanup():
228 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000229 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200230 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000231 try:
232 _active.remove(inst)
233 except ValueError:
234 # This can happen if two threads create a new Popen instance.
235 # It's harmless that it was already removed, so ignore.
236 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000237
238PIPE = -1
239STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200240DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000241
242
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200243# XXX This function is only used by multiprocessing and the test suite,
244# but it's here so that it can be imported when Python is compiled without
245# threads.
246
Victor Stinner9def2842016-01-18 12:15:08 +0100247def _optim_args_from_interpreter_flags():
248 """Return a list of command-line arguments reproducing the current
249 optimization settings in sys.flags."""
250 args = []
251 value = sys.flags.optimize
252 if value > 0:
253 args.append('-' + 'O' * value)
254 return args
255
256
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200257def _args_from_interpreter_flags():
258 """Return a list of command-line arguments reproducing the current
Victor Stinner747f48e2017-12-12 22:59:48 +0100259 settings in sys.flags, sys.warnoptions and sys._xoptions."""
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200260 flag_opt_map = {
261 'debug': 'd',
262 # 'inspect': 'i',
263 # 'interactive': 'i',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200264 'dont_write_bytecode': 'B',
265 'no_user_site': 's',
266 'no_site': 'S',
267 'ignore_environment': 'E',
268 'verbose': 'v',
269 'bytes_warning': 'b',
270 'quiet': 'q',
Victor Stinner9def2842016-01-18 12:15:08 +0100271 # -O is handled in _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200272 }
Victor Stinner9def2842016-01-18 12:15:08 +0100273 args = _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200274 for flag, opt in flag_opt_map.items():
275 v = getattr(sys.flags, flag)
276 if v > 0:
277 args.append('-' + opt * v)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800278
279 # -W options
Victor Stinner747f48e2017-12-12 22:59:48 +0100280 warnopts = sys.warnoptions[:]
281 bytes_warning = sys.flags.bytes_warning
282 xoptions = getattr(sys, '_xoptions', {})
283 dev_mode = ('dev' in xoptions)
284
285 if bytes_warning > 1:
286 warnopts.remove("error::BytesWarning")
287 elif bytes_warning:
288 warnopts.remove("default::BytesWarning")
289 if dev_mode:
290 warnopts.remove('default')
291 for opt in warnopts:
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200292 args.append('-W' + opt)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800293
294 # -X options
Victor Stinner747f48e2017-12-12 22:59:48 +0100295 if dev_mode:
Victor Stinnerf39b6742017-11-20 15:24:56 -0800296 args.extend(('-X', 'dev'))
297 for opt in ('faulthandler', 'tracemalloc', 'importtime',
Victor Stinner91106cd2017-12-13 12:29:09 +0100298 'showalloccount', 'showrefcount', 'utf8'):
Victor Stinnerf39b6742017-11-20 15:24:56 -0800299 if opt in xoptions:
300 value = xoptions[opt]
301 if value is True:
302 arg = opt
303 else:
304 arg = '%s=%s' % (opt, value)
305 args.extend(('-X', arg))
306
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200307 return args
308
309
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400310def call(*popenargs, timeout=None, **kwargs):
311 """Run command with arguments. Wait for command to complete or
312 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000313
314 The arguments are the same as for the Popen constructor. Example:
315
316 retcode = call(["ls", "-l"])
317 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200318 with Popen(*popenargs, **kwargs) as p:
319 try:
320 return p.wait(timeout=timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800321 except: # Including KeyboardInterrupt, wait handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200322 p.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800323 # We don't call p.wait() again as p.__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200324 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000325
326
Peter Astrand454f7672005-01-01 09:36:35 +0000327def check_call(*popenargs, **kwargs):
328 """Run command with arguments. Wait for command to complete. If
329 the exit code was zero then return, otherwise raise
330 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000331 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000332
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400333 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000334
335 check_call(["ls", "-l"])
336 """
337 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000338 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000339 cmd = kwargs.get("args")
340 if cmd is None:
341 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000342 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000343 return 0
344
345
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400346def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700347 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000348
349 If the exit code was non-zero it raises a CalledProcessError. The
350 CalledProcessError object will have the return code in the returncode
351 attribute and output in the output attribute.
352
353 The arguments are the same as for the Popen constructor. Example:
354
355 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000356 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000357
358 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000359 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000360
361 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000362 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000363 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000364 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700365
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300366 There is an additional optional argument, "input", allowing you to
367 pass a string to the subprocess's stdin. If you use this argument
368 you may not also use the Popen constructor's "stdin" argument, as
369 it too will be used internally. Example:
370
371 >>> check_output(["sed", "-e", "s/foo/bar/"],
372 ... input=b"when in the course of fooman events\n")
373 b'when in the course of barman events\n'
374
andyclegg7fed7bd2017-10-23 03:01:19 +0100375 By default, all communication is in bytes, and therefore any "input"
376 should be bytes, and the return value wil be bytes. If in text mode,
377 any "input" should be a string, and the return value will be a string
378 decoded according to locale encoding, or by "encoding" if set. Text mode
379 is triggered by setting any of text, encoding, errors or universal_newlines.
Georg Brandlf9734072008-12-07 15:30:06 +0000380 """
381 if 'stdout' in kwargs:
382 raise ValueError('stdout argument not allowed, it will be overridden.')
Gregory P. Smith6e730002015-04-14 16:14:25 -0700383
384 if 'input' in kwargs and kwargs['input'] is None:
385 # Explicitly passing input=None was previously equivalent to passing an
386 # empty string. That is maintained here for backwards compatibility.
387 kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
388
389 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
390 **kwargs).stdout
391
392
393class CompletedProcess(object):
394 """A process that has finished running.
395
396 This is returned by run().
397
398 Attributes:
399 args: The list or str args passed to run().
400 returncode: The exit code of the process, negative for signals.
401 stdout: The standard output (None if not captured).
402 stderr: The standard error (None if not captured).
403 """
404 def __init__(self, args, returncode, stdout=None, stderr=None):
405 self.args = args
406 self.returncode = returncode
407 self.stdout = stdout
408 self.stderr = stderr
409
410 def __repr__(self):
411 args = ['args={!r}'.format(self.args),
412 'returncode={!r}'.format(self.returncode)]
413 if self.stdout is not None:
414 args.append('stdout={!r}'.format(self.stdout))
415 if self.stderr is not None:
416 args.append('stderr={!r}'.format(self.stderr))
417 return "{}({})".format(type(self).__name__, ', '.join(args))
418
419 def check_returncode(self):
420 """Raise CalledProcessError if the exit code is non-zero."""
421 if self.returncode:
422 raise CalledProcessError(self.returncode, self.args, self.stdout,
423 self.stderr)
424
425
Bo Baylesce0f33d2018-01-30 00:40:39 -0600426def run(*popenargs,
427 input=None, capture_output=False, timeout=None, check=False, **kwargs):
Gregory P. Smith6e730002015-04-14 16:14:25 -0700428 """Run command with arguments and return a CompletedProcess instance.
429
430 The returned instance will have attributes args, returncode, stdout and
431 stderr. By default, stdout and stderr are not captured, and those attributes
432 will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.
433
434 If check is True and the exit code was non-zero, it raises a
435 CalledProcessError. The CalledProcessError object will have the return code
436 in the returncode attribute, and output & stderr attributes if those streams
437 were captured.
438
439 If timeout is given, and the process takes too long, a TimeoutExpired
440 exception will be raised.
441
442 There is an optional argument "input", allowing you to
andyclegg7fed7bd2017-10-23 03:01:19 +0100443 pass bytes or a string to the subprocess's stdin. If you use this argument
Gregory P. Smith6e730002015-04-14 16:14:25 -0700444 you may not also use the Popen constructor's "stdin" argument, as
445 it will be used internally.
446
andyclegg7fed7bd2017-10-23 03:01:19 +0100447 By default, all communication is in bytes, and therefore any "input" should
448 be bytes, and the stdout and stderr will be bytes. If in text mode, any
449 "input" should be a string, and stdout and stderr will be strings decoded
450 according to locale encoding, or by "encoding" if set. Text mode is
451 triggered by setting any of text, encoding, errors or universal_newlines.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700452
andyclegg7fed7bd2017-10-23 03:01:19 +0100453 The other arguments are the same as for the Popen constructor.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700454 """
455 if input is not None:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300456 if 'stdin' in kwargs:
457 raise ValueError('stdin and input arguments may not both be used.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300458 kwargs['stdin'] = PIPE
Gregory P. Smith6e730002015-04-14 16:14:25 -0700459
Bo Baylesce0f33d2018-01-30 00:40:39 -0600460 if capture_output:
461 if ('stdout' in kwargs) or ('stderr' in kwargs):
462 raise ValueError('stdout and stderr arguments may not be used '
463 'with capture_output.')
464 kwargs['stdout'] = PIPE
465 kwargs['stderr'] = PIPE
466
Gregory P. Smith6e730002015-04-14 16:14:25 -0700467 with Popen(*popenargs, **kwargs) as process:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200468 try:
Gregory P. Smith6e730002015-04-14 16:14:25 -0700469 stdout, stderr = process.communicate(input, timeout=timeout)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200470 except TimeoutExpired:
471 process.kill()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700472 stdout, stderr = process.communicate()
473 raise TimeoutExpired(process.args, timeout, output=stdout,
474 stderr=stderr)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800475 except: # Including KeyboardInterrupt, communicate handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200476 process.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800477 # We don't call process.wait() as .__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200478 raise
479 retcode = process.poll()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700480 if check and retcode:
481 raise CalledProcessError(retcode, process.args,
482 output=stdout, stderr=stderr)
483 return CompletedProcess(process.args, retcode, stdout, stderr)
Peter Astrand454f7672005-01-01 09:36:35 +0000484
485
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000486def list2cmdline(seq):
487 """
488 Translate a sequence of arguments into a command line
489 string, using the same rules as the MS C runtime:
490
491 1) Arguments are delimited by white space, which is either a
492 space or a tab.
493
494 2) A string surrounded by double quotation marks is
495 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000496 contained within. A quoted string can be embedded in an
497 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000498
499 3) A double quotation mark preceded by a backslash is
500 interpreted as a literal double quotation mark.
501
502 4) Backslashes are interpreted literally, unless they
503 immediately precede a double quotation mark.
504
505 5) If backslashes immediately precede a double quotation mark,
506 every pair of backslashes is interpreted as a literal
507 backslash. If the number of backslashes is odd, the last
508 backslash escapes the next double quotation mark as
509 described in rule 3.
510 """
511
512 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000513 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
514 # or search http://msdn.microsoft.com for
515 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000516 result = []
517 needquote = False
518 for arg in seq:
519 bs_buf = []
520
521 # Add a space to separate this argument from the others
522 if result:
523 result.append(' ')
524
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000525 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000526 if needquote:
527 result.append('"')
528
529 for c in arg:
530 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000531 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000532 bs_buf.append(c)
533 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000534 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000535 result.append('\\' * len(bs_buf)*2)
536 bs_buf = []
537 result.append('\\"')
538 else:
539 # Normal char
540 if bs_buf:
541 result.extend(bs_buf)
542 bs_buf = []
543 result.append(c)
544
Christian Heimesfdab48e2008-01-20 09:06:41 +0000545 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000546 if bs_buf:
547 result.extend(bs_buf)
548
549 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000550 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000551 result.append('"')
552
553 return ''.join(result)
554
555
Brett Cannona23810f2008-05-26 19:04:21 +0000556# Various tools for executing commands and looking at their output and status.
557#
Brett Cannona23810f2008-05-26 19:04:21 +0000558
559def getstatusoutput(cmd):
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700560 """Return (exitcode, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000561
Tim Golden60798142013-11-05 12:57:25 +0000562 Execute the string 'cmd' in a shell with 'check_output' and
Steve Dower050acae2016-09-06 20:16:17 -0700563 return a 2-tuple (status, output). The locale encoding is used
564 to decode the output and process newlines.
Tim Golden60798142013-11-05 12:57:25 +0000565
566 A trailing newline is stripped from the output.
567 The exit status for the command can be interpreted
568 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000569
570 >>> import subprocess
571 >>> subprocess.getstatusoutput('ls /bin/ls')
572 (0, '/bin/ls')
573 >>> subprocess.getstatusoutput('cat /bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700574 (1, 'cat: /bin/junk: No such file or directory')
Brett Cannona23810f2008-05-26 19:04:21 +0000575 >>> subprocess.getstatusoutput('/bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700576 (127, 'sh: /bin/junk: not found')
577 >>> subprocess.getstatusoutput('/bin/kill $$')
578 (-15, '')
Brett Cannona23810f2008-05-26 19:04:21 +0000579 """
Tim Goldene0041752013-11-03 12:53:17 +0000580 try:
andyclegg7fed7bd2017-10-23 03:01:19 +0100581 data = check_output(cmd, shell=True, text=True, stderr=STDOUT)
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700582 exitcode = 0
Tim Goldene0041752013-11-03 12:53:17 +0000583 except CalledProcessError as ex:
584 data = ex.output
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700585 exitcode = ex.returncode
Tim Goldene0041752013-11-03 12:53:17 +0000586 if data[-1:] == '\n':
587 data = data[:-1]
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700588 return exitcode, data
Brett Cannona23810f2008-05-26 19:04:21 +0000589
590def getoutput(cmd):
591 """Return output (stdout or stderr) of executing cmd in a shell.
592
593 Like getstatusoutput(), except the exit status is ignored and the return
594 value is a string containing the command's output. Example:
595
596 >>> import subprocess
597 >>> subprocess.getoutput('ls /bin/ls')
598 '/bin/ls'
599 """
600 return getstatusoutput(cmd)[1]
601
602
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000603class Popen(object):
Martin Panter4afdca02016-10-25 22:20:48 +0000604 """ Execute a child program in a new process.
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200605
Martin Panter4afdca02016-10-25 22:20:48 +0000606 For a complete description of the arguments see the Python documentation.
607
608 Arguments:
609 args: A string, or a sequence of program arguments.
610
611 bufsize: supplied as the buffering argument to the open() function when
612 creating the stdin/stdout/stderr pipe file objects
613
614 executable: A replacement program to execute.
615
616 stdin, stdout and stderr: These specify the executed programs' standard
617 input, standard output and standard error file handles, respectively.
618
619 preexec_fn: (POSIX only) An object to be called in the child process
620 just before the child is executed.
621
622 close_fds: Controls closing or inheriting of file descriptors.
623
624 shell: If true, the command will be executed through the shell.
625
626 cwd: Sets the current directory before the child is executed.
627
628 env: Defines the environment variables for the new process.
629
andyclegg7fed7bd2017-10-23 03:01:19 +0100630 text: If true, decode stdin, stdout and stderr using the given encoding
631 (if set) or the system default otherwise.
632
633 universal_newlines: Alias of text, provided for backwards compatibility.
Martin Panter4afdca02016-10-25 22:20:48 +0000634
635 startupinfo and creationflags (Windows only)
636
637 restore_signals (POSIX only)
638
639 start_new_session (POSIX only)
640
641 pass_fds (POSIX only)
642
Martin Panter3dca6242016-10-25 23:41:42 +0000643 encoding and errors: Text mode encoding and error handling to use for
644 file objects stdin, stdout and stderr.
645
Martin Panter4afdca02016-10-25 22:20:48 +0000646 Attributes:
647 stdin, stdout, stderr, pid, returncode
648 """
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200649 _child_created = False # Set here since __del__ checks it
650
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700651 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000652 stdin=None, stdout=None, stderr=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200653 preexec_fn=None, close_fds=True,
andyclegg7fed7bd2017-10-23 03:01:19 +0100654 shell=False, cwd=None, env=None, universal_newlines=None,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000655 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000656 restore_signals=True, start_new_session=False,
andyclegg7fed7bd2017-10-23 03:01:19 +0100657 pass_fds=(), *, encoding=None, errors=None, text=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000658 """Create new Popen instance."""
659 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700660 # Held while anything is calling waitpid before returncode has been
661 # updated to prevent clobbering returncode if wait() or poll() are
662 # called from multiple threads at once. After acquiring the lock,
663 # code must re-check self.returncode to see if another thread just
664 # finished a waitpid() call.
665 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000666
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400667 self._input = None
668 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000669 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700670 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000671 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000672 raise TypeError("bufsize must be an integer")
673
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700674 if _mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000675 if preexec_fn is not None:
676 raise ValueError("preexec_fn is not supported on Windows "
677 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000678 else:
679 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000680 if pass_fds and not close_fds:
681 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
682 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000683 if startupinfo is not None:
684 raise ValueError("startupinfo is only supported on Windows "
685 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000686 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000687 raise ValueError("creationflags is only supported on Windows "
688 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000689
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400690 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000691 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000692 self.stdout = None
693 self.stderr = None
694 self.pid = None
695 self.returncode = None
Steve Dower050acae2016-09-06 20:16:17 -0700696 self.encoding = encoding
697 self.errors = errors
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000698
andyclegg7fed7bd2017-10-23 03:01:19 +0100699 # Validate the combinations of text and universal_newlines
700 if (text is not None and universal_newlines is not None
701 and bool(universal_newlines) != bool(text)):
702 raise SubprocessError('Cannot disambiguate when both text '
703 'and universal_newlines are supplied but '
704 'different. Pass one or the other.')
705
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000706 # Input and output objects. The general principle is like
707 # this:
708 #
709 # Parent Child
710 # ------ -----
711 # p2cwrite ---stdin---> p2cread
712 # c2pread <--stdout--- c2pwrite
713 # errread <--stderr--- errwrite
714 #
715 # On POSIX, the child objects are file descriptors. On
716 # Windows, these are Windows file handles. The parent objects
717 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000718 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000719 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000720
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000721 (p2cread, p2cwrite,
722 c2pread, c2pwrite,
723 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
724
Antoine Pitrouc9982322011-01-04 19:07:07 +0000725 # We wrap OS handles *before* launching the child, otherwise a
726 # quickly terminating child could make our fds unwrappable
727 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000728
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700729 if _mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000730 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000731 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000732 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000733 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000734 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000735 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000736
andyclegg7fed7bd2017-10-23 03:01:19 +0100737 self.text_mode = encoding or errors or text or universal_newlines
Tim Peterse718f612004-10-12 21:51:32 +0000738
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800739 # How long to resume waiting on a child after the first ^C.
740 # There is no right value for this. The purpose is to be polite
741 # yet remain good for interactive users trying to exit a tool.
742 self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber()
743
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700744 self._closed_child_pipe_fds = False
Steve Dower050acae2016-09-06 20:16:17 -0700745
Alexey Izbysheva2670562018-10-20 03:22:31 +0300746 if self.text_mode:
747 if bufsize == 1:
748 line_buffering = True
749 # Use the default buffer size for the underlying binary streams
750 # since they don't support line buffering.
751 bufsize = -1
752 else:
753 line_buffering = False
754
Antoine Pitrouc9982322011-01-04 19:07:07 +0000755 try:
Steve Dower050acae2016-09-06 20:16:17 -0700756 if p2cwrite != -1:
757 self.stdin = io.open(p2cwrite, 'wb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100758 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700759 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
Alexey Izbysheva2670562018-10-20 03:22:31 +0300760 line_buffering=line_buffering,
Steve Dower050acae2016-09-06 20:16:17 -0700761 encoding=encoding, errors=errors)
762 if c2pread != -1:
763 self.stdout = io.open(c2pread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100764 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700765 self.stdout = io.TextIOWrapper(self.stdout,
766 encoding=encoding, errors=errors)
767 if errread != -1:
768 self.stderr = io.open(errread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100769 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700770 self.stderr = io.TextIOWrapper(self.stderr,
771 encoding=encoding, errors=errors)
772
Antoine Pitrouc9982322011-01-04 19:07:07 +0000773 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300774 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000775 startupinfo, creationflags, shell,
776 p2cread, p2cwrite,
777 c2pread, c2pwrite,
778 errread, errwrite,
779 restore_signals, start_new_session)
780 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800781 # Cleanup if the child failed starting.
782 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000783 try:
784 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200785 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800786 pass # Ignore EBADF or other errors.
787
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700788 if not self._closed_child_pipe_fds:
789 to_close = []
790 if stdin == PIPE:
791 to_close.append(p2cread)
792 if stdout == PIPE:
793 to_close.append(c2pwrite)
794 if stderr == PIPE:
795 to_close.append(errwrite)
796 if hasattr(self, '_devnull'):
797 to_close.append(self._devnull)
798 for fd in to_close:
799 try:
Segev Finer4d385172017-08-18 16:18:13 +0300800 if _mswindows and isinstance(fd, Handle):
801 fd.Close()
802 else:
803 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700804 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700805 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800806
Antoine Pitrouc9982322011-01-04 19:07:07 +0000807 raise
808
andyclegg7fed7bd2017-10-23 03:01:19 +0100809 @property
810 def universal_newlines(self):
811 # universal_newlines as retained as an alias of text_mode for API
luzpaza5293b42017-11-05 07:37:50 -0600812 # compatibility. bpo-31756
andyclegg7fed7bd2017-10-23 03:01:19 +0100813 return self.text_mode
814
815 @universal_newlines.setter
816 def universal_newlines(self, universal_newlines):
817 self.text_mode = bool(universal_newlines)
818
Steve Dower050acae2016-09-06 20:16:17 -0700819 def _translate_newlines(self, data, encoding, errors):
820 data = data.decode(encoding, errors)
Andrew Svetlov82860712012-08-19 22:13:41 +0300821 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000822
Brian Curtin79cdb662010-12-03 02:46:02 +0000823 def __enter__(self):
824 return self
825
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800826 def __exit__(self, exc_type, value, traceback):
Brian Curtin79cdb662010-12-03 02:46:02 +0000827 if self.stdout:
828 self.stdout.close()
829 if self.stderr:
830 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200831 try: # Flushing a BufferedWriter may raise an error
832 if self.stdin:
833 self.stdin.close()
834 finally:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800835 if exc_type == KeyboardInterrupt:
836 # https://bugs.python.org/issue25942
837 # In the case of a KeyboardInterrupt we assume the SIGINT
838 # was also already sent to our child processes. We can't
839 # block indefinitely as that is not user friendly.
840 # If we have not already waited a brief amount of time in
841 # an interrupted .wait() or .communicate() call, do so here
842 # for consistency.
843 if self._sigint_wait_secs > 0:
844 try:
845 self._wait(timeout=self._sigint_wait_secs)
846 except TimeoutExpired:
847 pass
848 self._sigint_wait_secs = 0 # Note that this has been done.
849 return # resume the KeyboardInterrupt
850
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200851 # Wait for the process to terminate, to avoid zombies.
852 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000853
Victor Stinner9505b032017-01-06 10:44:44 +0100854 def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200855 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000856 # We didn't get to successfully create a child process.
857 return
Victor Stinner5a48e212016-05-20 12:11:15 +0200858 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800859 # Not reading subprocess exit status creates a zombie process which
Victor Stinnerc206f1e2016-06-14 16:42:59 +0200860 # is only destroyed at the parent python process exit
Victor Stinner9505b032017-01-06 10:44:44 +0100861 _warn("subprocess %s is still running" % self.pid,
862 ResourceWarning, source=self)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000863 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000864 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000865 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000866 # Child is still running, keep us alive until we can wait on it.
867 _active.append(self)
868
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200869 def _get_devnull(self):
870 if not hasattr(self, '_devnull'):
871 self._devnull = os.open(os.devnull, os.O_RDWR)
872 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000873
Victor Stinnera5e881d2015-01-14 17:07:59 +0100874 def _stdin_write(self, input):
875 if input:
876 try:
877 self.stdin.write(input)
878 except BrokenPipeError:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000879 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200880 except OSError as exc:
881 if exc.errno == errno.EINVAL:
882 # bpo-19612, bpo-30418: On Windows, stdin.write() fails
883 # with EINVAL if the child process exited or if the child
884 # process is still running but closed the pipe.
Victor Stinnera5e881d2015-01-14 17:07:59 +0100885 pass
886 else:
887 raise
Victor Stinnerd52aa312017-06-08 17:30:39 +0200888
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000889 try:
890 self.stdin.close()
891 except BrokenPipeError:
892 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200893 except OSError as exc:
894 if exc.errno == errno.EINVAL:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000895 pass
896 else:
897 raise
Victor Stinnera5e881d2015-01-14 17:07:59 +0100898
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400899 def communicate(self, input=None, timeout=None):
Joel Schaerer88031a92017-09-13 21:11:20 +0200900 """Interact with process: Send data to stdin and close it.
901 Read data from stdout and stderr, until end-of-file is
902 reached. Wait for process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +0000903
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400904 The optional "input" argument should be data to be sent to the
andyclegg7fed7bd2017-10-23 03:01:19 +0100905 child process, or None, if no data should be sent to the child.
906 communicate() returns a tuple (stdout, stderr).
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400907
andyclegg7fed7bd2017-10-23 03:01:19 +0100908 By default, all communication is in bytes, and therefore any
909 "input" should be bytes, and the (stdout, stderr) will be bytes.
910 If in text mode (indicated by self.text_mode), any "input" should
911 be a string, and (stdout, stderr) will be strings decoded
912 according to locale encoding, or by "encoding" if set. Text mode
913 is triggered by setting any of text, encoding, errors or
914 universal_newlines.
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400915 """
Peter Astrand23109f02005-03-03 20:28:59 +0000916
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400917 if self._communication_started and input:
918 raise ValueError("Cannot send input after starting communication")
919
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400920 # Optimization: If we are not worried about timeouts, we haven't
921 # started communicating, and we have one or zero pipes, using select()
922 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200923 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400924 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000925 stdout = None
926 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000927 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +0100928 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +0000929 elif self.stdout:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000930 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000931 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000932 elif self.stderr:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000933 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000934 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000935 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200936 else:
937 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +0200938 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +0200939 else:
940 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000941
Victor Stinner7a8d0812011-04-05 13:13:08 +0200942 try:
943 stdout, stderr = self._communicate(input, endtime, timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800944 except KeyboardInterrupt:
945 # https://bugs.python.org/issue25942
946 # See the detailed comment in .wait().
947 if timeout is not None:
948 sigint_timeout = min(self._sigint_wait_secs,
949 self._remaining_time(endtime))
950 else:
951 sigint_timeout = self._sigint_wait_secs
952 self._sigint_wait_secs = 0 # nothing else should wait.
953 try:
954 self._wait(timeout=sigint_timeout)
955 except TimeoutExpired:
956 pass
957 raise # resume the KeyboardInterrupt
958
Victor Stinner7a8d0812011-04-05 13:13:08 +0200959 finally:
960 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400961
Victor Stinner7a8d0812011-04-05 13:13:08 +0200962 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400963
964 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +0000965
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000966
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000967 def poll(self):
Martin Panter4afdca02016-10-25 22:20:48 +0000968 """Check if child process has terminated. Set and return returncode
969 attribute."""
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000970 return self._internal_poll()
971
972
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400973 def _remaining_time(self, endtime):
974 """Convenience for _communicate when computing timeouts."""
975 if endtime is None:
976 return None
977 else:
Victor Stinner949d8c92012-05-30 13:30:32 +0200978 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400979
980
Reid Kleckner2b228f02011-03-16 16:57:54 -0400981 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400982 """Convenience for checking if a timeout has expired."""
983 if endtime is None:
984 return
Victor Stinner949d8c92012-05-30 13:30:32 +0200985 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -0400986 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400987
988
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800989 def wait(self, timeout=None):
990 """Wait for child process to terminate; returns self.returncode."""
991 if timeout is not None:
992 endtime = _time() + timeout
993 try:
994 return self._wait(timeout=timeout)
995 except KeyboardInterrupt:
996 # https://bugs.python.org/issue25942
997 # The first keyboard interrupt waits briefly for the child to
998 # exit under the common assumption that it also received the ^C
999 # generated SIGINT and will exit rapidly.
1000 if timeout is not None:
1001 sigint_timeout = min(self._sigint_wait_secs,
1002 self._remaining_time(endtime))
1003 else:
1004 sigint_timeout = self._sigint_wait_secs
1005 self._sigint_wait_secs = 0 # nothing else should wait.
1006 try:
1007 self._wait(timeout=sigint_timeout)
1008 except TimeoutExpired:
1009 pass
1010 raise # resume the KeyboardInterrupt
1011
1012
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -07001013 if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001014 #
1015 # Windows methods
1016 #
1017 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001018 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001019 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1020 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001021 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001022 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +00001023
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001024 p2cread, p2cwrite = -1, -1
1025 c2pread, c2pwrite = -1, -1
1026 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001027
Peter Astrandd38ddf42005-02-10 08:32:50 +00001028 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001029 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001030 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001031 p2cread, _ = _winapi.CreatePipe(None, 0)
1032 p2cread = Handle(p2cread)
1033 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001034 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001035 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
1036 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001037 elif stdin == DEVNULL:
1038 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001039 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001040 p2cread = msvcrt.get_osfhandle(stdin)
1041 else:
1042 # Assuming file-like object
1043 p2cread = msvcrt.get_osfhandle(stdin.fileno())
1044 p2cread = self._make_inheritable(p2cread)
1045
Peter Astrandd38ddf42005-02-10 08:32:50 +00001046 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001047 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001048 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001049 _, c2pwrite = _winapi.CreatePipe(None, 0)
1050 c2pwrite = Handle(c2pwrite)
1051 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001052 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001053 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
1054 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001055 elif stdout == DEVNULL:
1056 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001057 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001058 c2pwrite = msvcrt.get_osfhandle(stdout)
1059 else:
1060 # Assuming file-like object
1061 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1062 c2pwrite = self._make_inheritable(c2pwrite)
1063
Peter Astrandd38ddf42005-02-10 08:32:50 +00001064 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001065 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001066 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001067 _, errwrite = _winapi.CreatePipe(None, 0)
1068 errwrite = Handle(errwrite)
1069 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001070 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001071 errread, errwrite = _winapi.CreatePipe(None, 0)
1072 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001073 elif stderr == STDOUT:
1074 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001075 elif stderr == DEVNULL:
1076 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001077 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001078 errwrite = msvcrt.get_osfhandle(stderr)
1079 else:
1080 # Assuming file-like object
1081 errwrite = msvcrt.get_osfhandle(stderr.fileno())
1082 errwrite = self._make_inheritable(errwrite)
1083
1084 return (p2cread, p2cwrite,
1085 c2pread, c2pwrite,
1086 errread, errwrite)
1087
1088
1089 def _make_inheritable(self, handle):
1090 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001091 h = _winapi.DuplicateHandle(
1092 _winapi.GetCurrentProcess(), handle,
1093 _winapi.GetCurrentProcess(), 0, 1,
1094 _winapi.DUPLICATE_SAME_ACCESS)
1095 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001096
1097
Segev Finerb2a60832017-12-18 11:28:19 +02001098 def _filter_handle_list(self, handle_list):
1099 """Filter out console handles that can't be used
1100 in lpAttributeList["handle_list"] and make sure the list
1101 isn't empty. This also removes duplicate handles."""
1102 # An handle with it's lowest two bits set might be a special console
1103 # handle that if passed in lpAttributeList["handle_list"], will
1104 # cause it to fail.
1105 return list({handle for handle in handle_list
1106 if handle & 0x3 != 0x3
1107 or _winapi.GetFileType(handle) !=
1108 _winapi.FILE_TYPE_CHAR})
1109
1110
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001111 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001112 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001113 startupinfo, creationflags, shell,
1114 p2cread, p2cwrite,
1115 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001116 errread, errwrite,
1117 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001118 """Execute program (MS Windows version)"""
1119
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001120 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001121
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001122 if not isinstance(args, str):
Serhiy Storchakabe50a7b2018-02-28 01:03:46 +02001123 args = list2cmdline(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001124
Peter Astrandc1d65362004-11-07 14:30:34 +00001125 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001126 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001127 startupinfo = STARTUPINFO()
Victor Stinner483422f2018-07-05 22:54:17 +02001128 else:
1129 # bpo-34044: Copy STARTUPINFO since it is modified above,
1130 # so the caller can reuse it multiple times.
1131 startupinfo = startupinfo.copy()
Segev Finerb2a60832017-12-18 11:28:19 +02001132
1133 use_std_handles = -1 not in (p2cread, c2pwrite, errwrite)
1134 if use_std_handles:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001135 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001136 startupinfo.hStdInput = p2cread
1137 startupinfo.hStdOutput = c2pwrite
1138 startupinfo.hStdError = errwrite
1139
Segev Finerb2a60832017-12-18 11:28:19 +02001140 attribute_list = startupinfo.lpAttributeList
1141 have_handle_list = bool(attribute_list and
1142 "handle_list" in attribute_list and
1143 attribute_list["handle_list"])
1144
1145 # If we were given an handle_list or need to create one
1146 if have_handle_list or (use_std_handles and close_fds):
1147 if attribute_list is None:
1148 attribute_list = startupinfo.lpAttributeList = {}
1149 handle_list = attribute_list["handle_list"] = \
1150 list(attribute_list.get("handle_list", []))
1151
1152 if use_std_handles:
1153 handle_list += [int(p2cread), int(c2pwrite), int(errwrite)]
1154
1155 handle_list[:] = self._filter_handle_list(handle_list)
1156
1157 if handle_list:
1158 if not close_fds:
1159 warnings.warn("startupinfo.lpAttributeList['handle_list'] "
1160 "overriding close_fds", RuntimeWarning)
1161
1162 # When using the handle_list we always request to inherit
1163 # handles but the only handles that will be inherited are
1164 # the ones in the handle_list
1165 close_fds = False
1166
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001167 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001168 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1169 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001170 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001171 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001172
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001173 # Start the process
1174 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001175 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001176 # no special security
1177 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001178 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001179 creationflags,
1180 env,
Benjamin Petersoncb90f262017-03-02 00:03:41 -08001181 os.fspath(cwd) if cwd is not None else None,
Tim Peterse8374a52004-10-13 03:15:00 +00001182 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001183 finally:
1184 # Child is launched. Close the parent's copy of those pipe
1185 # handles that only the child should have open. You need
1186 # to make sure that no handles to the write end of the
1187 # output pipe are maintained in this process or else the
1188 # pipe will not close when the child process exits and the
1189 # ReadFile will hang.
1190 if p2cread != -1:
1191 p2cread.Close()
1192 if c2pwrite != -1:
1193 c2pwrite.Close()
1194 if errwrite != -1:
1195 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001196 if hasattr(self, '_devnull'):
1197 os.close(self._devnull)
Segev Finer4d385172017-08-18 16:18:13 +03001198 # Prevent a double close of these handles/fds from __init__
1199 # on error.
1200 self._closed_child_pipe_fds = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001201
1202 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001203 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001204 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001205 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001206 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001207
Brett Cannon84df1e62010-05-14 00:33:40 +00001208 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001209 _WaitForSingleObject=_winapi.WaitForSingleObject,
1210 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1211 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001212 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001213 attribute.
1214
1215 This method is called by __del__, so it can only refer to objects
1216 in its local scope.
1217
1218 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001219 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001220 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1221 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001222 return self.returncode
1223
1224
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001225 def _wait(self, timeout):
1226 """Internal implementation of wait() on Windows."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001227 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001228 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001229 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001230 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001231 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001232 # API note: Returns immediately if timeout_millis == 0.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001233 result = _winapi.WaitForSingleObject(self._handle,
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001234 timeout_millis)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001235 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001236 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001237 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001238 return self.returncode
1239
1240
1241 def _readerthread(self, fh, buffer):
1242 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001243 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001244
1245
Reid Kleckner2b228f02011-03-16 16:57:54 -04001246 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001247 # Start reader threads feeding into a list hanging off of this
1248 # object, unless they've already been started.
1249 if self.stdout and not hasattr(self, "_stdout_buff"):
1250 self._stdout_buff = []
1251 self.stdout_thread = \
1252 threading.Thread(target=self._readerthread,
1253 args=(self.stdout, self._stdout_buff))
1254 self.stdout_thread.daemon = True
1255 self.stdout_thread.start()
1256 if self.stderr and not hasattr(self, "_stderr_buff"):
1257 self._stderr_buff = []
1258 self.stderr_thread = \
1259 threading.Thread(target=self._readerthread,
1260 args=(self.stderr, self._stderr_buff))
1261 self.stderr_thread.daemon = True
1262 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001263
1264 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001265 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001266
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001267 # Wait for the reader threads, or time out. If we time out, the
1268 # threads remain reading and the fds left open in case the user
1269 # calls communicate again.
1270 if self.stdout is not None:
1271 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001272 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001273 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001274 if self.stderr is not None:
1275 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001276 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001277 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001278
1279 # Collect the output from and close both pipes, now that we know
1280 # both have been read successfully.
1281 stdout = None
1282 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001283 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001284 stdout = self._stdout_buff
1285 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001286 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001287 stderr = self._stderr_buff
1288 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001289
1290 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001291 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001292 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001293 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001294 stderr = stderr[0]
1295
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001296 return (stdout, stderr)
1297
Christian Heimesa342c012008-04-20 21:01:16 +00001298 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001299 """Send a signal to the process."""
1300 # Don't signal a process that we know has already died.
1301 if self.returncode is not None:
1302 return
Christian Heimesa342c012008-04-20 21:01:16 +00001303 if sig == signal.SIGTERM:
1304 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001305 elif sig == signal.CTRL_C_EVENT:
1306 os.kill(self.pid, signal.CTRL_C_EVENT)
1307 elif sig == signal.CTRL_BREAK_EVENT:
1308 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001309 else:
Brian Curtin19651362010-09-07 13:24:38 +00001310 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001311
1312 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001313 """Terminates the process."""
1314 # Don't terminate a process that we know has already died.
1315 if self.returncode is not None:
1316 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001317 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001318 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001319 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001320 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1321 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001322 rc = _winapi.GetExitCodeProcess(self._handle)
1323 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001324 raise
1325 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001326
1327 kill = terminate
1328
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001329 else:
1330 #
1331 # POSIX methods
1332 #
1333 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001334 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001335 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1336 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001337 p2cread, p2cwrite = -1, -1
1338 c2pread, c2pwrite = -1, -1
1339 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001340
Peter Astrandd38ddf42005-02-10 08:32:50 +00001341 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001342 pass
1343 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001344 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001345 elif stdin == DEVNULL:
1346 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001347 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001348 p2cread = stdin
1349 else:
1350 # Assuming file-like object
1351 p2cread = stdin.fileno()
1352
Peter Astrandd38ddf42005-02-10 08:32:50 +00001353 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001354 pass
1355 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001356 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001357 elif stdout == DEVNULL:
1358 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001359 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001360 c2pwrite = stdout
1361 else:
1362 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001363 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001364
Peter Astrandd38ddf42005-02-10 08:32:50 +00001365 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001366 pass
1367 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001368 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001369 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001370 if c2pwrite != -1:
1371 errwrite = c2pwrite
1372 else: # child's stdout is not set, use parent's stdout
1373 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001374 elif stderr == DEVNULL:
1375 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001376 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001377 errwrite = stderr
1378 else:
1379 # Assuming file-like object
1380 errwrite = stderr.fileno()
1381
1382 return (p2cread, p2cwrite,
1383 c2pread, c2pwrite,
1384 errread, errwrite)
1385
1386
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001387 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001388 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001389 startupinfo, creationflags, shell,
1390 p2cread, p2cwrite,
1391 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001392 errread, errwrite,
1393 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001394 """Execute program (POSIX version)"""
1395
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001396 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001397 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001398 else:
Serhiy Storchakabe50a7b2018-02-28 01:03:46 +02001399 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001400
1401 if shell:
Xavier de Gayeb35fc622016-12-13 16:32:21 +01001402 # On Android the default shell is at '/system/bin/sh'.
1403 unix_shell = ('/system/bin/sh' if
1404 hasattr(sys, 'getandroidapilevel') else '/bin/sh')
1405 args = [unix_shell, "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001406 if executable:
1407 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001408
Peter Astrandd38ddf42005-02-10 08:32:50 +00001409 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001410 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001411 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001412
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001413 # For transferring possible exec failure from child to parent.
1414 # Data format: "exception name:hex errno:description"
1415 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001416 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001417 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1418 low_fds_to_close = []
1419 while errpipe_write < 3:
1420 low_fds_to_close.append(errpipe_write)
1421 errpipe_write = os.dup(errpipe_write)
1422 for low_fd in low_fds_to_close:
1423 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001424 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001425 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001426 # We must avoid complex work that could involve
1427 # malloc or free in the child process to avoid
1428 # potential deadlocks, thus we do all this here.
1429 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001430
Victor Stinner372b8382011-06-21 17:24:21 +02001431 if env is not None:
Serhiy Storchakad174d242017-06-23 19:39:27 +03001432 env_list = []
1433 for k, v in env.items():
1434 k = os.fsencode(k)
1435 if b'=' in k:
1436 raise ValueError("illegal environment variable name")
1437 env_list.append(k + b'=' + os.fsencode(v))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001438 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001439 env_list = None # Use execv instead of execve.
1440 executable = os.fsencode(executable)
1441 if os.path.dirname(executable):
1442 executable_list = (executable,)
1443 else:
1444 # This matches the behavior of os._execvpe().
1445 executable_list = tuple(
1446 os.path.join(os.fsencode(dir), executable)
1447 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001448 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001449 fds_to_keep.add(errpipe_write)
1450 self.pid = _posixsubprocess.fork_exec(
1451 args, executable_list,
Serhiy Storchaka66bffd12017-04-19 21:12:46 +03001452 close_fds, tuple(sorted(map(int, fds_to_keep))),
1453 cwd, env_list,
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001454 p2cread, p2cwrite, c2pread, c2pwrite,
1455 errread, errwrite,
1456 errpipe_read, errpipe_write,
1457 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001458 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001459 finally:
1460 # be sure the FD is closed no matter what
1461 os.close(errpipe_write)
1462
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001463 # self._devnull is not always defined.
1464 devnull_fd = getattr(self, '_devnull', None)
1465 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001466 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001467 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001468 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001469 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001470 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001471 if devnull_fd is not None:
1472 os.close(devnull_fd)
1473 # Prevent a double close of these fds from __init__ on error.
1474 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001475
1476 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001477 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001478 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001479 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001480 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001481 errpipe_data += part
1482 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001483 break
Facundo Batista10706e22009-06-19 20:34:30 +00001484 finally:
1485 # be sure the FD is closed no matter what
1486 os.close(errpipe_read)
1487
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001488 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001489 try:
Victor Stinnera58e2c52016-05-20 12:08:12 +02001490 pid, sts = os.waitpid(self.pid, 0)
1491 if pid == self.pid:
1492 self._handle_exitstatus(sts)
1493 else:
1494 self.returncode = sys.maxsize
Victor Stinnera5e881d2015-01-14 17:07:59 +01001495 except ChildProcessError:
1496 pass
Victor Stinnera58e2c52016-05-20 12:08:12 +02001497
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001498 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001499 exception_name, hex_errno, err_msg = (
1500 errpipe_data.split(b':', 2))
Ammar Askar3fc499b2017-09-06 02:41:30 -04001501 # The encoding here should match the encoding
1502 # written in by the subprocess implementations
1503 # like _posixsubprocess
1504 err_msg = err_msg.decode()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001505 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001506 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001507 hex_errno = b'0'
Ammar Askar3fc499b2017-09-06 02:41:30 -04001508 err_msg = 'Bad exception data from child: {!r}'.format(
1509 bytes(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001510 child_exception_type = getattr(
1511 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001512 SubprocessError)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001513 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001514 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001515 child_exec_never_called = (err_msg == "noexec")
1516 if child_exec_never_called:
1517 err_msg = ""
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001518 # The error must be from chdir(cwd).
1519 err_filename = cwd
1520 else:
1521 err_filename = orig_executable
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001522 if errno_num != 0:
1523 err_msg = os.strerror(errno_num)
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001524 raise child_exception_type(errno_num, err_msg, err_filename)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001525 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001526
1527
Brett Cannon84df1e62010-05-14 00:33:40 +00001528 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1529 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001530 _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
1531 _WSTOPSIG=os.WSTOPSIG):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001532 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001533 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001534 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001535 if _WIFSIGNALED(sts):
1536 self.returncode = -_WTERMSIG(sts)
1537 elif _WIFEXITED(sts):
1538 self.returncode = _WEXITSTATUS(sts)
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001539 elif _WIFSTOPPED(sts):
1540 self.returncode = -_WSTOPSIG(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001541 else:
1542 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001543 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001544
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001545
Brett Cannon84df1e62010-05-14 00:33:40 +00001546 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001547 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001548 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001549 attribute.
1550
1551 This method is called by __del__, so it cannot reference anything
1552 outside of the local scope (nor can any methods it calls).
1553
1554 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001555 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001556 if not self._waitpid_lock.acquire(False):
1557 # Something else is busy calling waitpid. Don't allow two
1558 # at once. We know nothing yet.
1559 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001560 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001561 if self.returncode is not None:
1562 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001563 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001564 if pid == self.pid:
1565 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001566 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001567 if _deadstate is not None:
1568 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001569 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001570 # This happens if SIGCLD is set to be ignored or
1571 # waiting for child processes has otherwise been
1572 # disabled for our process. This child is dead, we
1573 # can't get the status.
1574 # http://bugs.python.org/issue15756
1575 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001576 finally:
1577 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001578 return self.returncode
1579
1580
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001581 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001582 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001583 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001584 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001585 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001586 # This happens if SIGCLD is set to be ignored or waiting
1587 # for child processes has otherwise been disabled for our
1588 # process. This child is dead, we can't get the status.
1589 pid = self.pid
1590 sts = 0
1591 return (pid, sts)
1592
1593
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001594 def _wait(self, timeout):
1595 """Internal implementation of wait() on POSIX."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001596 if self.returncode is not None:
1597 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001598
Gregory P. Smith82604e02016-11-20 16:31:07 -08001599 if timeout is not None:
1600 endtime = _time() + timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001601 # Enter a busy loop if we have a timeout. This busy loop was
1602 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1603 delay = 0.0005 # 500 us -> initial delay of 1 ms
1604 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001605 if self._waitpid_lock.acquire(False):
1606 try:
1607 if self.returncode is not None:
1608 break # Another thread waited.
1609 (pid, sts) = self._try_wait(os.WNOHANG)
1610 assert pid == self.pid or pid == 0
1611 if pid == self.pid:
1612 self._handle_exitstatus(sts)
1613 break
1614 finally:
1615 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001616 remaining = self._remaining_time(endtime)
1617 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001618 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001619 delay = min(delay * 2, remaining, .05)
1620 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001621 else:
1622 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001623 with self._waitpid_lock:
1624 if self.returncode is not None:
1625 break # Another thread waited.
1626 (pid, sts) = self._try_wait(0)
1627 # Check the pid and loop as waitpid has been known to
1628 # return 0 even without WNOHANG in odd situations.
1629 # http://bugs.python.org/issue14396.
1630 if pid == self.pid:
1631 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001632 return self.returncode
1633
1634
Reid Kleckner2b228f02011-03-16 16:57:54 -04001635 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001636 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001637 # Flush stdio buffer. This might block, if the user has
1638 # been writing to .stdin in an uncontrolled fashion.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001639 try:
1640 self.stdin.flush()
1641 except BrokenPipeError:
1642 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001643 if not input:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001644 try:
1645 self.stdin.close()
1646 except BrokenPipeError:
1647 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001648
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001649 stdout = None
1650 stderr = None
1651
1652 # Only create this mapping if we haven't already.
1653 if not self._communication_started:
1654 self._fileobj2output = {}
1655 if self.stdout:
1656 self._fileobj2output[self.stdout] = []
1657 if self.stderr:
1658 self._fileobj2output[self.stderr] = []
1659
1660 if self.stdout:
1661 stdout = self._fileobj2output[self.stdout]
1662 if self.stderr:
1663 stderr = self._fileobj2output[self.stderr]
1664
1665 self._save_input(input)
1666
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001667 if self._input:
1668 input_view = memoryview(self._input)
1669
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001670 with _PopenSelector() as selector:
1671 if self.stdin and input:
1672 selector.register(self.stdin, selectors.EVENT_WRITE)
1673 if self.stdout:
1674 selector.register(self.stdout, selectors.EVENT_READ)
1675 if self.stderr:
1676 selector.register(self.stderr, selectors.EVENT_READ)
1677
1678 while selector.get_map():
1679 timeout = self._remaining_time(endtime)
1680 if timeout is not None and timeout < 0:
1681 raise TimeoutExpired(self.args, orig_timeout)
1682
1683 ready = selector.select(timeout)
1684 self._check_timeout(endtime, orig_timeout)
1685
1686 # XXX Rewrite these to use non-blocking I/O on the file
1687 # objects; they are no longer using C stdio!
1688
1689 for key, events in ready:
1690 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001691 chunk = input_view[self._input_offset :
1692 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001693 try:
1694 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001695 except BrokenPipeError:
1696 selector.unregister(key.fileobj)
1697 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001698 else:
1699 if self._input_offset >= len(self._input):
1700 selector.unregister(key.fileobj)
1701 key.fileobj.close()
1702 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001703 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001704 if not data:
1705 selector.unregister(key.fileobj)
1706 key.fileobj.close()
1707 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001708
1709 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001710
1711 # All data exchanged. Translate lists into strings.
1712 if stdout is not None:
1713 stdout = b''.join(stdout)
1714 if stderr is not None:
1715 stderr = b''.join(stderr)
1716
1717 # Translate newlines, if requested.
1718 # This also turns bytes into strings.
andyclegg7fed7bd2017-10-23 03:01:19 +01001719 if self.text_mode:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001720 if stdout is not None:
1721 stdout = self._translate_newlines(stdout,
Steve Dower050acae2016-09-06 20:16:17 -07001722 self.stdout.encoding,
1723 self.stdout.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001724 if stderr is not None:
1725 stderr = self._translate_newlines(stderr,
Steve Dower050acae2016-09-06 20:16:17 -07001726 self.stderr.encoding,
1727 self.stderr.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001728
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001729 return (stdout, stderr)
1730
1731
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001732 def _save_input(self, input):
1733 # This method is called from the _communicate_with_*() methods
1734 # so that if we time out while communicating, we can continue
1735 # sending input if we retry.
1736 if self.stdin and self._input is None:
1737 self._input_offset = 0
1738 self._input = input
andyclegg7fed7bd2017-10-23 03:01:19 +01001739 if input is not None and self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -07001740 self._input = self._input.encode(self.stdin.encoding,
1741 self.stdin.errors)
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001742
1743
Christian Heimesa342c012008-04-20 21:01:16 +00001744 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001745 """Send a signal to the process."""
1746 # Skip signalling a process that we know has already died.
1747 if self.returncode is None:
1748 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00001749
1750 def terminate(self):
1751 """Terminate the process with SIGTERM
1752 """
1753 self.send_signal(signal.SIGTERM)
1754
1755 def kill(self):
1756 """Kill the process with SIGKILL
1757 """
1758 self.send_signal(signal.SIGKILL)