blob: db6342fa49123930762bc0649846993f75b94057 [file] [log] [blame]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001# subprocess - Subprocesses with accessible I/O streams
2#
Tim Peterse718f612004-10-12 21:51:32 +00003# For more information about this module, see PEP 324.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00004#
Peter Astrand3a708df2005-09-23 17:37:29 +00005# Copyright (c) 2003-2005 by Peter Astrand <astrand@lysator.liu.se>
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00006#
Peter Astrand69bf13f2005-02-14 08:56:32 +00007# Licensed to PSF under a Contributor Agreement.
Peter Astrand3a708df2005-09-23 17:37:29 +00008# See http://www.python.org/2.4/license for licensing details.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00009
Martin Panter4afdca02016-10-25 22:20:48 +000010r"""Subprocesses with accessible I/O streams
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000011
Fredrik Lundh15aaacc2004-10-17 14:47:05 +000012This module allows you to spawn processes, connect to their
Martin Panter4afdca02016-10-25 22:20:48 +000013input/output/error pipes, and obtain their return codes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000014
Martin Panter4afdca02016-10-25 22:20:48 +000015For a complete description of this module see the Python documentation.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000016
Martin Panter4afdca02016-10-25 22:20:48 +000017Main API
18========
19run(...): Runs a command, waits for it to complete, then returns a
20 CompletedProcess instance.
21Popen(...): A class for flexibly executing a command in a new process
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000022
Martin Panter4afdca02016-10-25 22:20:48 +000023Constants
24---------
25DEVNULL: Special value that indicates that os.devnull should be used
26PIPE: Special value that indicates a pipe should be created
27STDOUT: Special value that indicates that stderr should go to stdout
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000028
29
Martin Panter4afdca02016-10-25 22:20:48 +000030Older API
31=========
32call(...): Runs a command, waits for it to complete, then returns
33 the return code.
34check_call(...): Same as call() but raises CalledProcessError()
35 if return code is not 0
36check_output(...): Same as check_call() but returns the contents of
37 stdout instead of a return code
38getoutput(...): Runs a command in the shell, waits for it to complete,
39 then returns the output
40getstatusoutput(...): Runs a command in the shell, waits for it to complete,
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -070041 then returns a (exitcode, output) tuple
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000042"""
43
44import sys
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -070045_mswindows = (sys.platform == "win32")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000046
Guido van Rossumfa0054a2007-05-24 04:05:35 +000047import io
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000048import os
Reid Kleckner31aa7dd2011-03-14 12:02:10 -040049import time
Christian Heimesa342c012008-04-20 21:01:16 +000050import signal
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +000051import builtins
Gregory P. Smithd23047b2010-12-04 09:10:44 +000052import warnings
Ross Lagerwall4f61b022011-04-05 15:34:00 +020053import errno
Victor Stinnerae586492014-09-02 23:18:25 +020054from time import monotonic as _time
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000055
Peter Astrand454f7672005-01-01 09:36:35 +000056# Exception classes used by this module.
Gregory P. Smith54d412e2011-03-14 14:08:43 -040057class SubprocessError(Exception): pass
58
59
60class CalledProcessError(SubprocessError):
Martin Panter4afdca02016-10-25 22:20:48 +000061 """Raised when run() is called with check=True and the process
62 returns a non-zero exit status.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)d6da7602016-06-03 06:14:06 +000063
Martin Panter4afdca02016-10-25 22:20:48 +000064 Attributes:
65 cmd, returncode, stdout, stderr, output
Georg Brandlf9734072008-12-07 15:30:06 +000066 """
Gregory P. Smith6e730002015-04-14 16:14:25 -070067 def __init__(self, returncode, cmd, output=None, stderr=None):
Thomas Wouters0e3f5912006-08-11 14:57:12 +000068 self.returncode = returncode
69 self.cmd = cmd
Georg Brandlf9734072008-12-07 15:30:06 +000070 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -070071 self.stderr = stderr
72
Thomas Wouters0e3f5912006-08-11 14:57:12 +000073 def __str__(self):
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)d6da7602016-06-03 06:14:06 +000074 if self.returncode and self.returncode < 0:
75 try:
76 return "Command '%s' died with %r." % (
77 self.cmd, signal.Signals(-self.returncode))
78 except ValueError:
79 return "Command '%s' died with unknown signal %d." % (
80 self.cmd, -self.returncode)
81 else:
82 return "Command '%s' returned non-zero exit status %d." % (
83 self.cmd, self.returncode)
Thomas Wouters0e3f5912006-08-11 14:57:12 +000084
Gregory P. Smith6e730002015-04-14 16:14:25 -070085 @property
86 def stdout(self):
87 """Alias for output attribute, to match stderr"""
88 return self.output
89
90 @stdout.setter
91 def stdout(self, value):
92 # There's no obvious reason to set this, but allow it anyway so
93 # .stdout is a transparent alias for .output
94 self.output = value
95
Peter Astrand454f7672005-01-01 09:36:35 +000096
Gregory P. Smith54d412e2011-03-14 14:08:43 -040097class TimeoutExpired(SubprocessError):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -040098 """This exception is raised when the timeout expires while waiting for a
99 child process.
Martin Panter4afdca02016-10-25 22:20:48 +0000100
101 Attributes:
102 cmd, output, stdout, stderr, timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400103 """
Gregory P. Smith6e730002015-04-14 16:14:25 -0700104 def __init__(self, cmd, timeout, output=None, stderr=None):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400105 self.cmd = cmd
Reid Kleckner2b228f02011-03-16 16:57:54 -0400106 self.timeout = timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400107 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -0700108 self.stderr = stderr
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400109
110 def __str__(self):
111 return ("Command '%s' timed out after %s seconds" %
112 (self.cmd, self.timeout))
113
Gregory P. Smith6e730002015-04-14 16:14:25 -0700114 @property
115 def stdout(self):
116 return self.output
117
118 @stdout.setter
119 def stdout(self, value):
120 # There's no obvious reason to set this, but allow it anyway so
121 # .stdout is a transparent alias for .output
122 self.output = value
123
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400124
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700125if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000126 import threading
127 import msvcrt
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200128 import _winapi
Brian Curtin1ce6b582010-04-24 16:19:22 +0000129 class STARTUPINFO:
Subhendu Ghoshae160bb2017-02-25 20:29:05 +0530130 def __init__(self, *, dwFlags=0, hStdInput=None, hStdOutput=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200131 hStdError=None, wShowWindow=0, lpAttributeList=None):
Subhendu Ghoshae160bb2017-02-25 20:29:05 +0530132 self.dwFlags = dwFlags
133 self.hStdInput = hStdInput
134 self.hStdOutput = hStdOutput
135 self.hStdError = hStdError
136 self.wShowWindow = wShowWindow
Segev Finerb2a60832017-12-18 11:28:19 +0200137 self.lpAttributeList = lpAttributeList or {"handle_list": []}
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000138else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -0700139 import _posixsubprocess
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100140 import select
141 import selectors
Antoine Pitroua6a4dc82017-09-07 18:56:24 +0200142 import threading
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000143
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000144 # When select or poll has indicated that the file is writable,
145 # we can write up to _PIPE_BUF bytes without risk of blocking.
146 # POSIX defines PIPE_BUF as >= 512.
147 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
148
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100149 # poll/select have the advantage of not requiring any extra file
150 # descriptor, contrarily to epoll/kqueue (also, they require a single
151 # syscall).
152 if hasattr(selectors, 'PollSelector'):
153 _PopenSelector = selectors.PollSelector
154 else:
155 _PopenSelector = selectors.SelectSelector
156
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000157
Brett Cannona23810f2008-05-26 19:04:21 +0000158__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
Gregory P. Smith6e730002015-04-14 16:14:25 -0700159 "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL",
160 "SubprocessError", "TimeoutExpired", "CompletedProcess"]
Gregory P. Smithace55862015-04-07 15:57:54 -0700161 # NOTE: We intentionally exclude list2cmdline as it is
162 # considered an internal implementation detail. issue10838.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000163
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700164if _mswindows:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200165 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
166 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
167 STD_ERROR_HANDLE, SW_HIDE,
Jamesb5d9e082017-11-08 14:18:59 +0000168 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW,
169 ABOVE_NORMAL_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS,
170 HIGH_PRIORITY_CLASS, IDLE_PRIORITY_CLASS,
171 NORMAL_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS,
172 CREATE_NO_WINDOW, DETACHED_PROCESS,
173 CREATE_DEFAULT_ERROR_MODE, CREATE_BREAKAWAY_FROM_JOB)
Brian Curtin5d9deaa2011-04-29 16:24:07 -0500174
Brian Curtin08fd8d92011-04-29 16:11:30 -0500175 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
Brian Curtin8b8e7f42011-04-29 15:48:13 -0500176 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
177 "STD_ERROR_HANDLE", "SW_HIDE",
Martin Panter528619b2016-04-16 23:42:37 +0000178 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW",
Jamesb5d9e082017-11-08 14:18:59 +0000179 "STARTUPINFO",
180 "ABOVE_NORMAL_PRIORITY_CLASS", "BELOW_NORMAL_PRIORITY_CLASS",
181 "HIGH_PRIORITY_CLASS", "IDLE_PRIORITY_CLASS",
182 "NORMAL_PRIORITY_CLASS", "REALTIME_PRIORITY_CLASS",
183 "CREATE_NO_WINDOW", "DETACHED_PROCESS",
184 "CREATE_DEFAULT_ERROR_MODE", "CREATE_BREAKAWAY_FROM_JOB"])
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200185
186 class Handle(int):
187 closed = False
188
189 def Close(self, CloseHandle=_winapi.CloseHandle):
190 if not self.closed:
191 self.closed = True
192 CloseHandle(self)
193
194 def Detach(self):
195 if not self.closed:
196 self.closed = True
197 return int(self)
198 raise ValueError("already closed")
199
200 def __repr__(self):
Serhiy Storchaka465e60e2014-07-25 23:36:00 +0300201 return "%s(%d)" % (self.__class__.__name__, int(self))
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200202
203 __del__ = Close
204 __str__ = __repr__
205
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000206
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200207# This lists holds Popen instances for which the underlying process had not
208# exited at the time its __del__ method got called: those processes are wait()ed
209# for synchronously from _cleanup() when a new Popen object is created, to avoid
210# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000211_active = []
212
213def _cleanup():
214 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000215 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200216 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000217 try:
218 _active.remove(inst)
219 except ValueError:
220 # This can happen if two threads create a new Popen instance.
221 # It's harmless that it was already removed, so ignore.
222 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000223
224PIPE = -1
225STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200226DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000227
228
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200229# XXX This function is only used by multiprocessing and the test suite,
230# but it's here so that it can be imported when Python is compiled without
231# threads.
232
Victor Stinner9def2842016-01-18 12:15:08 +0100233def _optim_args_from_interpreter_flags():
234 """Return a list of command-line arguments reproducing the current
235 optimization settings in sys.flags."""
236 args = []
237 value = sys.flags.optimize
238 if value > 0:
239 args.append('-' + 'O' * value)
240 return args
241
242
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200243def _args_from_interpreter_flags():
244 """Return a list of command-line arguments reproducing the current
Victor Stinner747f48e2017-12-12 22:59:48 +0100245 settings in sys.flags, sys.warnoptions and sys._xoptions."""
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200246 flag_opt_map = {
247 'debug': 'd',
248 # 'inspect': 'i',
249 # 'interactive': 'i',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200250 'dont_write_bytecode': 'B',
251 'no_user_site': 's',
252 'no_site': 'S',
253 'ignore_environment': 'E',
254 'verbose': 'v',
255 'bytes_warning': 'b',
256 'quiet': 'q',
Victor Stinner9def2842016-01-18 12:15:08 +0100257 # -O is handled in _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200258 }
Victor Stinner9def2842016-01-18 12:15:08 +0100259 args = _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200260 for flag, opt in flag_opt_map.items():
261 v = getattr(sys.flags, flag)
262 if v > 0:
263 args.append('-' + opt * v)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800264
265 # -W options
Victor Stinner747f48e2017-12-12 22:59:48 +0100266 warnopts = sys.warnoptions[:]
267 bytes_warning = sys.flags.bytes_warning
268 xoptions = getattr(sys, '_xoptions', {})
269 dev_mode = ('dev' in xoptions)
270
271 if bytes_warning > 1:
272 warnopts.remove("error::BytesWarning")
273 elif bytes_warning:
274 warnopts.remove("default::BytesWarning")
275 if dev_mode:
276 warnopts.remove('default')
277 for opt in warnopts:
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200278 args.append('-W' + opt)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800279
280 # -X options
Victor Stinner747f48e2017-12-12 22:59:48 +0100281 if dev_mode:
Victor Stinnerf39b6742017-11-20 15:24:56 -0800282 args.extend(('-X', 'dev'))
283 for opt in ('faulthandler', 'tracemalloc', 'importtime',
Victor Stinner91106cd2017-12-13 12:29:09 +0100284 'showalloccount', 'showrefcount', 'utf8'):
Victor Stinnerf39b6742017-11-20 15:24:56 -0800285 if opt in xoptions:
286 value = xoptions[opt]
287 if value is True:
288 arg = opt
289 else:
290 arg = '%s=%s' % (opt, value)
291 args.extend(('-X', arg))
292
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200293 return args
294
295
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400296def call(*popenargs, timeout=None, **kwargs):
297 """Run command with arguments. Wait for command to complete or
298 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000299
300 The arguments are the same as for the Popen constructor. Example:
301
302 retcode = call(["ls", "-l"])
303 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200304 with Popen(*popenargs, **kwargs) as p:
305 try:
306 return p.wait(timeout=timeout)
307 except:
308 p.kill()
309 p.wait()
310 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000311
312
Peter Astrand454f7672005-01-01 09:36:35 +0000313def check_call(*popenargs, **kwargs):
314 """Run command with arguments. Wait for command to complete. If
315 the exit code was zero then return, otherwise raise
316 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000317 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000318
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400319 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000320
321 check_call(["ls", "-l"])
322 """
323 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000324 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000325 cmd = kwargs.get("args")
326 if cmd is None:
327 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000328 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000329 return 0
330
331
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400332def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700333 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000334
335 If the exit code was non-zero it raises a CalledProcessError. The
336 CalledProcessError object will have the return code in the returncode
337 attribute and output in the output attribute.
338
339 The arguments are the same as for the Popen constructor. Example:
340
341 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000342 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000343
344 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000345 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000346
347 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000348 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000349 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000350 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700351
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300352 There is an additional optional argument, "input", allowing you to
353 pass a string to the subprocess's stdin. If you use this argument
354 you may not also use the Popen constructor's "stdin" argument, as
355 it too will be used internally. Example:
356
357 >>> check_output(["sed", "-e", "s/foo/bar/"],
358 ... input=b"when in the course of fooman events\n")
359 b'when in the course of barman events\n'
360
andyclegg7fed7bd2017-10-23 03:01:19 +0100361 By default, all communication is in bytes, and therefore any "input"
362 should be bytes, and the return value wil be bytes. If in text mode,
363 any "input" should be a string, and the return value will be a string
364 decoded according to locale encoding, or by "encoding" if set. Text mode
365 is triggered by setting any of text, encoding, errors or universal_newlines.
Georg Brandlf9734072008-12-07 15:30:06 +0000366 """
367 if 'stdout' in kwargs:
368 raise ValueError('stdout argument not allowed, it will be overridden.')
Gregory P. Smith6e730002015-04-14 16:14:25 -0700369
370 if 'input' in kwargs and kwargs['input'] is None:
371 # Explicitly passing input=None was previously equivalent to passing an
372 # empty string. That is maintained here for backwards compatibility.
373 kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
374
375 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
376 **kwargs).stdout
377
378
379class CompletedProcess(object):
380 """A process that has finished running.
381
382 This is returned by run().
383
384 Attributes:
385 args: The list or str args passed to run().
386 returncode: The exit code of the process, negative for signals.
387 stdout: The standard output (None if not captured).
388 stderr: The standard error (None if not captured).
389 """
390 def __init__(self, args, returncode, stdout=None, stderr=None):
391 self.args = args
392 self.returncode = returncode
393 self.stdout = stdout
394 self.stderr = stderr
395
396 def __repr__(self):
397 args = ['args={!r}'.format(self.args),
398 'returncode={!r}'.format(self.returncode)]
399 if self.stdout is not None:
400 args.append('stdout={!r}'.format(self.stdout))
401 if self.stderr is not None:
402 args.append('stderr={!r}'.format(self.stderr))
403 return "{}({})".format(type(self).__name__, ', '.join(args))
404
405 def check_returncode(self):
406 """Raise CalledProcessError if the exit code is non-zero."""
407 if self.returncode:
408 raise CalledProcessError(self.returncode, self.args, self.stdout,
409 self.stderr)
410
411
412def run(*popenargs, input=None, timeout=None, check=False, **kwargs):
413 """Run command with arguments and return a CompletedProcess instance.
414
415 The returned instance will have attributes args, returncode, stdout and
416 stderr. By default, stdout and stderr are not captured, and those attributes
417 will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.
418
419 If check is True and the exit code was non-zero, it raises a
420 CalledProcessError. The CalledProcessError object will have the return code
421 in the returncode attribute, and output & stderr attributes if those streams
422 were captured.
423
424 If timeout is given, and the process takes too long, a TimeoutExpired
425 exception will be raised.
426
427 There is an optional argument "input", allowing you to
andyclegg7fed7bd2017-10-23 03:01:19 +0100428 pass bytes or a string to the subprocess's stdin. If you use this argument
Gregory P. Smith6e730002015-04-14 16:14:25 -0700429 you may not also use the Popen constructor's "stdin" argument, as
430 it will be used internally.
431
andyclegg7fed7bd2017-10-23 03:01:19 +0100432 By default, all communication is in bytes, and therefore any "input" should
433 be bytes, and the stdout and stderr will be bytes. If in text mode, any
434 "input" should be a string, and stdout and stderr will be strings decoded
435 according to locale encoding, or by "encoding" if set. Text mode is
436 triggered by setting any of text, encoding, errors or universal_newlines.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700437
andyclegg7fed7bd2017-10-23 03:01:19 +0100438 The other arguments are the same as for the Popen constructor.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700439 """
440 if input is not None:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300441 if 'stdin' in kwargs:
442 raise ValueError('stdin and input arguments may not both be used.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300443 kwargs['stdin'] = PIPE
Gregory P. Smith6e730002015-04-14 16:14:25 -0700444
445 with Popen(*popenargs, **kwargs) as process:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200446 try:
Gregory P. Smith6e730002015-04-14 16:14:25 -0700447 stdout, stderr = process.communicate(input, timeout=timeout)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200448 except TimeoutExpired:
449 process.kill()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700450 stdout, stderr = process.communicate()
451 raise TimeoutExpired(process.args, timeout, output=stdout,
452 stderr=stderr)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200453 except:
454 process.kill()
455 process.wait()
456 raise
457 retcode = process.poll()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700458 if check and retcode:
459 raise CalledProcessError(retcode, process.args,
460 output=stdout, stderr=stderr)
461 return CompletedProcess(process.args, retcode, stdout, stderr)
Peter Astrand454f7672005-01-01 09:36:35 +0000462
463
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000464def list2cmdline(seq):
465 """
466 Translate a sequence of arguments into a command line
467 string, using the same rules as the MS C runtime:
468
469 1) Arguments are delimited by white space, which is either a
470 space or a tab.
471
472 2) A string surrounded by double quotation marks is
473 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000474 contained within. A quoted string can be embedded in an
475 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000476
477 3) A double quotation mark preceded by a backslash is
478 interpreted as a literal double quotation mark.
479
480 4) Backslashes are interpreted literally, unless they
481 immediately precede a double quotation mark.
482
483 5) If backslashes immediately precede a double quotation mark,
484 every pair of backslashes is interpreted as a literal
485 backslash. If the number of backslashes is odd, the last
486 backslash escapes the next double quotation mark as
487 described in rule 3.
488 """
489
490 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000491 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
492 # or search http://msdn.microsoft.com for
493 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000494 result = []
495 needquote = False
496 for arg in seq:
497 bs_buf = []
498
499 # Add a space to separate this argument from the others
500 if result:
501 result.append(' ')
502
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000503 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000504 if needquote:
505 result.append('"')
506
507 for c in arg:
508 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000509 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000510 bs_buf.append(c)
511 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000512 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000513 result.append('\\' * len(bs_buf)*2)
514 bs_buf = []
515 result.append('\\"')
516 else:
517 # Normal char
518 if bs_buf:
519 result.extend(bs_buf)
520 bs_buf = []
521 result.append(c)
522
Christian Heimesfdab48e2008-01-20 09:06:41 +0000523 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000524 if bs_buf:
525 result.extend(bs_buf)
526
527 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000528 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000529 result.append('"')
530
531 return ''.join(result)
532
533
Brett Cannona23810f2008-05-26 19:04:21 +0000534# Various tools for executing commands and looking at their output and status.
535#
Brett Cannona23810f2008-05-26 19:04:21 +0000536
537def getstatusoutput(cmd):
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700538 """Return (exitcode, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000539
Tim Golden60798142013-11-05 12:57:25 +0000540 Execute the string 'cmd' in a shell with 'check_output' and
Steve Dower050acae2016-09-06 20:16:17 -0700541 return a 2-tuple (status, output). The locale encoding is used
542 to decode the output and process newlines.
Tim Golden60798142013-11-05 12:57:25 +0000543
544 A trailing newline is stripped from the output.
545 The exit status for the command can be interpreted
546 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000547
548 >>> import subprocess
549 >>> subprocess.getstatusoutput('ls /bin/ls')
550 (0, '/bin/ls')
551 >>> subprocess.getstatusoutput('cat /bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700552 (1, 'cat: /bin/junk: No such file or directory')
Brett Cannona23810f2008-05-26 19:04:21 +0000553 >>> subprocess.getstatusoutput('/bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700554 (127, 'sh: /bin/junk: not found')
555 >>> subprocess.getstatusoutput('/bin/kill $$')
556 (-15, '')
Brett Cannona23810f2008-05-26 19:04:21 +0000557 """
Tim Goldene0041752013-11-03 12:53:17 +0000558 try:
andyclegg7fed7bd2017-10-23 03:01:19 +0100559 data = check_output(cmd, shell=True, text=True, stderr=STDOUT)
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700560 exitcode = 0
Tim Goldene0041752013-11-03 12:53:17 +0000561 except CalledProcessError as ex:
562 data = ex.output
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700563 exitcode = ex.returncode
Tim Goldene0041752013-11-03 12:53:17 +0000564 if data[-1:] == '\n':
565 data = data[:-1]
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700566 return exitcode, data
Brett Cannona23810f2008-05-26 19:04:21 +0000567
568def getoutput(cmd):
569 """Return output (stdout or stderr) of executing cmd in a shell.
570
571 Like getstatusoutput(), except the exit status is ignored and the return
572 value is a string containing the command's output. Example:
573
574 >>> import subprocess
575 >>> subprocess.getoutput('ls /bin/ls')
576 '/bin/ls'
577 """
578 return getstatusoutput(cmd)[1]
579
580
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000581class Popen(object):
Martin Panter4afdca02016-10-25 22:20:48 +0000582 """ Execute a child program in a new process.
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200583
Martin Panter4afdca02016-10-25 22:20:48 +0000584 For a complete description of the arguments see the Python documentation.
585
586 Arguments:
587 args: A string, or a sequence of program arguments.
588
589 bufsize: supplied as the buffering argument to the open() function when
590 creating the stdin/stdout/stderr pipe file objects
591
592 executable: A replacement program to execute.
593
594 stdin, stdout and stderr: These specify the executed programs' standard
595 input, standard output and standard error file handles, respectively.
596
597 preexec_fn: (POSIX only) An object to be called in the child process
598 just before the child is executed.
599
600 close_fds: Controls closing or inheriting of file descriptors.
601
602 shell: If true, the command will be executed through the shell.
603
604 cwd: Sets the current directory before the child is executed.
605
606 env: Defines the environment variables for the new process.
607
andyclegg7fed7bd2017-10-23 03:01:19 +0100608 text: If true, decode stdin, stdout and stderr using the given encoding
609 (if set) or the system default otherwise.
610
611 universal_newlines: Alias of text, provided for backwards compatibility.
Martin Panter4afdca02016-10-25 22:20:48 +0000612
613 startupinfo and creationflags (Windows only)
614
615 restore_signals (POSIX only)
616
617 start_new_session (POSIX only)
618
619 pass_fds (POSIX only)
620
Martin Panter3dca6242016-10-25 23:41:42 +0000621 encoding and errors: Text mode encoding and error handling to use for
622 file objects stdin, stdout and stderr.
623
Martin Panter4afdca02016-10-25 22:20:48 +0000624 Attributes:
625 stdin, stdout, stderr, pid, returncode
626 """
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200627 _child_created = False # Set here since __del__ checks it
628
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700629 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000630 stdin=None, stdout=None, stderr=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200631 preexec_fn=None, close_fds=True,
andyclegg7fed7bd2017-10-23 03:01:19 +0100632 shell=False, cwd=None, env=None, universal_newlines=None,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000633 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000634 restore_signals=True, start_new_session=False,
andyclegg7fed7bd2017-10-23 03:01:19 +0100635 pass_fds=(), *, encoding=None, errors=None, text=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000636 """Create new Popen instance."""
637 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700638 # Held while anything is calling waitpid before returncode has been
639 # updated to prevent clobbering returncode if wait() or poll() are
640 # called from multiple threads at once. After acquiring the lock,
641 # code must re-check self.returncode to see if another thread just
642 # finished a waitpid() call.
643 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000644
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400645 self._input = None
646 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000647 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700648 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000649 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000650 raise TypeError("bufsize must be an integer")
651
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700652 if _mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000653 if preexec_fn is not None:
654 raise ValueError("preexec_fn is not supported on Windows "
655 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000656 else:
657 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000658 if pass_fds and not close_fds:
659 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
660 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000661 if startupinfo is not None:
662 raise ValueError("startupinfo is only supported on Windows "
663 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000664 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000665 raise ValueError("creationflags is only supported on Windows "
666 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000667
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400668 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000669 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000670 self.stdout = None
671 self.stderr = None
672 self.pid = None
673 self.returncode = None
Steve Dower050acae2016-09-06 20:16:17 -0700674 self.encoding = encoding
675 self.errors = errors
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000676
andyclegg7fed7bd2017-10-23 03:01:19 +0100677 # Validate the combinations of text and universal_newlines
678 if (text is not None and universal_newlines is not None
679 and bool(universal_newlines) != bool(text)):
680 raise SubprocessError('Cannot disambiguate when both text '
681 'and universal_newlines are supplied but '
682 'different. Pass one or the other.')
683
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000684 # Input and output objects. The general principle is like
685 # this:
686 #
687 # Parent Child
688 # ------ -----
689 # p2cwrite ---stdin---> p2cread
690 # c2pread <--stdout--- c2pwrite
691 # errread <--stderr--- errwrite
692 #
693 # On POSIX, the child objects are file descriptors. On
694 # Windows, these are Windows file handles. The parent objects
695 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000696 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000697 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000698
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000699 (p2cread, p2cwrite,
700 c2pread, c2pwrite,
701 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
702
Antoine Pitrouc9982322011-01-04 19:07:07 +0000703 # We wrap OS handles *before* launching the child, otherwise a
704 # quickly terminating child could make our fds unwrappable
705 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000706
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700707 if _mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000708 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000709 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000710 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000711 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000712 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000713 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000714
andyclegg7fed7bd2017-10-23 03:01:19 +0100715 self.text_mode = encoding or errors or text or universal_newlines
Tim Peterse718f612004-10-12 21:51:32 +0000716
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700717 self._closed_child_pipe_fds = False
Steve Dower050acae2016-09-06 20:16:17 -0700718
Antoine Pitrouc9982322011-01-04 19:07:07 +0000719 try:
Steve Dower050acae2016-09-06 20:16:17 -0700720 if p2cwrite != -1:
721 self.stdin = io.open(p2cwrite, 'wb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100722 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700723 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
724 line_buffering=(bufsize == 1),
725 encoding=encoding, errors=errors)
726 if c2pread != -1:
727 self.stdout = io.open(c2pread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100728 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700729 self.stdout = io.TextIOWrapper(self.stdout,
730 encoding=encoding, errors=errors)
731 if errread != -1:
732 self.stderr = io.open(errread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100733 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700734 self.stderr = io.TextIOWrapper(self.stderr,
735 encoding=encoding, errors=errors)
736
Antoine Pitrouc9982322011-01-04 19:07:07 +0000737 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300738 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000739 startupinfo, creationflags, shell,
740 p2cread, p2cwrite,
741 c2pread, c2pwrite,
742 errread, errwrite,
743 restore_signals, start_new_session)
744 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800745 # Cleanup if the child failed starting.
746 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000747 try:
748 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200749 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800750 pass # Ignore EBADF or other errors.
751
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700752 if not self._closed_child_pipe_fds:
753 to_close = []
754 if stdin == PIPE:
755 to_close.append(p2cread)
756 if stdout == PIPE:
757 to_close.append(c2pwrite)
758 if stderr == PIPE:
759 to_close.append(errwrite)
760 if hasattr(self, '_devnull'):
761 to_close.append(self._devnull)
762 for fd in to_close:
763 try:
Segev Finer4d385172017-08-18 16:18:13 +0300764 if _mswindows and isinstance(fd, Handle):
765 fd.Close()
766 else:
767 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700768 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700769 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800770
Antoine Pitrouc9982322011-01-04 19:07:07 +0000771 raise
772
andyclegg7fed7bd2017-10-23 03:01:19 +0100773 @property
774 def universal_newlines(self):
775 # universal_newlines as retained as an alias of text_mode for API
luzpaza5293b42017-11-05 07:37:50 -0600776 # compatibility. bpo-31756
andyclegg7fed7bd2017-10-23 03:01:19 +0100777 return self.text_mode
778
779 @universal_newlines.setter
780 def universal_newlines(self, universal_newlines):
781 self.text_mode = bool(universal_newlines)
782
Steve Dower050acae2016-09-06 20:16:17 -0700783 def _translate_newlines(self, data, encoding, errors):
784 data = data.decode(encoding, errors)
Andrew Svetlov82860712012-08-19 22:13:41 +0300785 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000786
Brian Curtin79cdb662010-12-03 02:46:02 +0000787 def __enter__(self):
788 return self
789
790 def __exit__(self, type, value, traceback):
791 if self.stdout:
792 self.stdout.close()
793 if self.stderr:
794 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200795 try: # Flushing a BufferedWriter may raise an error
796 if self.stdin:
797 self.stdin.close()
798 finally:
799 # Wait for the process to terminate, to avoid zombies.
800 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000801
Victor Stinner9505b032017-01-06 10:44:44 +0100802 def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200803 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000804 # We didn't get to successfully create a child process.
805 return
Victor Stinner5a48e212016-05-20 12:11:15 +0200806 if self.returncode is None:
Victor Stinnerc206f1e2016-06-14 16:42:59 +0200807 # Not reading subprocess exit status creates a zombi process which
808 # is only destroyed at the parent python process exit
Victor Stinner9505b032017-01-06 10:44:44 +0100809 _warn("subprocess %s is still running" % self.pid,
810 ResourceWarning, source=self)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000811 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000812 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000813 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000814 # Child is still running, keep us alive until we can wait on it.
815 _active.append(self)
816
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200817 def _get_devnull(self):
818 if not hasattr(self, '_devnull'):
819 self._devnull = os.open(os.devnull, os.O_RDWR)
820 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000821
Victor Stinnera5e881d2015-01-14 17:07:59 +0100822 def _stdin_write(self, input):
823 if input:
824 try:
825 self.stdin.write(input)
826 except BrokenPipeError:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000827 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200828 except OSError as exc:
829 if exc.errno == errno.EINVAL:
830 # bpo-19612, bpo-30418: On Windows, stdin.write() fails
831 # with EINVAL if the child process exited or if the child
832 # process is still running but closed the pipe.
Victor Stinnera5e881d2015-01-14 17:07:59 +0100833 pass
834 else:
835 raise
Victor Stinnerd52aa312017-06-08 17:30:39 +0200836
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000837 try:
838 self.stdin.close()
839 except BrokenPipeError:
840 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200841 except OSError as exc:
842 if exc.errno == errno.EINVAL:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000843 pass
844 else:
845 raise
Victor Stinnera5e881d2015-01-14 17:07:59 +0100846
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400847 def communicate(self, input=None, timeout=None):
Joel Schaerer88031a92017-09-13 21:11:20 +0200848 """Interact with process: Send data to stdin and close it.
849 Read data from stdout and stderr, until end-of-file is
850 reached. Wait for process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +0000851
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400852 The optional "input" argument should be data to be sent to the
andyclegg7fed7bd2017-10-23 03:01:19 +0100853 child process, or None, if no data should be sent to the child.
854 communicate() returns a tuple (stdout, stderr).
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400855
andyclegg7fed7bd2017-10-23 03:01:19 +0100856 By default, all communication is in bytes, and therefore any
857 "input" should be bytes, and the (stdout, stderr) will be bytes.
858 If in text mode (indicated by self.text_mode), any "input" should
859 be a string, and (stdout, stderr) will be strings decoded
860 according to locale encoding, or by "encoding" if set. Text mode
861 is triggered by setting any of text, encoding, errors or
862 universal_newlines.
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400863 """
Peter Astrand23109f02005-03-03 20:28:59 +0000864
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400865 if self._communication_started and input:
866 raise ValueError("Cannot send input after starting communication")
867
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400868 # Optimization: If we are not worried about timeouts, we haven't
869 # started communicating, and we have one or zero pipes, using select()
870 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200871 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400872 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000873 stdout = None
874 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000875 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +0100876 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +0000877 elif self.stdout:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000878 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000879 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000880 elif self.stderr:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000881 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000882 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000883 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200884 else:
885 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +0200886 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +0200887 else:
888 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000889
Victor Stinner7a8d0812011-04-05 13:13:08 +0200890 try:
891 stdout, stderr = self._communicate(input, endtime, timeout)
892 finally:
893 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400894
Victor Stinner7a8d0812011-04-05 13:13:08 +0200895 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400896
897 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +0000898
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000899
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000900 def poll(self):
Martin Panter4afdca02016-10-25 22:20:48 +0000901 """Check if child process has terminated. Set and return returncode
902 attribute."""
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000903 return self._internal_poll()
904
905
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400906 def _remaining_time(self, endtime):
907 """Convenience for _communicate when computing timeouts."""
908 if endtime is None:
909 return None
910 else:
Victor Stinner949d8c92012-05-30 13:30:32 +0200911 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400912
913
Reid Kleckner2b228f02011-03-16 16:57:54 -0400914 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400915 """Convenience for checking if a timeout has expired."""
916 if endtime is None:
917 return
Victor Stinner949d8c92012-05-30 13:30:32 +0200918 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -0400919 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400920
921
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700922 if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000923 #
924 # Windows methods
925 #
926 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +0000927 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000928 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
929 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000930 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000931 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +0000932
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000933 p2cread, p2cwrite = -1, -1
934 c2pread, c2pwrite = -1, -1
935 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000936
Peter Astrandd38ddf42005-02-10 08:32:50 +0000937 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200938 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000939 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200940 p2cread, _ = _winapi.CreatePipe(None, 0)
941 p2cread = Handle(p2cread)
942 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000943 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200944 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
945 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200946 elif stdin == DEVNULL:
947 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000948 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000949 p2cread = msvcrt.get_osfhandle(stdin)
950 else:
951 # Assuming file-like object
952 p2cread = msvcrt.get_osfhandle(stdin.fileno())
953 p2cread = self._make_inheritable(p2cread)
954
Peter Astrandd38ddf42005-02-10 08:32:50 +0000955 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200956 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000957 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200958 _, c2pwrite = _winapi.CreatePipe(None, 0)
959 c2pwrite = Handle(c2pwrite)
960 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000961 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200962 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
963 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200964 elif stdout == DEVNULL:
965 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000966 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000967 c2pwrite = msvcrt.get_osfhandle(stdout)
968 else:
969 # Assuming file-like object
970 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
971 c2pwrite = self._make_inheritable(c2pwrite)
972
Peter Astrandd38ddf42005-02-10 08:32:50 +0000973 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200974 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000975 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200976 _, errwrite = _winapi.CreatePipe(None, 0)
977 errwrite = Handle(errwrite)
978 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000979 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200980 errread, errwrite = _winapi.CreatePipe(None, 0)
981 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000982 elif stderr == STDOUT:
983 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200984 elif stderr == DEVNULL:
985 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000986 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000987 errwrite = msvcrt.get_osfhandle(stderr)
988 else:
989 # Assuming file-like object
990 errwrite = msvcrt.get_osfhandle(stderr.fileno())
991 errwrite = self._make_inheritable(errwrite)
992
993 return (p2cread, p2cwrite,
994 c2pread, c2pwrite,
995 errread, errwrite)
996
997
998 def _make_inheritable(self, handle):
999 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001000 h = _winapi.DuplicateHandle(
1001 _winapi.GetCurrentProcess(), handle,
1002 _winapi.GetCurrentProcess(), 0, 1,
1003 _winapi.DUPLICATE_SAME_ACCESS)
1004 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001005
1006
Segev Finerb2a60832017-12-18 11:28:19 +02001007 def _filter_handle_list(self, handle_list):
1008 """Filter out console handles that can't be used
1009 in lpAttributeList["handle_list"] and make sure the list
1010 isn't empty. This also removes duplicate handles."""
1011 # An handle with it's lowest two bits set might be a special console
1012 # handle that if passed in lpAttributeList["handle_list"], will
1013 # cause it to fail.
1014 return list({handle for handle in handle_list
1015 if handle & 0x3 != 0x3
1016 or _winapi.GetFileType(handle) !=
1017 _winapi.FILE_TYPE_CHAR})
1018
1019
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001020 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001021 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001022 startupinfo, creationflags, shell,
1023 p2cread, p2cwrite,
1024 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001025 errread, errwrite,
1026 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001027 """Execute program (MS Windows version)"""
1028
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001029 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001030
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001031 if not isinstance(args, str):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001032 args = list2cmdline(args)
1033
Peter Astrandc1d65362004-11-07 14:30:34 +00001034 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001035 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001036 startupinfo = STARTUPINFO()
Segev Finerb2a60832017-12-18 11:28:19 +02001037
1038 use_std_handles = -1 not in (p2cread, c2pwrite, errwrite)
1039 if use_std_handles:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001040 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001041 startupinfo.hStdInput = p2cread
1042 startupinfo.hStdOutput = c2pwrite
1043 startupinfo.hStdError = errwrite
1044
Segev Finerb2a60832017-12-18 11:28:19 +02001045 attribute_list = startupinfo.lpAttributeList
1046 have_handle_list = bool(attribute_list and
1047 "handle_list" in attribute_list and
1048 attribute_list["handle_list"])
1049
1050 # If we were given an handle_list or need to create one
1051 if have_handle_list or (use_std_handles and close_fds):
1052 if attribute_list is None:
1053 attribute_list = startupinfo.lpAttributeList = {}
1054 handle_list = attribute_list["handle_list"] = \
1055 list(attribute_list.get("handle_list", []))
1056
1057 if use_std_handles:
1058 handle_list += [int(p2cread), int(c2pwrite), int(errwrite)]
1059
1060 handle_list[:] = self._filter_handle_list(handle_list)
1061
1062 if handle_list:
1063 if not close_fds:
1064 warnings.warn("startupinfo.lpAttributeList['handle_list'] "
1065 "overriding close_fds", RuntimeWarning)
1066
1067 # When using the handle_list we always request to inherit
1068 # handles but the only handles that will be inherited are
1069 # the ones in the handle_list
1070 close_fds = False
1071
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001072 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001073 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1074 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001075 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001076 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001077
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001078 # Start the process
1079 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001080 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001081 # no special security
1082 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001083 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001084 creationflags,
1085 env,
Benjamin Petersoncb90f262017-03-02 00:03:41 -08001086 os.fspath(cwd) if cwd is not None else None,
Tim Peterse8374a52004-10-13 03:15:00 +00001087 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001088 finally:
1089 # Child is launched. Close the parent's copy of those pipe
1090 # handles that only the child should have open. You need
1091 # to make sure that no handles to the write end of the
1092 # output pipe are maintained in this process or else the
1093 # pipe will not close when the child process exits and the
1094 # ReadFile will hang.
1095 if p2cread != -1:
1096 p2cread.Close()
1097 if c2pwrite != -1:
1098 c2pwrite.Close()
1099 if errwrite != -1:
1100 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001101 if hasattr(self, '_devnull'):
1102 os.close(self._devnull)
Segev Finer4d385172017-08-18 16:18:13 +03001103 # Prevent a double close of these handles/fds from __init__
1104 # on error.
1105 self._closed_child_pipe_fds = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001106
1107 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001108 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001109 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001110 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001111 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001112
Brett Cannon84df1e62010-05-14 00:33:40 +00001113 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001114 _WaitForSingleObject=_winapi.WaitForSingleObject,
1115 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1116 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001117 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001118 attribute.
1119
1120 This method is called by __del__, so it can only refer to objects
1121 in its local scope.
1122
1123 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001124 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001125 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1126 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001127 return self.returncode
1128
1129
Gregory P. Smith82604e02016-11-20 16:31:07 -08001130 def wait(self, timeout=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001131 """Wait for child process to terminate. Returns returncode
1132 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001133 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001134 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001135 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001136 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001137 if self.returncode is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001138 result = _winapi.WaitForSingleObject(self._handle,
1139 timeout_millis)
1140 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001141 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001142 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001143 return self.returncode
1144
1145
1146 def _readerthread(self, fh, buffer):
1147 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001148 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001149
1150
Reid Kleckner2b228f02011-03-16 16:57:54 -04001151 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001152 # Start reader threads feeding into a list hanging off of this
1153 # object, unless they've already been started.
1154 if self.stdout and not hasattr(self, "_stdout_buff"):
1155 self._stdout_buff = []
1156 self.stdout_thread = \
1157 threading.Thread(target=self._readerthread,
1158 args=(self.stdout, self._stdout_buff))
1159 self.stdout_thread.daemon = True
1160 self.stdout_thread.start()
1161 if self.stderr and not hasattr(self, "_stderr_buff"):
1162 self._stderr_buff = []
1163 self.stderr_thread = \
1164 threading.Thread(target=self._readerthread,
1165 args=(self.stderr, self._stderr_buff))
1166 self.stderr_thread.daemon = True
1167 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001168
1169 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001170 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001171
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001172 # Wait for the reader threads, or time out. If we time out, the
1173 # threads remain reading and the fds left open in case the user
1174 # calls communicate again.
1175 if self.stdout is not None:
1176 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001177 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001178 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001179 if self.stderr is not None:
1180 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001181 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001182 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001183
1184 # Collect the output from and close both pipes, now that we know
1185 # both have been read successfully.
1186 stdout = None
1187 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001188 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001189 stdout = self._stdout_buff
1190 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001191 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001192 stderr = self._stderr_buff
1193 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001194
1195 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001196 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001197 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001198 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001199 stderr = stderr[0]
1200
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001201 return (stdout, stderr)
1202
Christian Heimesa342c012008-04-20 21:01:16 +00001203 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001204 """Send a signal to the process."""
1205 # Don't signal a process that we know has already died.
1206 if self.returncode is not None:
1207 return
Christian Heimesa342c012008-04-20 21:01:16 +00001208 if sig == signal.SIGTERM:
1209 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001210 elif sig == signal.CTRL_C_EVENT:
1211 os.kill(self.pid, signal.CTRL_C_EVENT)
1212 elif sig == signal.CTRL_BREAK_EVENT:
1213 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001214 else:
Brian Curtin19651362010-09-07 13:24:38 +00001215 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001216
1217 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001218 """Terminates the process."""
1219 # Don't terminate a process that we know has already died.
1220 if self.returncode is not None:
1221 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001222 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001223 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001224 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001225 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1226 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001227 rc = _winapi.GetExitCodeProcess(self._handle)
1228 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001229 raise
1230 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001231
1232 kill = terminate
1233
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001234 else:
1235 #
1236 # POSIX methods
1237 #
1238 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001239 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001240 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1241 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001242 p2cread, p2cwrite = -1, -1
1243 c2pread, c2pwrite = -1, -1
1244 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001245
Peter Astrandd38ddf42005-02-10 08:32:50 +00001246 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001247 pass
1248 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001249 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001250 elif stdin == DEVNULL:
1251 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001252 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001253 p2cread = stdin
1254 else:
1255 # Assuming file-like object
1256 p2cread = stdin.fileno()
1257
Peter Astrandd38ddf42005-02-10 08:32:50 +00001258 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001259 pass
1260 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001261 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001262 elif stdout == DEVNULL:
1263 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001264 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001265 c2pwrite = stdout
1266 else:
1267 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001268 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001269
Peter Astrandd38ddf42005-02-10 08:32:50 +00001270 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001271 pass
1272 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001273 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001274 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001275 if c2pwrite != -1:
1276 errwrite = c2pwrite
1277 else: # child's stdout is not set, use parent's stdout
1278 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001279 elif stderr == DEVNULL:
1280 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001281 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001282 errwrite = stderr
1283 else:
1284 # Assuming file-like object
1285 errwrite = stderr.fileno()
1286
1287 return (p2cread, p2cwrite,
1288 c2pread, c2pwrite,
1289 errread, errwrite)
1290
1291
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001292 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001293 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001294 startupinfo, creationflags, shell,
1295 p2cread, p2cwrite,
1296 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001297 errread, errwrite,
1298 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001299 """Execute program (POSIX version)"""
1300
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001301 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001302 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001303 else:
1304 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001305
1306 if shell:
Xavier de Gayeb35fc622016-12-13 16:32:21 +01001307 # On Android the default shell is at '/system/bin/sh'.
1308 unix_shell = ('/system/bin/sh' if
1309 hasattr(sys, 'getandroidapilevel') else '/bin/sh')
1310 args = [unix_shell, "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001311 if executable:
1312 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001313
Peter Astrandd38ddf42005-02-10 08:32:50 +00001314 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001315 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001316 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001317
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001318 # For transferring possible exec failure from child to parent.
1319 # Data format: "exception name:hex errno:description"
1320 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001321 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001322 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1323 low_fds_to_close = []
1324 while errpipe_write < 3:
1325 low_fds_to_close.append(errpipe_write)
1326 errpipe_write = os.dup(errpipe_write)
1327 for low_fd in low_fds_to_close:
1328 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001329 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001330 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001331 # We must avoid complex work that could involve
1332 # malloc or free in the child process to avoid
1333 # potential deadlocks, thus we do all this here.
1334 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001335
Victor Stinner372b8382011-06-21 17:24:21 +02001336 if env is not None:
Serhiy Storchakad174d242017-06-23 19:39:27 +03001337 env_list = []
1338 for k, v in env.items():
1339 k = os.fsencode(k)
1340 if b'=' in k:
1341 raise ValueError("illegal environment variable name")
1342 env_list.append(k + b'=' + os.fsencode(v))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001343 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001344 env_list = None # Use execv instead of execve.
1345 executable = os.fsencode(executable)
1346 if os.path.dirname(executable):
1347 executable_list = (executable,)
1348 else:
1349 # This matches the behavior of os._execvpe().
1350 executable_list = tuple(
1351 os.path.join(os.fsencode(dir), executable)
1352 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001353 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001354 fds_to_keep.add(errpipe_write)
1355 self.pid = _posixsubprocess.fork_exec(
1356 args, executable_list,
Serhiy Storchaka66bffd12017-04-19 21:12:46 +03001357 close_fds, tuple(sorted(map(int, fds_to_keep))),
1358 cwd, env_list,
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001359 p2cread, p2cwrite, c2pread, c2pwrite,
1360 errread, errwrite,
1361 errpipe_read, errpipe_write,
1362 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001363 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001364 finally:
1365 # be sure the FD is closed no matter what
1366 os.close(errpipe_write)
1367
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001368 # self._devnull is not always defined.
1369 devnull_fd = getattr(self, '_devnull', None)
1370 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001371 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001372 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001373 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001374 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001375 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001376 if devnull_fd is not None:
1377 os.close(devnull_fd)
1378 # Prevent a double close of these fds from __init__ on error.
1379 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001380
1381 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001382 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001383 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001384 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001385 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001386 errpipe_data += part
1387 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001388 break
Facundo Batista10706e22009-06-19 20:34:30 +00001389 finally:
1390 # be sure the FD is closed no matter what
1391 os.close(errpipe_read)
1392
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001393 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001394 try:
Victor Stinnera58e2c52016-05-20 12:08:12 +02001395 pid, sts = os.waitpid(self.pid, 0)
1396 if pid == self.pid:
1397 self._handle_exitstatus(sts)
1398 else:
1399 self.returncode = sys.maxsize
Victor Stinnera5e881d2015-01-14 17:07:59 +01001400 except ChildProcessError:
1401 pass
Victor Stinnera58e2c52016-05-20 12:08:12 +02001402
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001403 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001404 exception_name, hex_errno, err_msg = (
1405 errpipe_data.split(b':', 2))
Ammar Askar3fc499b2017-09-06 02:41:30 -04001406 # The encoding here should match the encoding
1407 # written in by the subprocess implementations
1408 # like _posixsubprocess
1409 err_msg = err_msg.decode()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001410 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001411 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001412 hex_errno = b'0'
Ammar Askar3fc499b2017-09-06 02:41:30 -04001413 err_msg = 'Bad exception data from child: {!r}'.format(
1414 bytes(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001415 child_exception_type = getattr(
1416 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001417 SubprocessError)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001418 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001419 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001420 child_exec_never_called = (err_msg == "noexec")
1421 if child_exec_never_called:
1422 err_msg = ""
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001423 # The error must be from chdir(cwd).
1424 err_filename = cwd
1425 else:
1426 err_filename = orig_executable
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001427 if errno_num != 0:
1428 err_msg = os.strerror(errno_num)
1429 if errno_num == errno.ENOENT:
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001430 err_msg += ': ' + repr(err_filename)
1431 raise child_exception_type(errno_num, err_msg, err_filename)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001432 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001433
1434
Brett Cannon84df1e62010-05-14 00:33:40 +00001435 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1436 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001437 _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
1438 _WSTOPSIG=os.WSTOPSIG):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001439 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001440 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001441 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001442 if _WIFSIGNALED(sts):
1443 self.returncode = -_WTERMSIG(sts)
1444 elif _WIFEXITED(sts):
1445 self.returncode = _WEXITSTATUS(sts)
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001446 elif _WIFSTOPPED(sts):
1447 self.returncode = -_WSTOPSIG(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001448 else:
1449 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001450 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001451
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001452
Brett Cannon84df1e62010-05-14 00:33:40 +00001453 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001454 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001455 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001456 attribute.
1457
1458 This method is called by __del__, so it cannot reference anything
1459 outside of the local scope (nor can any methods it calls).
1460
1461 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001462 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001463 if not self._waitpid_lock.acquire(False):
1464 # Something else is busy calling waitpid. Don't allow two
1465 # at once. We know nothing yet.
1466 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001467 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001468 if self.returncode is not None:
1469 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001470 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001471 if pid == self.pid:
1472 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001473 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001474 if _deadstate is not None:
1475 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001476 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001477 # This happens if SIGCLD is set to be ignored or
1478 # waiting for child processes has otherwise been
1479 # disabled for our process. This child is dead, we
1480 # can't get the status.
1481 # http://bugs.python.org/issue15756
1482 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001483 finally:
1484 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001485 return self.returncode
1486
1487
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001488 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001489 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001490 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001491 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001492 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001493 # This happens if SIGCLD is set to be ignored or waiting
1494 # for child processes has otherwise been disabled for our
1495 # process. This child is dead, we can't get the status.
1496 pid = self.pid
1497 sts = 0
1498 return (pid, sts)
1499
1500
Gregory P. Smith82604e02016-11-20 16:31:07 -08001501 def wait(self, timeout=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001502 """Wait for child process to terminate. Returns returncode
1503 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001504 if self.returncode is not None:
1505 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001506
Gregory P. Smith82604e02016-11-20 16:31:07 -08001507 if timeout is not None:
1508 endtime = _time() + timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001509 # Enter a busy loop if we have a timeout. This busy loop was
1510 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1511 delay = 0.0005 # 500 us -> initial delay of 1 ms
1512 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001513 if self._waitpid_lock.acquire(False):
1514 try:
1515 if self.returncode is not None:
1516 break # Another thread waited.
1517 (pid, sts) = self._try_wait(os.WNOHANG)
1518 assert pid == self.pid or pid == 0
1519 if pid == self.pid:
1520 self._handle_exitstatus(sts)
1521 break
1522 finally:
1523 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001524 remaining = self._remaining_time(endtime)
1525 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001526 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001527 delay = min(delay * 2, remaining, .05)
1528 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001529 else:
1530 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001531 with self._waitpid_lock:
1532 if self.returncode is not None:
1533 break # Another thread waited.
1534 (pid, sts) = self._try_wait(0)
1535 # Check the pid and loop as waitpid has been known to
1536 # return 0 even without WNOHANG in odd situations.
1537 # http://bugs.python.org/issue14396.
1538 if pid == self.pid:
1539 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001540 return self.returncode
1541
1542
Reid Kleckner2b228f02011-03-16 16:57:54 -04001543 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001544 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001545 # Flush stdio buffer. This might block, if the user has
1546 # been writing to .stdin in an uncontrolled fashion.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001547 try:
1548 self.stdin.flush()
1549 except BrokenPipeError:
1550 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001551 if not input:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001552 try:
1553 self.stdin.close()
1554 except BrokenPipeError:
1555 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001556
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001557 stdout = None
1558 stderr = None
1559
1560 # Only create this mapping if we haven't already.
1561 if not self._communication_started:
1562 self._fileobj2output = {}
1563 if self.stdout:
1564 self._fileobj2output[self.stdout] = []
1565 if self.stderr:
1566 self._fileobj2output[self.stderr] = []
1567
1568 if self.stdout:
1569 stdout = self._fileobj2output[self.stdout]
1570 if self.stderr:
1571 stderr = self._fileobj2output[self.stderr]
1572
1573 self._save_input(input)
1574
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001575 if self._input:
1576 input_view = memoryview(self._input)
1577
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001578 with _PopenSelector() as selector:
1579 if self.stdin and input:
1580 selector.register(self.stdin, selectors.EVENT_WRITE)
1581 if self.stdout:
1582 selector.register(self.stdout, selectors.EVENT_READ)
1583 if self.stderr:
1584 selector.register(self.stderr, selectors.EVENT_READ)
1585
1586 while selector.get_map():
1587 timeout = self._remaining_time(endtime)
1588 if timeout is not None and timeout < 0:
1589 raise TimeoutExpired(self.args, orig_timeout)
1590
1591 ready = selector.select(timeout)
1592 self._check_timeout(endtime, orig_timeout)
1593
1594 # XXX Rewrite these to use non-blocking I/O on the file
1595 # objects; they are no longer using C stdio!
1596
1597 for key, events in ready:
1598 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001599 chunk = input_view[self._input_offset :
1600 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001601 try:
1602 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001603 except BrokenPipeError:
1604 selector.unregister(key.fileobj)
1605 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001606 else:
1607 if self._input_offset >= len(self._input):
1608 selector.unregister(key.fileobj)
1609 key.fileobj.close()
1610 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001611 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001612 if not data:
1613 selector.unregister(key.fileobj)
1614 key.fileobj.close()
1615 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001616
1617 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001618
1619 # All data exchanged. Translate lists into strings.
1620 if stdout is not None:
1621 stdout = b''.join(stdout)
1622 if stderr is not None:
1623 stderr = b''.join(stderr)
1624
1625 # Translate newlines, if requested.
1626 # This also turns bytes into strings.
andyclegg7fed7bd2017-10-23 03:01:19 +01001627 if self.text_mode:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001628 if stdout is not None:
1629 stdout = self._translate_newlines(stdout,
Steve Dower050acae2016-09-06 20:16:17 -07001630 self.stdout.encoding,
1631 self.stdout.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001632 if stderr is not None:
1633 stderr = self._translate_newlines(stderr,
Steve Dower050acae2016-09-06 20:16:17 -07001634 self.stderr.encoding,
1635 self.stderr.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001636
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001637 return (stdout, stderr)
1638
1639
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001640 def _save_input(self, input):
1641 # This method is called from the _communicate_with_*() methods
1642 # so that if we time out while communicating, we can continue
1643 # sending input if we retry.
1644 if self.stdin and self._input is None:
1645 self._input_offset = 0
1646 self._input = input
andyclegg7fed7bd2017-10-23 03:01:19 +01001647 if input is not None and self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -07001648 self._input = self._input.encode(self.stdin.encoding,
1649 self.stdin.errors)
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001650
1651
Christian Heimesa342c012008-04-20 21:01:16 +00001652 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001653 """Send a signal to the process."""
1654 # Skip signalling a process that we know has already died.
1655 if self.returncode is None:
1656 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00001657
1658 def terminate(self):
1659 """Terminate the process with SIGTERM
1660 """
1661 self.send_signal(signal.SIGTERM)
1662
1663 def kill(self):
1664 """Kill the process with SIGKILL
1665 """
1666 self.send_signal(signal.SIGKILL)