blob: c827113a933fd767563de0aec8d9ae32f98a6be8 [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
Antoine Pitrouc9982322011-01-04 19:07:07 +0000746 try:
Steve Dower050acae2016-09-06 20:16:17 -0700747 if p2cwrite != -1:
748 self.stdin = io.open(p2cwrite, 'wb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100749 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700750 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
751 line_buffering=(bufsize == 1),
752 encoding=encoding, errors=errors)
753 if c2pread != -1:
754 self.stdout = io.open(c2pread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100755 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700756 self.stdout = io.TextIOWrapper(self.stdout,
757 encoding=encoding, errors=errors)
758 if errread != -1:
759 self.stderr = io.open(errread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100760 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700761 self.stderr = io.TextIOWrapper(self.stderr,
762 encoding=encoding, errors=errors)
763
Antoine Pitrouc9982322011-01-04 19:07:07 +0000764 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300765 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000766 startupinfo, creationflags, shell,
767 p2cread, p2cwrite,
768 c2pread, c2pwrite,
769 errread, errwrite,
770 restore_signals, start_new_session)
771 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800772 # Cleanup if the child failed starting.
773 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000774 try:
775 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200776 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800777 pass # Ignore EBADF or other errors.
778
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700779 if not self._closed_child_pipe_fds:
780 to_close = []
781 if stdin == PIPE:
782 to_close.append(p2cread)
783 if stdout == PIPE:
784 to_close.append(c2pwrite)
785 if stderr == PIPE:
786 to_close.append(errwrite)
787 if hasattr(self, '_devnull'):
788 to_close.append(self._devnull)
789 for fd in to_close:
790 try:
Segev Finer4d385172017-08-18 16:18:13 +0300791 if _mswindows and isinstance(fd, Handle):
792 fd.Close()
793 else:
794 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700795 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700796 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800797
Antoine Pitrouc9982322011-01-04 19:07:07 +0000798 raise
799
andyclegg7fed7bd2017-10-23 03:01:19 +0100800 @property
801 def universal_newlines(self):
802 # universal_newlines as retained as an alias of text_mode for API
luzpaza5293b42017-11-05 07:37:50 -0600803 # compatibility. bpo-31756
andyclegg7fed7bd2017-10-23 03:01:19 +0100804 return self.text_mode
805
806 @universal_newlines.setter
807 def universal_newlines(self, universal_newlines):
808 self.text_mode = bool(universal_newlines)
809
Steve Dower050acae2016-09-06 20:16:17 -0700810 def _translate_newlines(self, data, encoding, errors):
811 data = data.decode(encoding, errors)
Andrew Svetlov82860712012-08-19 22:13:41 +0300812 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000813
Brian Curtin79cdb662010-12-03 02:46:02 +0000814 def __enter__(self):
815 return self
816
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800817 def __exit__(self, exc_type, value, traceback):
Brian Curtin79cdb662010-12-03 02:46:02 +0000818 if self.stdout:
819 self.stdout.close()
820 if self.stderr:
821 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200822 try: # Flushing a BufferedWriter may raise an error
823 if self.stdin:
824 self.stdin.close()
825 finally:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800826 if exc_type == KeyboardInterrupt:
827 # https://bugs.python.org/issue25942
828 # In the case of a KeyboardInterrupt we assume the SIGINT
829 # was also already sent to our child processes. We can't
830 # block indefinitely as that is not user friendly.
831 # If we have not already waited a brief amount of time in
832 # an interrupted .wait() or .communicate() call, do so here
833 # for consistency.
834 if self._sigint_wait_secs > 0:
835 try:
836 self._wait(timeout=self._sigint_wait_secs)
837 except TimeoutExpired:
838 pass
839 self._sigint_wait_secs = 0 # Note that this has been done.
840 return # resume the KeyboardInterrupt
841
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200842 # Wait for the process to terminate, to avoid zombies.
843 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000844
Victor Stinner9505b032017-01-06 10:44:44 +0100845 def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200846 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000847 # We didn't get to successfully create a child process.
848 return
Victor Stinner5a48e212016-05-20 12:11:15 +0200849 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800850 # Not reading subprocess exit status creates a zombie process which
Victor Stinnerc206f1e2016-06-14 16:42:59 +0200851 # is only destroyed at the parent python process exit
Victor Stinner9505b032017-01-06 10:44:44 +0100852 _warn("subprocess %s is still running" % self.pid,
853 ResourceWarning, source=self)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000854 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000855 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000856 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000857 # Child is still running, keep us alive until we can wait on it.
858 _active.append(self)
859
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200860 def _get_devnull(self):
861 if not hasattr(self, '_devnull'):
862 self._devnull = os.open(os.devnull, os.O_RDWR)
863 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000864
Victor Stinnera5e881d2015-01-14 17:07:59 +0100865 def _stdin_write(self, input):
866 if input:
867 try:
868 self.stdin.write(input)
869 except BrokenPipeError:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000870 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200871 except OSError as exc:
872 if exc.errno == errno.EINVAL:
873 # bpo-19612, bpo-30418: On Windows, stdin.write() fails
874 # with EINVAL if the child process exited or if the child
875 # process is still running but closed the pipe.
Victor Stinnera5e881d2015-01-14 17:07:59 +0100876 pass
877 else:
878 raise
Victor Stinnerd52aa312017-06-08 17:30:39 +0200879
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000880 try:
881 self.stdin.close()
882 except BrokenPipeError:
883 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200884 except OSError as exc:
885 if exc.errno == errno.EINVAL:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000886 pass
887 else:
888 raise
Victor Stinnera5e881d2015-01-14 17:07:59 +0100889
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400890 def communicate(self, input=None, timeout=None):
Joel Schaerer88031a92017-09-13 21:11:20 +0200891 """Interact with process: Send data to stdin and close it.
892 Read data from stdout and stderr, until end-of-file is
893 reached. Wait for process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +0000894
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400895 The optional "input" argument should be data to be sent to the
andyclegg7fed7bd2017-10-23 03:01:19 +0100896 child process, or None, if no data should be sent to the child.
897 communicate() returns a tuple (stdout, stderr).
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400898
andyclegg7fed7bd2017-10-23 03:01:19 +0100899 By default, all communication is in bytes, and therefore any
900 "input" should be bytes, and the (stdout, stderr) will be bytes.
901 If in text mode (indicated by self.text_mode), any "input" should
902 be a string, and (stdout, stderr) will be strings decoded
903 according to locale encoding, or by "encoding" if set. Text mode
904 is triggered by setting any of text, encoding, errors or
905 universal_newlines.
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400906 """
Peter Astrand23109f02005-03-03 20:28:59 +0000907
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400908 if self._communication_started and input:
909 raise ValueError("Cannot send input after starting communication")
910
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400911 # Optimization: If we are not worried about timeouts, we haven't
912 # started communicating, and we have one or zero pipes, using select()
913 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200914 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400915 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000916 stdout = None
917 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000918 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +0100919 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +0000920 elif self.stdout:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000921 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000922 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000923 elif self.stderr:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000924 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000925 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000926 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200927 else:
928 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +0200929 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +0200930 else:
931 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000932
Victor Stinner7a8d0812011-04-05 13:13:08 +0200933 try:
934 stdout, stderr = self._communicate(input, endtime, timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800935 except KeyboardInterrupt:
936 # https://bugs.python.org/issue25942
937 # See the detailed comment in .wait().
938 if timeout is not None:
939 sigint_timeout = min(self._sigint_wait_secs,
940 self._remaining_time(endtime))
941 else:
942 sigint_timeout = self._sigint_wait_secs
943 self._sigint_wait_secs = 0 # nothing else should wait.
944 try:
945 self._wait(timeout=sigint_timeout)
946 except TimeoutExpired:
947 pass
948 raise # resume the KeyboardInterrupt
949
Victor Stinner7a8d0812011-04-05 13:13:08 +0200950 finally:
951 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400952
Victor Stinner7a8d0812011-04-05 13:13:08 +0200953 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400954
955 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +0000956
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000957
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000958 def poll(self):
Martin Panter4afdca02016-10-25 22:20:48 +0000959 """Check if child process has terminated. Set and return returncode
960 attribute."""
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000961 return self._internal_poll()
962
963
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400964 def _remaining_time(self, endtime):
965 """Convenience for _communicate when computing timeouts."""
966 if endtime is None:
967 return None
968 else:
Victor Stinner949d8c92012-05-30 13:30:32 +0200969 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400970
971
Reid Kleckner2b228f02011-03-16 16:57:54 -0400972 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400973 """Convenience for checking if a timeout has expired."""
974 if endtime is None:
975 return
Victor Stinner949d8c92012-05-30 13:30:32 +0200976 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -0400977 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400978
979
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800980 def wait(self, timeout=None):
981 """Wait for child process to terminate; returns self.returncode."""
982 if timeout is not None:
983 endtime = _time() + timeout
984 try:
985 return self._wait(timeout=timeout)
986 except KeyboardInterrupt:
987 # https://bugs.python.org/issue25942
988 # The first keyboard interrupt waits briefly for the child to
989 # exit under the common assumption that it also received the ^C
990 # generated SIGINT and will exit rapidly.
991 if timeout is not None:
992 sigint_timeout = min(self._sigint_wait_secs,
993 self._remaining_time(endtime))
994 else:
995 sigint_timeout = self._sigint_wait_secs
996 self._sigint_wait_secs = 0 # nothing else should wait.
997 try:
998 self._wait(timeout=sigint_timeout)
999 except TimeoutExpired:
1000 pass
1001 raise # resume the KeyboardInterrupt
1002
1003
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -07001004 if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001005 #
1006 # Windows methods
1007 #
1008 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001009 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001010 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1011 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001012 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001013 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +00001014
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001015 p2cread, p2cwrite = -1, -1
1016 c2pread, c2pwrite = -1, -1
1017 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001018
Peter Astrandd38ddf42005-02-10 08:32:50 +00001019 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001020 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001021 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001022 p2cread, _ = _winapi.CreatePipe(None, 0)
1023 p2cread = Handle(p2cread)
1024 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001025 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001026 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
1027 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001028 elif stdin == DEVNULL:
1029 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001030 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001031 p2cread = msvcrt.get_osfhandle(stdin)
1032 else:
1033 # Assuming file-like object
1034 p2cread = msvcrt.get_osfhandle(stdin.fileno())
1035 p2cread = self._make_inheritable(p2cread)
1036
Peter Astrandd38ddf42005-02-10 08:32:50 +00001037 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001038 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001039 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001040 _, c2pwrite = _winapi.CreatePipe(None, 0)
1041 c2pwrite = Handle(c2pwrite)
1042 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001043 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001044 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
1045 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001046 elif stdout == DEVNULL:
1047 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001048 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001049 c2pwrite = msvcrt.get_osfhandle(stdout)
1050 else:
1051 # Assuming file-like object
1052 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1053 c2pwrite = self._make_inheritable(c2pwrite)
1054
Peter Astrandd38ddf42005-02-10 08:32:50 +00001055 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001056 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001057 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001058 _, errwrite = _winapi.CreatePipe(None, 0)
1059 errwrite = Handle(errwrite)
1060 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001061 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001062 errread, errwrite = _winapi.CreatePipe(None, 0)
1063 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001064 elif stderr == STDOUT:
1065 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001066 elif stderr == DEVNULL:
1067 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001068 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001069 errwrite = msvcrt.get_osfhandle(stderr)
1070 else:
1071 # Assuming file-like object
1072 errwrite = msvcrt.get_osfhandle(stderr.fileno())
1073 errwrite = self._make_inheritable(errwrite)
1074
1075 return (p2cread, p2cwrite,
1076 c2pread, c2pwrite,
1077 errread, errwrite)
1078
1079
1080 def _make_inheritable(self, handle):
1081 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001082 h = _winapi.DuplicateHandle(
1083 _winapi.GetCurrentProcess(), handle,
1084 _winapi.GetCurrentProcess(), 0, 1,
1085 _winapi.DUPLICATE_SAME_ACCESS)
1086 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001087
1088
Segev Finerb2a60832017-12-18 11:28:19 +02001089 def _filter_handle_list(self, handle_list):
1090 """Filter out console handles that can't be used
1091 in lpAttributeList["handle_list"] and make sure the list
1092 isn't empty. This also removes duplicate handles."""
1093 # An handle with it's lowest two bits set might be a special console
1094 # handle that if passed in lpAttributeList["handle_list"], will
1095 # cause it to fail.
1096 return list({handle for handle in handle_list
1097 if handle & 0x3 != 0x3
1098 or _winapi.GetFileType(handle) !=
1099 _winapi.FILE_TYPE_CHAR})
1100
1101
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001102 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001103 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001104 startupinfo, creationflags, shell,
1105 p2cread, p2cwrite,
1106 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001107 errread, errwrite,
1108 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001109 """Execute program (MS Windows version)"""
1110
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001111 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001112
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001113 if not isinstance(args, str):
Serhiy Storchakabe50a7b2018-02-28 01:03:46 +02001114 args = list2cmdline(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001115
Peter Astrandc1d65362004-11-07 14:30:34 +00001116 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001117 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001118 startupinfo = STARTUPINFO()
Victor Stinner483422f2018-07-05 22:54:17 +02001119 else:
1120 # bpo-34044: Copy STARTUPINFO since it is modified above,
1121 # so the caller can reuse it multiple times.
1122 startupinfo = startupinfo.copy()
Segev Finerb2a60832017-12-18 11:28:19 +02001123
1124 use_std_handles = -1 not in (p2cread, c2pwrite, errwrite)
1125 if use_std_handles:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001126 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001127 startupinfo.hStdInput = p2cread
1128 startupinfo.hStdOutput = c2pwrite
1129 startupinfo.hStdError = errwrite
1130
Segev Finerb2a60832017-12-18 11:28:19 +02001131 attribute_list = startupinfo.lpAttributeList
1132 have_handle_list = bool(attribute_list and
1133 "handle_list" in attribute_list and
1134 attribute_list["handle_list"])
1135
1136 # If we were given an handle_list or need to create one
1137 if have_handle_list or (use_std_handles and close_fds):
1138 if attribute_list is None:
1139 attribute_list = startupinfo.lpAttributeList = {}
1140 handle_list = attribute_list["handle_list"] = \
1141 list(attribute_list.get("handle_list", []))
1142
1143 if use_std_handles:
1144 handle_list += [int(p2cread), int(c2pwrite), int(errwrite)]
1145
1146 handle_list[:] = self._filter_handle_list(handle_list)
1147
1148 if handle_list:
1149 if not close_fds:
1150 warnings.warn("startupinfo.lpAttributeList['handle_list'] "
1151 "overriding close_fds", RuntimeWarning)
1152
1153 # When using the handle_list we always request to inherit
1154 # handles but the only handles that will be inherited are
1155 # the ones in the handle_list
1156 close_fds = False
1157
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001158 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001159 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1160 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001161 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001162 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001163
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001164 # Start the process
1165 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001166 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001167 # no special security
1168 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001169 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001170 creationflags,
1171 env,
Benjamin Petersoncb90f262017-03-02 00:03:41 -08001172 os.fspath(cwd) if cwd is not None else None,
Tim Peterse8374a52004-10-13 03:15:00 +00001173 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001174 finally:
1175 # Child is launched. Close the parent's copy of those pipe
1176 # handles that only the child should have open. You need
1177 # to make sure that no handles to the write end of the
1178 # output pipe are maintained in this process or else the
1179 # pipe will not close when the child process exits and the
1180 # ReadFile will hang.
1181 if p2cread != -1:
1182 p2cread.Close()
1183 if c2pwrite != -1:
1184 c2pwrite.Close()
1185 if errwrite != -1:
1186 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001187 if hasattr(self, '_devnull'):
1188 os.close(self._devnull)
Segev Finer4d385172017-08-18 16:18:13 +03001189 # Prevent a double close of these handles/fds from __init__
1190 # on error.
1191 self._closed_child_pipe_fds = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001192
1193 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001194 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001195 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001196 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001197 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001198
Brett Cannon84df1e62010-05-14 00:33:40 +00001199 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001200 _WaitForSingleObject=_winapi.WaitForSingleObject,
1201 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1202 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001203 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001204 attribute.
1205
1206 This method is called by __del__, so it can only refer to objects
1207 in its local scope.
1208
1209 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001210 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001211 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1212 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001213 return self.returncode
1214
1215
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001216 def _wait(self, timeout):
1217 """Internal implementation of wait() on Windows."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001218 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001219 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001220 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001221 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001222 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001223 # API note: Returns immediately if timeout_millis == 0.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001224 result = _winapi.WaitForSingleObject(self._handle,
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001225 timeout_millis)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001226 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001227 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001228 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001229 return self.returncode
1230
1231
1232 def _readerthread(self, fh, buffer):
1233 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001234 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001235
1236
Reid Kleckner2b228f02011-03-16 16:57:54 -04001237 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001238 # Start reader threads feeding into a list hanging off of this
1239 # object, unless they've already been started.
1240 if self.stdout and not hasattr(self, "_stdout_buff"):
1241 self._stdout_buff = []
1242 self.stdout_thread = \
1243 threading.Thread(target=self._readerthread,
1244 args=(self.stdout, self._stdout_buff))
1245 self.stdout_thread.daemon = True
1246 self.stdout_thread.start()
1247 if self.stderr and not hasattr(self, "_stderr_buff"):
1248 self._stderr_buff = []
1249 self.stderr_thread = \
1250 threading.Thread(target=self._readerthread,
1251 args=(self.stderr, self._stderr_buff))
1252 self.stderr_thread.daemon = True
1253 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001254
1255 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001256 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001257
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001258 # Wait for the reader threads, or time out. If we time out, the
1259 # threads remain reading and the fds left open in case the user
1260 # calls communicate again.
1261 if self.stdout is not None:
1262 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001263 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001264 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001265 if self.stderr is not None:
1266 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001267 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001268 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001269
1270 # Collect the output from and close both pipes, now that we know
1271 # both have been read successfully.
1272 stdout = None
1273 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001274 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001275 stdout = self._stdout_buff
1276 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001277 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001278 stderr = self._stderr_buff
1279 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001280
1281 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001282 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001283 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001284 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001285 stderr = stderr[0]
1286
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001287 return (stdout, stderr)
1288
Christian Heimesa342c012008-04-20 21:01:16 +00001289 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001290 """Send a signal to the process."""
1291 # Don't signal a process that we know has already died.
1292 if self.returncode is not None:
1293 return
Christian Heimesa342c012008-04-20 21:01:16 +00001294 if sig == signal.SIGTERM:
1295 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001296 elif sig == signal.CTRL_C_EVENT:
1297 os.kill(self.pid, signal.CTRL_C_EVENT)
1298 elif sig == signal.CTRL_BREAK_EVENT:
1299 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001300 else:
Brian Curtin19651362010-09-07 13:24:38 +00001301 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001302
1303 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001304 """Terminates the process."""
1305 # Don't terminate a process that we know has already died.
1306 if self.returncode is not None:
1307 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001308 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001309 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001310 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001311 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1312 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001313 rc = _winapi.GetExitCodeProcess(self._handle)
1314 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001315 raise
1316 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001317
1318 kill = terminate
1319
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001320 else:
1321 #
1322 # POSIX methods
1323 #
1324 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001325 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001326 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1327 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001328 p2cread, p2cwrite = -1, -1
1329 c2pread, c2pwrite = -1, -1
1330 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001331
Peter Astrandd38ddf42005-02-10 08:32:50 +00001332 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001333 pass
1334 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001335 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001336 elif stdin == DEVNULL:
1337 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001338 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001339 p2cread = stdin
1340 else:
1341 # Assuming file-like object
1342 p2cread = stdin.fileno()
1343
Peter Astrandd38ddf42005-02-10 08:32:50 +00001344 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001345 pass
1346 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001347 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001348 elif stdout == DEVNULL:
1349 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001350 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001351 c2pwrite = stdout
1352 else:
1353 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001354 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001355
Peter Astrandd38ddf42005-02-10 08:32:50 +00001356 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001357 pass
1358 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001359 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001360 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001361 if c2pwrite != -1:
1362 errwrite = c2pwrite
1363 else: # child's stdout is not set, use parent's stdout
1364 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001365 elif stderr == DEVNULL:
1366 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001367 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001368 errwrite = stderr
1369 else:
1370 # Assuming file-like object
1371 errwrite = stderr.fileno()
1372
1373 return (p2cread, p2cwrite,
1374 c2pread, c2pwrite,
1375 errread, errwrite)
1376
1377
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001378 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001379 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001380 startupinfo, creationflags, shell,
1381 p2cread, p2cwrite,
1382 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001383 errread, errwrite,
1384 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001385 """Execute program (POSIX version)"""
1386
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001387 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001388 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001389 else:
Serhiy Storchakabe50a7b2018-02-28 01:03:46 +02001390 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001391
1392 if shell:
Xavier de Gayeb35fc622016-12-13 16:32:21 +01001393 # On Android the default shell is at '/system/bin/sh'.
1394 unix_shell = ('/system/bin/sh' if
1395 hasattr(sys, 'getandroidapilevel') else '/bin/sh')
1396 args = [unix_shell, "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001397 if executable:
1398 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001399
Peter Astrandd38ddf42005-02-10 08:32:50 +00001400 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001401 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001402 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001403
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001404 # For transferring possible exec failure from child to parent.
1405 # Data format: "exception name:hex errno:description"
1406 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001407 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001408 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1409 low_fds_to_close = []
1410 while errpipe_write < 3:
1411 low_fds_to_close.append(errpipe_write)
1412 errpipe_write = os.dup(errpipe_write)
1413 for low_fd in low_fds_to_close:
1414 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001415 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001416 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001417 # We must avoid complex work that could involve
1418 # malloc or free in the child process to avoid
1419 # potential deadlocks, thus we do all this here.
1420 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001421
Victor Stinner372b8382011-06-21 17:24:21 +02001422 if env is not None:
Serhiy Storchakad174d242017-06-23 19:39:27 +03001423 env_list = []
1424 for k, v in env.items():
1425 k = os.fsencode(k)
1426 if b'=' in k:
1427 raise ValueError("illegal environment variable name")
1428 env_list.append(k + b'=' + os.fsencode(v))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001429 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001430 env_list = None # Use execv instead of execve.
1431 executable = os.fsencode(executable)
1432 if os.path.dirname(executable):
1433 executable_list = (executable,)
1434 else:
1435 # This matches the behavior of os._execvpe().
1436 executable_list = tuple(
1437 os.path.join(os.fsencode(dir), executable)
1438 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001439 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001440 fds_to_keep.add(errpipe_write)
1441 self.pid = _posixsubprocess.fork_exec(
1442 args, executable_list,
Serhiy Storchaka66bffd12017-04-19 21:12:46 +03001443 close_fds, tuple(sorted(map(int, fds_to_keep))),
1444 cwd, env_list,
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001445 p2cread, p2cwrite, c2pread, c2pwrite,
1446 errread, errwrite,
1447 errpipe_read, errpipe_write,
1448 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001449 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001450 finally:
1451 # be sure the FD is closed no matter what
1452 os.close(errpipe_write)
1453
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001454 # self._devnull is not always defined.
1455 devnull_fd = getattr(self, '_devnull', None)
1456 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001457 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001458 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001459 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001460 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001461 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001462 if devnull_fd is not None:
1463 os.close(devnull_fd)
1464 # Prevent a double close of these fds from __init__ on error.
1465 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001466
1467 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001468 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001469 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001470 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001471 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001472 errpipe_data += part
1473 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001474 break
Facundo Batista10706e22009-06-19 20:34:30 +00001475 finally:
1476 # be sure the FD is closed no matter what
1477 os.close(errpipe_read)
1478
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001479 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001480 try:
Victor Stinnera58e2c52016-05-20 12:08:12 +02001481 pid, sts = os.waitpid(self.pid, 0)
1482 if pid == self.pid:
1483 self._handle_exitstatus(sts)
1484 else:
1485 self.returncode = sys.maxsize
Victor Stinnera5e881d2015-01-14 17:07:59 +01001486 except ChildProcessError:
1487 pass
Victor Stinnera58e2c52016-05-20 12:08:12 +02001488
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001489 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001490 exception_name, hex_errno, err_msg = (
1491 errpipe_data.split(b':', 2))
Ammar Askar3fc499b2017-09-06 02:41:30 -04001492 # The encoding here should match the encoding
1493 # written in by the subprocess implementations
1494 # like _posixsubprocess
1495 err_msg = err_msg.decode()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001496 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001497 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001498 hex_errno = b'0'
Ammar Askar3fc499b2017-09-06 02:41:30 -04001499 err_msg = 'Bad exception data from child: {!r}'.format(
1500 bytes(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001501 child_exception_type = getattr(
1502 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001503 SubprocessError)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001504 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001505 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001506 child_exec_never_called = (err_msg == "noexec")
1507 if child_exec_never_called:
1508 err_msg = ""
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001509 # The error must be from chdir(cwd).
1510 err_filename = cwd
1511 else:
1512 err_filename = orig_executable
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001513 if errno_num != 0:
1514 err_msg = os.strerror(errno_num)
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001515 raise child_exception_type(errno_num, err_msg, err_filename)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001516 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001517
1518
Brett Cannon84df1e62010-05-14 00:33:40 +00001519 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1520 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001521 _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
1522 _WSTOPSIG=os.WSTOPSIG):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001523 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001524 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001525 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001526 if _WIFSIGNALED(sts):
1527 self.returncode = -_WTERMSIG(sts)
1528 elif _WIFEXITED(sts):
1529 self.returncode = _WEXITSTATUS(sts)
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001530 elif _WIFSTOPPED(sts):
1531 self.returncode = -_WSTOPSIG(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001532 else:
1533 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001534 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001535
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001536
Brett Cannon84df1e62010-05-14 00:33:40 +00001537 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001538 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001539 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001540 attribute.
1541
1542 This method is called by __del__, so it cannot reference anything
1543 outside of the local scope (nor can any methods it calls).
1544
1545 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001546 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001547 if not self._waitpid_lock.acquire(False):
1548 # Something else is busy calling waitpid. Don't allow two
1549 # at once. We know nothing yet.
1550 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001551 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001552 if self.returncode is not None:
1553 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001554 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001555 if pid == self.pid:
1556 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001557 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001558 if _deadstate is not None:
1559 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001560 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001561 # This happens if SIGCLD is set to be ignored or
1562 # waiting for child processes has otherwise been
1563 # disabled for our process. This child is dead, we
1564 # can't get the status.
1565 # http://bugs.python.org/issue15756
1566 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001567 finally:
1568 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001569 return self.returncode
1570
1571
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001572 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001573 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001574 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001575 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001576 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001577 # This happens if SIGCLD is set to be ignored or waiting
1578 # for child processes has otherwise been disabled for our
1579 # process. This child is dead, we can't get the status.
1580 pid = self.pid
1581 sts = 0
1582 return (pid, sts)
1583
1584
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001585 def _wait(self, timeout):
1586 """Internal implementation of wait() on POSIX."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001587 if self.returncode is not None:
1588 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001589
Gregory P. Smith82604e02016-11-20 16:31:07 -08001590 if timeout is not None:
1591 endtime = _time() + timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001592 # Enter a busy loop if we have a timeout. This busy loop was
1593 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1594 delay = 0.0005 # 500 us -> initial delay of 1 ms
1595 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001596 if self._waitpid_lock.acquire(False):
1597 try:
1598 if self.returncode is not None:
1599 break # Another thread waited.
1600 (pid, sts) = self._try_wait(os.WNOHANG)
1601 assert pid == self.pid or pid == 0
1602 if pid == self.pid:
1603 self._handle_exitstatus(sts)
1604 break
1605 finally:
1606 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001607 remaining = self._remaining_time(endtime)
1608 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001609 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001610 delay = min(delay * 2, remaining, .05)
1611 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001612 else:
1613 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001614 with self._waitpid_lock:
1615 if self.returncode is not None:
1616 break # Another thread waited.
1617 (pid, sts) = self._try_wait(0)
1618 # Check the pid and loop as waitpid has been known to
1619 # return 0 even without WNOHANG in odd situations.
1620 # http://bugs.python.org/issue14396.
1621 if pid == self.pid:
1622 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001623 return self.returncode
1624
1625
Reid Kleckner2b228f02011-03-16 16:57:54 -04001626 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001627 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001628 # Flush stdio buffer. This might block, if the user has
1629 # been writing to .stdin in an uncontrolled fashion.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001630 try:
1631 self.stdin.flush()
1632 except BrokenPipeError:
1633 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001634 if not input:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001635 try:
1636 self.stdin.close()
1637 except BrokenPipeError:
1638 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001639
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001640 stdout = None
1641 stderr = None
1642
1643 # Only create this mapping if we haven't already.
1644 if not self._communication_started:
1645 self._fileobj2output = {}
1646 if self.stdout:
1647 self._fileobj2output[self.stdout] = []
1648 if self.stderr:
1649 self._fileobj2output[self.stderr] = []
1650
1651 if self.stdout:
1652 stdout = self._fileobj2output[self.stdout]
1653 if self.stderr:
1654 stderr = self._fileobj2output[self.stderr]
1655
1656 self._save_input(input)
1657
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001658 if self._input:
1659 input_view = memoryview(self._input)
1660
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001661 with _PopenSelector() as selector:
1662 if self.stdin and input:
1663 selector.register(self.stdin, selectors.EVENT_WRITE)
1664 if self.stdout:
1665 selector.register(self.stdout, selectors.EVENT_READ)
1666 if self.stderr:
1667 selector.register(self.stderr, selectors.EVENT_READ)
1668
1669 while selector.get_map():
1670 timeout = self._remaining_time(endtime)
1671 if timeout is not None and timeout < 0:
1672 raise TimeoutExpired(self.args, orig_timeout)
1673
1674 ready = selector.select(timeout)
1675 self._check_timeout(endtime, orig_timeout)
1676
1677 # XXX Rewrite these to use non-blocking I/O on the file
1678 # objects; they are no longer using C stdio!
1679
1680 for key, events in ready:
1681 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001682 chunk = input_view[self._input_offset :
1683 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001684 try:
1685 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001686 except BrokenPipeError:
1687 selector.unregister(key.fileobj)
1688 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001689 else:
1690 if self._input_offset >= len(self._input):
1691 selector.unregister(key.fileobj)
1692 key.fileobj.close()
1693 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001694 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001695 if not data:
1696 selector.unregister(key.fileobj)
1697 key.fileobj.close()
1698 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001699
1700 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001701
1702 # All data exchanged. Translate lists into strings.
1703 if stdout is not None:
1704 stdout = b''.join(stdout)
1705 if stderr is not None:
1706 stderr = b''.join(stderr)
1707
1708 # Translate newlines, if requested.
1709 # This also turns bytes into strings.
andyclegg7fed7bd2017-10-23 03:01:19 +01001710 if self.text_mode:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001711 if stdout is not None:
1712 stdout = self._translate_newlines(stdout,
Steve Dower050acae2016-09-06 20:16:17 -07001713 self.stdout.encoding,
1714 self.stdout.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001715 if stderr is not None:
1716 stderr = self._translate_newlines(stderr,
Steve Dower050acae2016-09-06 20:16:17 -07001717 self.stderr.encoding,
1718 self.stderr.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001719
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001720 return (stdout, stderr)
1721
1722
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001723 def _save_input(self, input):
1724 # This method is called from the _communicate_with_*() methods
1725 # so that if we time out while communicating, we can continue
1726 # sending input if we retry.
1727 if self.stdin and self._input is None:
1728 self._input_offset = 0
1729 self._input = input
andyclegg7fed7bd2017-10-23 03:01:19 +01001730 if input is not None and self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -07001731 self._input = self._input.encode(self.stdin.encoding,
1732 self.stdin.errors)
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001733
1734
Christian Heimesa342c012008-04-20 21:01:16 +00001735 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001736 """Send a signal to the process."""
1737 # Skip signalling a process that we know has already died.
1738 if self.returncode is None:
1739 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00001740
1741 def terminate(self):
1742 """Terminate the process with SIGTERM
1743 """
1744 self.send_signal(signal.SIGTERM)
1745
1746 def kill(self):
1747 """Kill the process with SIGKILL
1748 """
1749 self.send_signal(signal.SIGKILL)