blob: 35bfddde4e92f1e733b6b5065286bbfbf5389edd [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,
131 hStdError=None, wShowWindow=0):
132 self.dwFlags = dwFlags
133 self.hStdInput = hStdInput
134 self.hStdOutput = hStdOutput
135 self.hStdError = hStdError
136 self.wShowWindow = wShowWindow
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000137else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -0700138 import _posixsubprocess
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100139 import select
140 import selectors
Antoine Pitroua6a4dc82017-09-07 18:56:24 +0200141 import threading
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000142
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000143 # When select or poll has indicated that the file is writable,
144 # we can write up to _PIPE_BUF bytes without risk of blocking.
145 # POSIX defines PIPE_BUF as >= 512.
146 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
147
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100148 # poll/select have the advantage of not requiring any extra file
149 # descriptor, contrarily to epoll/kqueue (also, they require a single
150 # syscall).
151 if hasattr(selectors, 'PollSelector'):
152 _PopenSelector = selectors.PollSelector
153 else:
154 _PopenSelector = selectors.SelectSelector
155
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000156
Brett Cannona23810f2008-05-26 19:04:21 +0000157__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
Gregory P. Smith6e730002015-04-14 16:14:25 -0700158 "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL",
159 "SubprocessError", "TimeoutExpired", "CompletedProcess"]
Gregory P. Smithace55862015-04-07 15:57:54 -0700160 # NOTE: We intentionally exclude list2cmdline as it is
161 # considered an internal implementation detail. issue10838.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000162
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700163if _mswindows:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200164 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
165 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
166 STD_ERROR_HANDLE, SW_HIDE,
Jamesb5d9e082017-11-08 14:18:59 +0000167 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW,
168 ABOVE_NORMAL_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS,
169 HIGH_PRIORITY_CLASS, IDLE_PRIORITY_CLASS,
170 NORMAL_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS,
171 CREATE_NO_WINDOW, DETACHED_PROCESS,
172 CREATE_DEFAULT_ERROR_MODE, CREATE_BREAKAWAY_FROM_JOB)
Brian Curtin5d9deaa2011-04-29 16:24:07 -0500173
Brian Curtin08fd8d92011-04-29 16:11:30 -0500174 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
Brian Curtin8b8e7f42011-04-29 15:48:13 -0500175 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
176 "STD_ERROR_HANDLE", "SW_HIDE",
Martin Panter528619b2016-04-16 23:42:37 +0000177 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW",
Jamesb5d9e082017-11-08 14:18:59 +0000178 "STARTUPINFO",
179 "ABOVE_NORMAL_PRIORITY_CLASS", "BELOW_NORMAL_PRIORITY_CLASS",
180 "HIGH_PRIORITY_CLASS", "IDLE_PRIORITY_CLASS",
181 "NORMAL_PRIORITY_CLASS", "REALTIME_PRIORITY_CLASS",
182 "CREATE_NO_WINDOW", "DETACHED_PROCESS",
183 "CREATE_DEFAULT_ERROR_MODE", "CREATE_BREAKAWAY_FROM_JOB"])
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200184
185 class Handle(int):
186 closed = False
187
188 def Close(self, CloseHandle=_winapi.CloseHandle):
189 if not self.closed:
190 self.closed = True
191 CloseHandle(self)
192
193 def Detach(self):
194 if not self.closed:
195 self.closed = True
196 return int(self)
197 raise ValueError("already closed")
198
199 def __repr__(self):
Serhiy Storchaka465e60e2014-07-25 23:36:00 +0300200 return "%s(%d)" % (self.__class__.__name__, int(self))
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200201
202 __del__ = Close
203 __str__ = __repr__
204
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000205
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200206# This lists holds Popen instances for which the underlying process had not
207# exited at the time its __del__ method got called: those processes are wait()ed
208# for synchronously from _cleanup() when a new Popen object is created, to avoid
209# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000210_active = []
211
212def _cleanup():
213 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000214 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200215 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000216 try:
217 _active.remove(inst)
218 except ValueError:
219 # This can happen if two threads create a new Popen instance.
220 # It's harmless that it was already removed, so ignore.
221 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000222
223PIPE = -1
224STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200225DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000226
227
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200228# XXX This function is only used by multiprocessing and the test suite,
229# but it's here so that it can be imported when Python is compiled without
230# threads.
231
Victor Stinner9def2842016-01-18 12:15:08 +0100232def _optim_args_from_interpreter_flags():
233 """Return a list of command-line arguments reproducing the current
234 optimization settings in sys.flags."""
235 args = []
236 value = sys.flags.optimize
237 if value > 0:
238 args.append('-' + 'O' * value)
239 return args
240
241
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200242def _args_from_interpreter_flags():
243 """Return a list of command-line arguments reproducing the current
244 settings in sys.flags and sys.warnoptions."""
245 flag_opt_map = {
246 'debug': 'd',
247 # 'inspect': 'i',
248 # 'interactive': 'i',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200249 'dont_write_bytecode': 'B',
250 'no_user_site': 's',
251 'no_site': 'S',
252 'ignore_environment': 'E',
253 'verbose': 'v',
254 'bytes_warning': 'b',
255 'quiet': 'q',
Victor Stinner9def2842016-01-18 12:15:08 +0100256 # -O is handled in _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200257 }
Victor Stinner9def2842016-01-18 12:15:08 +0100258 args = _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200259 for flag, opt in flag_opt_map.items():
260 v = getattr(sys.flags, flag)
261 if v > 0:
262 args.append('-' + opt * v)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800263
264 # -W options
Victor Stinner09f3a8a2017-11-20 17:32:40 -0800265 for opt in sys.warnoptions:
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200266 args.append('-W' + opt)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800267
268 # -X options
Victor Stinner09f3a8a2017-11-20 17:32:40 -0800269 xoptions = getattr(sys, '_xoptions', {})
Victor Stinnerf39b6742017-11-20 15:24:56 -0800270 if 'dev' in xoptions:
271 args.extend(('-X', 'dev'))
272 for opt in ('faulthandler', 'tracemalloc', 'importtime',
273 'showalloccount', 'showrefcount'):
274 if opt in xoptions:
275 value = xoptions[opt]
276 if value is True:
277 arg = opt
278 else:
279 arg = '%s=%s' % (opt, value)
280 args.extend(('-X', arg))
281
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200282 return args
283
284
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400285def call(*popenargs, timeout=None, **kwargs):
286 """Run command with arguments. Wait for command to complete or
287 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000288
289 The arguments are the same as for the Popen constructor. Example:
290
291 retcode = call(["ls", "-l"])
292 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200293 with Popen(*popenargs, **kwargs) as p:
294 try:
295 return p.wait(timeout=timeout)
296 except:
297 p.kill()
298 p.wait()
299 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000300
301
Peter Astrand454f7672005-01-01 09:36:35 +0000302def check_call(*popenargs, **kwargs):
303 """Run command with arguments. Wait for command to complete. If
304 the exit code was zero then return, otherwise raise
305 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000306 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000307
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400308 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000309
310 check_call(["ls", "-l"])
311 """
312 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000313 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000314 cmd = kwargs.get("args")
315 if cmd is None:
316 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000317 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000318 return 0
319
320
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400321def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700322 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000323
324 If the exit code was non-zero it raises a CalledProcessError. The
325 CalledProcessError object will have the return code in the returncode
326 attribute and output in the output attribute.
327
328 The arguments are the same as for the Popen constructor. Example:
329
330 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000331 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000332
333 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000334 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000335
336 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000337 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000338 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000339 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700340
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300341 There is an additional optional argument, "input", allowing you to
342 pass a string to the subprocess's stdin. If you use this argument
343 you may not also use the Popen constructor's "stdin" argument, as
344 it too will be used internally. Example:
345
346 >>> check_output(["sed", "-e", "s/foo/bar/"],
347 ... input=b"when in the course of fooman events\n")
348 b'when in the course of barman events\n'
349
andyclegg7fed7bd2017-10-23 03:01:19 +0100350 By default, all communication is in bytes, and therefore any "input"
351 should be bytes, and the return value wil be bytes. If in text mode,
352 any "input" should be a string, and the return value will be a string
353 decoded according to locale encoding, or by "encoding" if set. Text mode
354 is triggered by setting any of text, encoding, errors or universal_newlines.
Georg Brandlf9734072008-12-07 15:30:06 +0000355 """
356 if 'stdout' in kwargs:
357 raise ValueError('stdout argument not allowed, it will be overridden.')
Gregory P. Smith6e730002015-04-14 16:14:25 -0700358
359 if 'input' in kwargs and kwargs['input'] is None:
360 # Explicitly passing input=None was previously equivalent to passing an
361 # empty string. That is maintained here for backwards compatibility.
362 kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
363
364 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
365 **kwargs).stdout
366
367
368class CompletedProcess(object):
369 """A process that has finished running.
370
371 This is returned by run().
372
373 Attributes:
374 args: The list or str args passed to run().
375 returncode: The exit code of the process, negative for signals.
376 stdout: The standard output (None if not captured).
377 stderr: The standard error (None if not captured).
378 """
379 def __init__(self, args, returncode, stdout=None, stderr=None):
380 self.args = args
381 self.returncode = returncode
382 self.stdout = stdout
383 self.stderr = stderr
384
385 def __repr__(self):
386 args = ['args={!r}'.format(self.args),
387 'returncode={!r}'.format(self.returncode)]
388 if self.stdout is not None:
389 args.append('stdout={!r}'.format(self.stdout))
390 if self.stderr is not None:
391 args.append('stderr={!r}'.format(self.stderr))
392 return "{}({})".format(type(self).__name__, ', '.join(args))
393
394 def check_returncode(self):
395 """Raise CalledProcessError if the exit code is non-zero."""
396 if self.returncode:
397 raise CalledProcessError(self.returncode, self.args, self.stdout,
398 self.stderr)
399
400
401def run(*popenargs, input=None, timeout=None, check=False, **kwargs):
402 """Run command with arguments and return a CompletedProcess instance.
403
404 The returned instance will have attributes args, returncode, stdout and
405 stderr. By default, stdout and stderr are not captured, and those attributes
406 will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.
407
408 If check is True and the exit code was non-zero, it raises a
409 CalledProcessError. The CalledProcessError object will have the return code
410 in the returncode attribute, and output & stderr attributes if those streams
411 were captured.
412
413 If timeout is given, and the process takes too long, a TimeoutExpired
414 exception will be raised.
415
416 There is an optional argument "input", allowing you to
andyclegg7fed7bd2017-10-23 03:01:19 +0100417 pass bytes or a string to the subprocess's stdin. If you use this argument
Gregory P. Smith6e730002015-04-14 16:14:25 -0700418 you may not also use the Popen constructor's "stdin" argument, as
419 it will be used internally.
420
andyclegg7fed7bd2017-10-23 03:01:19 +0100421 By default, all communication is in bytes, and therefore any "input" should
422 be bytes, and the stdout and stderr will be bytes. If in text mode, any
423 "input" should be a string, and stdout and stderr will be strings decoded
424 according to locale encoding, or by "encoding" if set. Text mode is
425 triggered by setting any of text, encoding, errors or universal_newlines.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700426
andyclegg7fed7bd2017-10-23 03:01:19 +0100427 The other arguments are the same as for the Popen constructor.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700428 """
429 if input is not None:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300430 if 'stdin' in kwargs:
431 raise ValueError('stdin and input arguments may not both be used.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300432 kwargs['stdin'] = PIPE
Gregory P. Smith6e730002015-04-14 16:14:25 -0700433
434 with Popen(*popenargs, **kwargs) as process:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200435 try:
Gregory P. Smith6e730002015-04-14 16:14:25 -0700436 stdout, stderr = process.communicate(input, timeout=timeout)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200437 except TimeoutExpired:
438 process.kill()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700439 stdout, stderr = process.communicate()
440 raise TimeoutExpired(process.args, timeout, output=stdout,
441 stderr=stderr)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200442 except:
443 process.kill()
444 process.wait()
445 raise
446 retcode = process.poll()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700447 if check and retcode:
448 raise CalledProcessError(retcode, process.args,
449 output=stdout, stderr=stderr)
450 return CompletedProcess(process.args, retcode, stdout, stderr)
Peter Astrand454f7672005-01-01 09:36:35 +0000451
452
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000453def list2cmdline(seq):
454 """
455 Translate a sequence of arguments into a command line
456 string, using the same rules as the MS C runtime:
457
458 1) Arguments are delimited by white space, which is either a
459 space or a tab.
460
461 2) A string surrounded by double quotation marks is
462 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000463 contained within. A quoted string can be embedded in an
464 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000465
466 3) A double quotation mark preceded by a backslash is
467 interpreted as a literal double quotation mark.
468
469 4) Backslashes are interpreted literally, unless they
470 immediately precede a double quotation mark.
471
472 5) If backslashes immediately precede a double quotation mark,
473 every pair of backslashes is interpreted as a literal
474 backslash. If the number of backslashes is odd, the last
475 backslash escapes the next double quotation mark as
476 described in rule 3.
477 """
478
479 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000480 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
481 # or search http://msdn.microsoft.com for
482 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000483 result = []
484 needquote = False
485 for arg in seq:
486 bs_buf = []
487
488 # Add a space to separate this argument from the others
489 if result:
490 result.append(' ')
491
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000492 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000493 if needquote:
494 result.append('"')
495
496 for c in arg:
497 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000498 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000499 bs_buf.append(c)
500 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000501 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000502 result.append('\\' * len(bs_buf)*2)
503 bs_buf = []
504 result.append('\\"')
505 else:
506 # Normal char
507 if bs_buf:
508 result.extend(bs_buf)
509 bs_buf = []
510 result.append(c)
511
Christian Heimesfdab48e2008-01-20 09:06:41 +0000512 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000513 if bs_buf:
514 result.extend(bs_buf)
515
516 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000517 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000518 result.append('"')
519
520 return ''.join(result)
521
522
Brett Cannona23810f2008-05-26 19:04:21 +0000523# Various tools for executing commands and looking at their output and status.
524#
Brett Cannona23810f2008-05-26 19:04:21 +0000525
526def getstatusoutput(cmd):
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700527 """Return (exitcode, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000528
Tim Golden60798142013-11-05 12:57:25 +0000529 Execute the string 'cmd' in a shell with 'check_output' and
Steve Dower050acae2016-09-06 20:16:17 -0700530 return a 2-tuple (status, output). The locale encoding is used
531 to decode the output and process newlines.
Tim Golden60798142013-11-05 12:57:25 +0000532
533 A trailing newline is stripped from the output.
534 The exit status for the command can be interpreted
535 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000536
537 >>> import subprocess
538 >>> subprocess.getstatusoutput('ls /bin/ls')
539 (0, '/bin/ls')
540 >>> subprocess.getstatusoutput('cat /bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700541 (1, 'cat: /bin/junk: No such file or directory')
Brett Cannona23810f2008-05-26 19:04:21 +0000542 >>> subprocess.getstatusoutput('/bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700543 (127, 'sh: /bin/junk: not found')
544 >>> subprocess.getstatusoutput('/bin/kill $$')
545 (-15, '')
Brett Cannona23810f2008-05-26 19:04:21 +0000546 """
Tim Goldene0041752013-11-03 12:53:17 +0000547 try:
andyclegg7fed7bd2017-10-23 03:01:19 +0100548 data = check_output(cmd, shell=True, text=True, stderr=STDOUT)
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700549 exitcode = 0
Tim Goldene0041752013-11-03 12:53:17 +0000550 except CalledProcessError as ex:
551 data = ex.output
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700552 exitcode = ex.returncode
Tim Goldene0041752013-11-03 12:53:17 +0000553 if data[-1:] == '\n':
554 data = data[:-1]
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700555 return exitcode, data
Brett Cannona23810f2008-05-26 19:04:21 +0000556
557def getoutput(cmd):
558 """Return output (stdout or stderr) of executing cmd in a shell.
559
560 Like getstatusoutput(), except the exit status is ignored and the return
561 value is a string containing the command's output. Example:
562
563 >>> import subprocess
564 >>> subprocess.getoutput('ls /bin/ls')
565 '/bin/ls'
566 """
567 return getstatusoutput(cmd)[1]
568
569
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000570_PLATFORM_DEFAULT_CLOSE_FDS = object()
Gregory P. Smithf5604852010-12-13 06:45:02 +0000571
572
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000573class Popen(object):
Martin Panter4afdca02016-10-25 22:20:48 +0000574 """ Execute a child program in a new process.
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200575
Martin Panter4afdca02016-10-25 22:20:48 +0000576 For a complete description of the arguments see the Python documentation.
577
578 Arguments:
579 args: A string, or a sequence of program arguments.
580
581 bufsize: supplied as the buffering argument to the open() function when
582 creating the stdin/stdout/stderr pipe file objects
583
584 executable: A replacement program to execute.
585
586 stdin, stdout and stderr: These specify the executed programs' standard
587 input, standard output and standard error file handles, respectively.
588
589 preexec_fn: (POSIX only) An object to be called in the child process
590 just before the child is executed.
591
592 close_fds: Controls closing or inheriting of file descriptors.
593
594 shell: If true, the command will be executed through the shell.
595
596 cwd: Sets the current directory before the child is executed.
597
598 env: Defines the environment variables for the new process.
599
andyclegg7fed7bd2017-10-23 03:01:19 +0100600 text: If true, decode stdin, stdout and stderr using the given encoding
601 (if set) or the system default otherwise.
602
603 universal_newlines: Alias of text, provided for backwards compatibility.
Martin Panter4afdca02016-10-25 22:20:48 +0000604
605 startupinfo and creationflags (Windows only)
606
607 restore_signals (POSIX only)
608
609 start_new_session (POSIX only)
610
611 pass_fds (POSIX only)
612
Martin Panter3dca6242016-10-25 23:41:42 +0000613 encoding and errors: Text mode encoding and error handling to use for
614 file objects stdin, stdout and stderr.
615
Martin Panter4afdca02016-10-25 22:20:48 +0000616 Attributes:
617 stdin, stdout, stderr, pid, returncode
618 """
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200619 _child_created = False # Set here since __del__ checks it
620
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700621 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000622 stdin=None, stdout=None, stderr=None,
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000623 preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,
andyclegg7fed7bd2017-10-23 03:01:19 +0100624 shell=False, cwd=None, env=None, universal_newlines=None,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000625 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000626 restore_signals=True, start_new_session=False,
andyclegg7fed7bd2017-10-23 03:01:19 +0100627 pass_fds=(), *, encoding=None, errors=None, text=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000628 """Create new Popen instance."""
629 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700630 # Held while anything is calling waitpid before returncode has been
631 # updated to prevent clobbering returncode if wait() or poll() are
632 # called from multiple threads at once. After acquiring the lock,
633 # code must re-check self.returncode to see if another thread just
634 # finished a waitpid() call.
635 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000636
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400637 self._input = None
638 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000639 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700640 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000641 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000642 raise TypeError("bufsize must be an integer")
643
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700644 if _mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000645 if preexec_fn is not None:
646 raise ValueError("preexec_fn is not supported on Windows "
647 "platforms")
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000648 any_stdio_set = (stdin is not None or stdout is not None or
649 stderr is not None)
650 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
651 if any_stdio_set:
652 close_fds = False
653 else:
654 close_fds = True
655 elif close_fds and any_stdio_set:
656 raise ValueError(
657 "close_fds is not supported on Windows platforms"
658 " if you redirect stdin/stdout/stderr")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000659 else:
660 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000661 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
662 close_fds = True
663 if pass_fds and not close_fds:
664 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
665 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000666 if startupinfo is not None:
667 raise ValueError("startupinfo is only supported on Windows "
668 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000669 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000670 raise ValueError("creationflags is only supported on Windows "
671 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000672
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400673 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000674 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000675 self.stdout = None
676 self.stderr = None
677 self.pid = None
678 self.returncode = None
Steve Dower050acae2016-09-06 20:16:17 -0700679 self.encoding = encoding
680 self.errors = errors
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000681
andyclegg7fed7bd2017-10-23 03:01:19 +0100682 # Validate the combinations of text and universal_newlines
683 if (text is not None and universal_newlines is not None
684 and bool(universal_newlines) != bool(text)):
685 raise SubprocessError('Cannot disambiguate when both text '
686 'and universal_newlines are supplied but '
687 'different. Pass one or the other.')
688
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000689 # Input and output objects. The general principle is like
690 # this:
691 #
692 # Parent Child
693 # ------ -----
694 # p2cwrite ---stdin---> p2cread
695 # c2pread <--stdout--- c2pwrite
696 # errread <--stderr--- errwrite
697 #
698 # On POSIX, the child objects are file descriptors. On
699 # Windows, these are Windows file handles. The parent objects
700 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000701 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000702 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000703
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000704 (p2cread, p2cwrite,
705 c2pread, c2pwrite,
706 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
707
Antoine Pitrouc9982322011-01-04 19:07:07 +0000708 # We wrap OS handles *before* launching the child, otherwise a
709 # quickly terminating child could make our fds unwrappable
710 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000711
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700712 if _mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000713 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000714 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000715 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000716 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000717 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000718 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000719
andyclegg7fed7bd2017-10-23 03:01:19 +0100720 self.text_mode = encoding or errors or text or universal_newlines
Tim Peterse718f612004-10-12 21:51:32 +0000721
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700722 self._closed_child_pipe_fds = False
Steve Dower050acae2016-09-06 20:16:17 -0700723
Antoine Pitrouc9982322011-01-04 19:07:07 +0000724 try:
Steve Dower050acae2016-09-06 20:16:17 -0700725 if p2cwrite != -1:
726 self.stdin = io.open(p2cwrite, 'wb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100727 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700728 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
729 line_buffering=(bufsize == 1),
730 encoding=encoding, errors=errors)
731 if c2pread != -1:
732 self.stdout = io.open(c2pread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100733 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700734 self.stdout = io.TextIOWrapper(self.stdout,
735 encoding=encoding, errors=errors)
736 if errread != -1:
737 self.stderr = io.open(errread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100738 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700739 self.stderr = io.TextIOWrapper(self.stderr,
740 encoding=encoding, errors=errors)
741
Antoine Pitrouc9982322011-01-04 19:07:07 +0000742 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300743 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000744 startupinfo, creationflags, shell,
745 p2cread, p2cwrite,
746 c2pread, c2pwrite,
747 errread, errwrite,
748 restore_signals, start_new_session)
749 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800750 # Cleanup if the child failed starting.
751 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000752 try:
753 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200754 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800755 pass # Ignore EBADF or other errors.
756
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700757 if not self._closed_child_pipe_fds:
758 to_close = []
759 if stdin == PIPE:
760 to_close.append(p2cread)
761 if stdout == PIPE:
762 to_close.append(c2pwrite)
763 if stderr == PIPE:
764 to_close.append(errwrite)
765 if hasattr(self, '_devnull'):
766 to_close.append(self._devnull)
767 for fd in to_close:
768 try:
Segev Finer4d385172017-08-18 16:18:13 +0300769 if _mswindows and isinstance(fd, Handle):
770 fd.Close()
771 else:
772 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700773 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700774 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800775
Antoine Pitrouc9982322011-01-04 19:07:07 +0000776 raise
777
andyclegg7fed7bd2017-10-23 03:01:19 +0100778 @property
779 def universal_newlines(self):
780 # universal_newlines as retained as an alias of text_mode for API
luzpaza5293b42017-11-05 07:37:50 -0600781 # compatibility. bpo-31756
andyclegg7fed7bd2017-10-23 03:01:19 +0100782 return self.text_mode
783
784 @universal_newlines.setter
785 def universal_newlines(self, universal_newlines):
786 self.text_mode = bool(universal_newlines)
787
Steve Dower050acae2016-09-06 20:16:17 -0700788 def _translate_newlines(self, data, encoding, errors):
789 data = data.decode(encoding, errors)
Andrew Svetlov82860712012-08-19 22:13:41 +0300790 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000791
Brian Curtin79cdb662010-12-03 02:46:02 +0000792 def __enter__(self):
793 return self
794
795 def __exit__(self, type, value, traceback):
796 if self.stdout:
797 self.stdout.close()
798 if self.stderr:
799 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200800 try: # Flushing a BufferedWriter may raise an error
801 if self.stdin:
802 self.stdin.close()
803 finally:
804 # Wait for the process to terminate, to avoid zombies.
805 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000806
Victor Stinner9505b032017-01-06 10:44:44 +0100807 def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200808 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000809 # We didn't get to successfully create a child process.
810 return
Victor Stinner5a48e212016-05-20 12:11:15 +0200811 if self.returncode is None:
Victor Stinnerc206f1e2016-06-14 16:42:59 +0200812 # Not reading subprocess exit status creates a zombi process which
813 # is only destroyed at the parent python process exit
Victor Stinner9505b032017-01-06 10:44:44 +0100814 _warn("subprocess %s is still running" % self.pid,
815 ResourceWarning, source=self)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000816 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000817 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000818 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000819 # Child is still running, keep us alive until we can wait on it.
820 _active.append(self)
821
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200822 def _get_devnull(self):
823 if not hasattr(self, '_devnull'):
824 self._devnull = os.open(os.devnull, os.O_RDWR)
825 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000826
Victor Stinnera5e881d2015-01-14 17:07:59 +0100827 def _stdin_write(self, input):
828 if input:
829 try:
830 self.stdin.write(input)
831 except BrokenPipeError:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000832 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200833 except OSError as exc:
834 if exc.errno == errno.EINVAL:
835 # bpo-19612, bpo-30418: On Windows, stdin.write() fails
836 # with EINVAL if the child process exited or if the child
837 # process is still running but closed the pipe.
Victor Stinnera5e881d2015-01-14 17:07:59 +0100838 pass
839 else:
840 raise
Victor Stinnerd52aa312017-06-08 17:30:39 +0200841
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000842 try:
843 self.stdin.close()
844 except BrokenPipeError:
845 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200846 except OSError as exc:
847 if exc.errno == errno.EINVAL:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000848 pass
849 else:
850 raise
Victor Stinnera5e881d2015-01-14 17:07:59 +0100851
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400852 def communicate(self, input=None, timeout=None):
Joel Schaerer88031a92017-09-13 21:11:20 +0200853 """Interact with process: Send data to stdin and close it.
854 Read data from stdout and stderr, until end-of-file is
855 reached. Wait for process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +0000856
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400857 The optional "input" argument should be data to be sent to the
andyclegg7fed7bd2017-10-23 03:01:19 +0100858 child process, or None, if no data should be sent to the child.
859 communicate() returns a tuple (stdout, stderr).
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400860
andyclegg7fed7bd2017-10-23 03:01:19 +0100861 By default, all communication is in bytes, and therefore any
862 "input" should be bytes, and the (stdout, stderr) will be bytes.
863 If in text mode (indicated by self.text_mode), any "input" should
864 be a string, and (stdout, stderr) will be strings decoded
865 according to locale encoding, or by "encoding" if set. Text mode
866 is triggered by setting any of text, encoding, errors or
867 universal_newlines.
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400868 """
Peter Astrand23109f02005-03-03 20:28:59 +0000869
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400870 if self._communication_started and input:
871 raise ValueError("Cannot send input after starting communication")
872
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400873 # Optimization: If we are not worried about timeouts, we haven't
874 # started communicating, and we have one or zero pipes, using select()
875 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200876 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400877 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000878 stdout = None
879 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000880 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +0100881 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +0000882 elif self.stdout:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000883 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000884 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000885 elif self.stderr:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000886 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000887 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000888 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200889 else:
890 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +0200891 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +0200892 else:
893 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000894
Victor Stinner7a8d0812011-04-05 13:13:08 +0200895 try:
896 stdout, stderr = self._communicate(input, endtime, timeout)
897 finally:
898 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400899
Victor Stinner7a8d0812011-04-05 13:13:08 +0200900 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400901
902 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +0000903
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000904
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000905 def poll(self):
Martin Panter4afdca02016-10-25 22:20:48 +0000906 """Check if child process has terminated. Set and return returncode
907 attribute."""
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000908 return self._internal_poll()
909
910
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400911 def _remaining_time(self, endtime):
912 """Convenience for _communicate when computing timeouts."""
913 if endtime is None:
914 return None
915 else:
Victor Stinner949d8c92012-05-30 13:30:32 +0200916 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400917
918
Reid Kleckner2b228f02011-03-16 16:57:54 -0400919 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400920 """Convenience for checking if a timeout has expired."""
921 if endtime is None:
922 return
Victor Stinner949d8c92012-05-30 13:30:32 +0200923 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -0400924 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400925
926
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700927 if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000928 #
929 # Windows methods
930 #
931 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +0000932 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000933 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
934 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000935 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000936 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +0000937
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000938 p2cread, p2cwrite = -1, -1
939 c2pread, c2pwrite = -1, -1
940 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000941
Peter Astrandd38ddf42005-02-10 08:32:50 +0000942 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200943 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000944 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200945 p2cread, _ = _winapi.CreatePipe(None, 0)
946 p2cread = Handle(p2cread)
947 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000948 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200949 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
950 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200951 elif stdin == DEVNULL:
952 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000953 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000954 p2cread = msvcrt.get_osfhandle(stdin)
955 else:
956 # Assuming file-like object
957 p2cread = msvcrt.get_osfhandle(stdin.fileno())
958 p2cread = self._make_inheritable(p2cread)
959
Peter Astrandd38ddf42005-02-10 08:32:50 +0000960 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200961 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000962 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200963 _, c2pwrite = _winapi.CreatePipe(None, 0)
964 c2pwrite = Handle(c2pwrite)
965 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000966 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200967 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
968 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200969 elif stdout == DEVNULL:
970 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000971 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000972 c2pwrite = msvcrt.get_osfhandle(stdout)
973 else:
974 # Assuming file-like object
975 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
976 c2pwrite = self._make_inheritable(c2pwrite)
977
Peter Astrandd38ddf42005-02-10 08:32:50 +0000978 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200979 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000980 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200981 _, errwrite = _winapi.CreatePipe(None, 0)
982 errwrite = Handle(errwrite)
983 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000984 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200985 errread, errwrite = _winapi.CreatePipe(None, 0)
986 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000987 elif stderr == STDOUT:
988 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200989 elif stderr == DEVNULL:
990 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000991 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000992 errwrite = msvcrt.get_osfhandle(stderr)
993 else:
994 # Assuming file-like object
995 errwrite = msvcrt.get_osfhandle(stderr.fileno())
996 errwrite = self._make_inheritable(errwrite)
997
998 return (p2cread, p2cwrite,
999 c2pread, c2pwrite,
1000 errread, errwrite)
1001
1002
1003 def _make_inheritable(self, handle):
1004 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001005 h = _winapi.DuplicateHandle(
1006 _winapi.GetCurrentProcess(), handle,
1007 _winapi.GetCurrentProcess(), 0, 1,
1008 _winapi.DUPLICATE_SAME_ACCESS)
1009 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001010
1011
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001012 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001013 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001014 startupinfo, creationflags, shell,
1015 p2cread, p2cwrite,
1016 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001017 errread, errwrite,
1018 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001019 """Execute program (MS Windows version)"""
1020
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001021 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001022
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001023 if not isinstance(args, str):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001024 args = list2cmdline(args)
1025
Peter Astrandc1d65362004-11-07 14:30:34 +00001026 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001027 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001028 startupinfo = STARTUPINFO()
Victor Stinnerb3693582010-05-21 20:13:12 +00001029 if -1 not in (p2cread, c2pwrite, errwrite):
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001030 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001031 startupinfo.hStdInput = p2cread
1032 startupinfo.hStdOutput = c2pwrite
1033 startupinfo.hStdError = errwrite
1034
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001035 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001036 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1037 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001038 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001039 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001040
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001041 # Start the process
1042 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001043 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001044 # no special security
1045 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001046 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001047 creationflags,
1048 env,
Benjamin Petersoncb90f262017-03-02 00:03:41 -08001049 os.fspath(cwd) if cwd is not None else None,
Tim Peterse8374a52004-10-13 03:15:00 +00001050 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001051 finally:
1052 # Child is launched. Close the parent's copy of those pipe
1053 # handles that only the child should have open. You need
1054 # to make sure that no handles to the write end of the
1055 # output pipe are maintained in this process or else the
1056 # pipe will not close when the child process exits and the
1057 # ReadFile will hang.
1058 if p2cread != -1:
1059 p2cread.Close()
1060 if c2pwrite != -1:
1061 c2pwrite.Close()
1062 if errwrite != -1:
1063 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001064 if hasattr(self, '_devnull'):
1065 os.close(self._devnull)
Segev Finer4d385172017-08-18 16:18:13 +03001066 # Prevent a double close of these handles/fds from __init__
1067 # on error.
1068 self._closed_child_pipe_fds = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001069
1070 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001071 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001072 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001073 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001074 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001075
Brett Cannon84df1e62010-05-14 00:33:40 +00001076 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001077 _WaitForSingleObject=_winapi.WaitForSingleObject,
1078 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1079 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001080 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001081 attribute.
1082
1083 This method is called by __del__, so it can only refer to objects
1084 in its local scope.
1085
1086 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001087 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001088 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1089 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001090 return self.returncode
1091
1092
Gregory P. Smith82604e02016-11-20 16:31:07 -08001093 def wait(self, timeout=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001094 """Wait for child process to terminate. Returns returncode
1095 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001096 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001097 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001098 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001099 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001100 if self.returncode is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001101 result = _winapi.WaitForSingleObject(self._handle,
1102 timeout_millis)
1103 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001104 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001105 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001106 return self.returncode
1107
1108
1109 def _readerthread(self, fh, buffer):
1110 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001111 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001112
1113
Reid Kleckner2b228f02011-03-16 16:57:54 -04001114 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001115 # Start reader threads feeding into a list hanging off of this
1116 # object, unless they've already been started.
1117 if self.stdout and not hasattr(self, "_stdout_buff"):
1118 self._stdout_buff = []
1119 self.stdout_thread = \
1120 threading.Thread(target=self._readerthread,
1121 args=(self.stdout, self._stdout_buff))
1122 self.stdout_thread.daemon = True
1123 self.stdout_thread.start()
1124 if self.stderr and not hasattr(self, "_stderr_buff"):
1125 self._stderr_buff = []
1126 self.stderr_thread = \
1127 threading.Thread(target=self._readerthread,
1128 args=(self.stderr, self._stderr_buff))
1129 self.stderr_thread.daemon = True
1130 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001131
1132 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001133 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001134
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001135 # Wait for the reader threads, or time out. If we time out, the
1136 # threads remain reading and the fds left open in case the user
1137 # calls communicate again.
1138 if self.stdout is not None:
1139 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001140 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001141 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001142 if self.stderr is not None:
1143 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001144 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001145 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001146
1147 # Collect the output from and close both pipes, now that we know
1148 # both have been read successfully.
1149 stdout = None
1150 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001151 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001152 stdout = self._stdout_buff
1153 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001154 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001155 stderr = self._stderr_buff
1156 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001157
1158 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001159 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001160 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001161 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001162 stderr = stderr[0]
1163
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001164 return (stdout, stderr)
1165
Christian Heimesa342c012008-04-20 21:01:16 +00001166 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001167 """Send a signal to the process."""
1168 # Don't signal a process that we know has already died.
1169 if self.returncode is not None:
1170 return
Christian Heimesa342c012008-04-20 21:01:16 +00001171 if sig == signal.SIGTERM:
1172 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001173 elif sig == signal.CTRL_C_EVENT:
1174 os.kill(self.pid, signal.CTRL_C_EVENT)
1175 elif sig == signal.CTRL_BREAK_EVENT:
1176 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001177 else:
Brian Curtin19651362010-09-07 13:24:38 +00001178 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001179
1180 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001181 """Terminates the process."""
1182 # Don't terminate a process that we know has already died.
1183 if self.returncode is not None:
1184 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001185 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001186 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001187 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001188 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1189 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001190 rc = _winapi.GetExitCodeProcess(self._handle)
1191 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001192 raise
1193 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001194
1195 kill = terminate
1196
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001197 else:
1198 #
1199 # POSIX methods
1200 #
1201 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001202 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001203 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1204 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001205 p2cread, p2cwrite = -1, -1
1206 c2pread, c2pwrite = -1, -1
1207 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001208
Peter Astrandd38ddf42005-02-10 08:32:50 +00001209 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001210 pass
1211 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001212 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001213 elif stdin == DEVNULL:
1214 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001215 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001216 p2cread = stdin
1217 else:
1218 # Assuming file-like object
1219 p2cread = stdin.fileno()
1220
Peter Astrandd38ddf42005-02-10 08:32:50 +00001221 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001222 pass
1223 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001224 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001225 elif stdout == DEVNULL:
1226 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001227 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001228 c2pwrite = stdout
1229 else:
1230 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001231 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001232
Peter Astrandd38ddf42005-02-10 08:32:50 +00001233 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001234 pass
1235 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001236 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001237 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001238 if c2pwrite != -1:
1239 errwrite = c2pwrite
1240 else: # child's stdout is not set, use parent's stdout
1241 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001242 elif stderr == DEVNULL:
1243 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001244 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001245 errwrite = stderr
1246 else:
1247 # Assuming file-like object
1248 errwrite = stderr.fileno()
1249
1250 return (p2cread, p2cwrite,
1251 c2pread, c2pwrite,
1252 errread, errwrite)
1253
1254
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001255 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001256 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001257 startupinfo, creationflags, shell,
1258 p2cread, p2cwrite,
1259 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001260 errread, errwrite,
1261 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001262 """Execute program (POSIX version)"""
1263
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001264 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001265 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001266 else:
1267 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001268
1269 if shell:
Xavier de Gayeb35fc622016-12-13 16:32:21 +01001270 # On Android the default shell is at '/system/bin/sh'.
1271 unix_shell = ('/system/bin/sh' if
1272 hasattr(sys, 'getandroidapilevel') else '/bin/sh')
1273 args = [unix_shell, "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001274 if executable:
1275 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001276
Peter Astrandd38ddf42005-02-10 08:32:50 +00001277 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001278 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001279 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001280
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001281 # For transferring possible exec failure from child to parent.
1282 # Data format: "exception name:hex errno:description"
1283 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001284 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001285 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1286 low_fds_to_close = []
1287 while errpipe_write < 3:
1288 low_fds_to_close.append(errpipe_write)
1289 errpipe_write = os.dup(errpipe_write)
1290 for low_fd in low_fds_to_close:
1291 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001292 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001293 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001294 # We must avoid complex work that could involve
1295 # malloc or free in the child process to avoid
1296 # potential deadlocks, thus we do all this here.
1297 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001298
Victor Stinner372b8382011-06-21 17:24:21 +02001299 if env is not None:
Serhiy Storchakad174d242017-06-23 19:39:27 +03001300 env_list = []
1301 for k, v in env.items():
1302 k = os.fsencode(k)
1303 if b'=' in k:
1304 raise ValueError("illegal environment variable name")
1305 env_list.append(k + b'=' + os.fsencode(v))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001306 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001307 env_list = None # Use execv instead of execve.
1308 executable = os.fsencode(executable)
1309 if os.path.dirname(executable):
1310 executable_list = (executable,)
1311 else:
1312 # This matches the behavior of os._execvpe().
1313 executable_list = tuple(
1314 os.path.join(os.fsencode(dir), executable)
1315 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001316 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001317 fds_to_keep.add(errpipe_write)
1318 self.pid = _posixsubprocess.fork_exec(
1319 args, executable_list,
Serhiy Storchaka66bffd12017-04-19 21:12:46 +03001320 close_fds, tuple(sorted(map(int, fds_to_keep))),
1321 cwd, env_list,
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001322 p2cread, p2cwrite, c2pread, c2pwrite,
1323 errread, errwrite,
1324 errpipe_read, errpipe_write,
1325 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001326 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001327 finally:
1328 # be sure the FD is closed no matter what
1329 os.close(errpipe_write)
1330
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001331 # self._devnull is not always defined.
1332 devnull_fd = getattr(self, '_devnull', None)
1333 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001334 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001335 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001336 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001337 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001338 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001339 if devnull_fd is not None:
1340 os.close(devnull_fd)
1341 # Prevent a double close of these fds from __init__ on error.
1342 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001343
1344 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001345 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001346 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001347 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001348 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001349 errpipe_data += part
1350 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001351 break
Facundo Batista10706e22009-06-19 20:34:30 +00001352 finally:
1353 # be sure the FD is closed no matter what
1354 os.close(errpipe_read)
1355
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001356 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001357 try:
Victor Stinnera58e2c52016-05-20 12:08:12 +02001358 pid, sts = os.waitpid(self.pid, 0)
1359 if pid == self.pid:
1360 self._handle_exitstatus(sts)
1361 else:
1362 self.returncode = sys.maxsize
Victor Stinnera5e881d2015-01-14 17:07:59 +01001363 except ChildProcessError:
1364 pass
Victor Stinnera58e2c52016-05-20 12:08:12 +02001365
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001366 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001367 exception_name, hex_errno, err_msg = (
1368 errpipe_data.split(b':', 2))
Ammar Askar3fc499b2017-09-06 02:41:30 -04001369 # The encoding here should match the encoding
1370 # written in by the subprocess implementations
1371 # like _posixsubprocess
1372 err_msg = err_msg.decode()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001373 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001374 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001375 hex_errno = b'0'
Ammar Askar3fc499b2017-09-06 02:41:30 -04001376 err_msg = 'Bad exception data from child: {!r}'.format(
1377 bytes(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001378 child_exception_type = getattr(
1379 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001380 SubprocessError)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001381 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001382 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001383 child_exec_never_called = (err_msg == "noexec")
1384 if child_exec_never_called:
1385 err_msg = ""
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001386 # The error must be from chdir(cwd).
1387 err_filename = cwd
1388 else:
1389 err_filename = orig_executable
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001390 if errno_num != 0:
1391 err_msg = os.strerror(errno_num)
1392 if errno_num == errno.ENOENT:
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001393 err_msg += ': ' + repr(err_filename)
1394 raise child_exception_type(errno_num, err_msg, err_filename)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001395 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001396
1397
Brett Cannon84df1e62010-05-14 00:33:40 +00001398 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1399 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001400 _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
1401 _WSTOPSIG=os.WSTOPSIG):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001402 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001403 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001404 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001405 if _WIFSIGNALED(sts):
1406 self.returncode = -_WTERMSIG(sts)
1407 elif _WIFEXITED(sts):
1408 self.returncode = _WEXITSTATUS(sts)
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001409 elif _WIFSTOPPED(sts):
1410 self.returncode = -_WSTOPSIG(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001411 else:
1412 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001413 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001414
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001415
Brett Cannon84df1e62010-05-14 00:33:40 +00001416 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001417 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001418 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001419 attribute.
1420
1421 This method is called by __del__, so it cannot reference anything
1422 outside of the local scope (nor can any methods it calls).
1423
1424 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001425 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001426 if not self._waitpid_lock.acquire(False):
1427 # Something else is busy calling waitpid. Don't allow two
1428 # at once. We know nothing yet.
1429 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001430 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001431 if self.returncode is not None:
1432 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001433 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001434 if pid == self.pid:
1435 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001436 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001437 if _deadstate is not None:
1438 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001439 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001440 # This happens if SIGCLD is set to be ignored or
1441 # waiting for child processes has otherwise been
1442 # disabled for our process. This child is dead, we
1443 # can't get the status.
1444 # http://bugs.python.org/issue15756
1445 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001446 finally:
1447 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001448 return self.returncode
1449
1450
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001451 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001452 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001453 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001454 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001455 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001456 # This happens if SIGCLD is set to be ignored or waiting
1457 # for child processes has otherwise been disabled for our
1458 # process. This child is dead, we can't get the status.
1459 pid = self.pid
1460 sts = 0
1461 return (pid, sts)
1462
1463
Gregory P. Smith82604e02016-11-20 16:31:07 -08001464 def wait(self, timeout=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001465 """Wait for child process to terminate. Returns returncode
1466 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001467 if self.returncode is not None:
1468 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001469
Gregory P. Smith82604e02016-11-20 16:31:07 -08001470 if timeout is not None:
1471 endtime = _time() + timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001472 # Enter a busy loop if we have a timeout. This busy loop was
1473 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1474 delay = 0.0005 # 500 us -> initial delay of 1 ms
1475 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001476 if self._waitpid_lock.acquire(False):
1477 try:
1478 if self.returncode is not None:
1479 break # Another thread waited.
1480 (pid, sts) = self._try_wait(os.WNOHANG)
1481 assert pid == self.pid or pid == 0
1482 if pid == self.pid:
1483 self._handle_exitstatus(sts)
1484 break
1485 finally:
1486 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001487 remaining = self._remaining_time(endtime)
1488 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001489 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001490 delay = min(delay * 2, remaining, .05)
1491 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001492 else:
1493 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001494 with self._waitpid_lock:
1495 if self.returncode is not None:
1496 break # Another thread waited.
1497 (pid, sts) = self._try_wait(0)
1498 # Check the pid and loop as waitpid has been known to
1499 # return 0 even without WNOHANG in odd situations.
1500 # http://bugs.python.org/issue14396.
1501 if pid == self.pid:
1502 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001503 return self.returncode
1504
1505
Reid Kleckner2b228f02011-03-16 16:57:54 -04001506 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001507 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001508 # Flush stdio buffer. This might block, if the user has
1509 # been writing to .stdin in an uncontrolled fashion.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001510 try:
1511 self.stdin.flush()
1512 except BrokenPipeError:
1513 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001514 if not input:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001515 try:
1516 self.stdin.close()
1517 except BrokenPipeError:
1518 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001519
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001520 stdout = None
1521 stderr = None
1522
1523 # Only create this mapping if we haven't already.
1524 if not self._communication_started:
1525 self._fileobj2output = {}
1526 if self.stdout:
1527 self._fileobj2output[self.stdout] = []
1528 if self.stderr:
1529 self._fileobj2output[self.stderr] = []
1530
1531 if self.stdout:
1532 stdout = self._fileobj2output[self.stdout]
1533 if self.stderr:
1534 stderr = self._fileobj2output[self.stderr]
1535
1536 self._save_input(input)
1537
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001538 if self._input:
1539 input_view = memoryview(self._input)
1540
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001541 with _PopenSelector() as selector:
1542 if self.stdin and input:
1543 selector.register(self.stdin, selectors.EVENT_WRITE)
1544 if self.stdout:
1545 selector.register(self.stdout, selectors.EVENT_READ)
1546 if self.stderr:
1547 selector.register(self.stderr, selectors.EVENT_READ)
1548
1549 while selector.get_map():
1550 timeout = self._remaining_time(endtime)
1551 if timeout is not None and timeout < 0:
1552 raise TimeoutExpired(self.args, orig_timeout)
1553
1554 ready = selector.select(timeout)
1555 self._check_timeout(endtime, orig_timeout)
1556
1557 # XXX Rewrite these to use non-blocking I/O on the file
1558 # objects; they are no longer using C stdio!
1559
1560 for key, events in ready:
1561 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001562 chunk = input_view[self._input_offset :
1563 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001564 try:
1565 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001566 except BrokenPipeError:
1567 selector.unregister(key.fileobj)
1568 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001569 else:
1570 if self._input_offset >= len(self._input):
1571 selector.unregister(key.fileobj)
1572 key.fileobj.close()
1573 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001574 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001575 if not data:
1576 selector.unregister(key.fileobj)
1577 key.fileobj.close()
1578 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001579
1580 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001581
1582 # All data exchanged. Translate lists into strings.
1583 if stdout is not None:
1584 stdout = b''.join(stdout)
1585 if stderr is not None:
1586 stderr = b''.join(stderr)
1587
1588 # Translate newlines, if requested.
1589 # This also turns bytes into strings.
andyclegg7fed7bd2017-10-23 03:01:19 +01001590 if self.text_mode:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001591 if stdout is not None:
1592 stdout = self._translate_newlines(stdout,
Steve Dower050acae2016-09-06 20:16:17 -07001593 self.stdout.encoding,
1594 self.stdout.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001595 if stderr is not None:
1596 stderr = self._translate_newlines(stderr,
Steve Dower050acae2016-09-06 20:16:17 -07001597 self.stderr.encoding,
1598 self.stderr.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001599
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001600 return (stdout, stderr)
1601
1602
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001603 def _save_input(self, input):
1604 # This method is called from the _communicate_with_*() methods
1605 # so that if we time out while communicating, we can continue
1606 # sending input if we retry.
1607 if self.stdin and self._input is None:
1608 self._input_offset = 0
1609 self._input = input
andyclegg7fed7bd2017-10-23 03:01:19 +01001610 if input is not None and self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -07001611 self._input = self._input.encode(self.stdin.encoding,
1612 self.stdin.errors)
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001613
1614
Christian Heimesa342c012008-04-20 21:01:16 +00001615 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001616 """Send a signal to the process."""
1617 # Skip signalling a process that we know has already died.
1618 if self.returncode is None:
1619 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00001620
1621 def terminate(self):
1622 """Terminate the process with SIGTERM
1623 """
1624 self.send_signal(signal.SIGTERM)
1625
1626 def kill(self):
1627 """Kill the process with SIGKILL
1628 """
1629 self.send_signal(signal.SIGKILL)