blob: 97b449365efdccc1c1ae90855ae9d9ced75effe0 [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
265 warnoptions = sys.warnoptions
266 xoptions = getattr(sys, '_xoptions', {})
267 if 'dev' in xoptions and warnoptions and warnoptions[-1] == 'default':
268 # special case: -X dev adds 'default' to sys.warnoptions
269 warnoptions = warnoptions[:-1]
270 for opt in warnoptions:
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200271 args.append('-W' + opt)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800272
273 # -X options
274 if 'dev' in xoptions:
275 args.extend(('-X', 'dev'))
276 for opt in ('faulthandler', 'tracemalloc', 'importtime',
277 'showalloccount', 'showrefcount'):
278 if opt in xoptions:
279 value = xoptions[opt]
280 if value is True:
281 arg = opt
282 else:
283 arg = '%s=%s' % (opt, value)
284 args.extend(('-X', arg))
285
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200286 return args
287
288
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400289def call(*popenargs, timeout=None, **kwargs):
290 """Run command with arguments. Wait for command to complete or
291 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000292
293 The arguments are the same as for the Popen constructor. Example:
294
295 retcode = call(["ls", "-l"])
296 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200297 with Popen(*popenargs, **kwargs) as p:
298 try:
299 return p.wait(timeout=timeout)
300 except:
301 p.kill()
302 p.wait()
303 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000304
305
Peter Astrand454f7672005-01-01 09:36:35 +0000306def check_call(*popenargs, **kwargs):
307 """Run command with arguments. Wait for command to complete. If
308 the exit code was zero then return, otherwise raise
309 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000310 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000311
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400312 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000313
314 check_call(["ls", "-l"])
315 """
316 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000317 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000318 cmd = kwargs.get("args")
319 if cmd is None:
320 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000321 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000322 return 0
323
324
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400325def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700326 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000327
328 If the exit code was non-zero it raises a CalledProcessError. The
329 CalledProcessError object will have the return code in the returncode
330 attribute and output in the output attribute.
331
332 The arguments are the same as for the Popen constructor. Example:
333
334 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000335 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000336
337 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000338 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000339
340 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000341 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000342 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000343 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700344
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300345 There is an additional optional argument, "input", allowing you to
346 pass a string to the subprocess's stdin. If you use this argument
347 you may not also use the Popen constructor's "stdin" argument, as
348 it too will be used internally. Example:
349
350 >>> check_output(["sed", "-e", "s/foo/bar/"],
351 ... input=b"when in the course of fooman events\n")
352 b'when in the course of barman events\n'
353
andyclegg7fed7bd2017-10-23 03:01:19 +0100354 By default, all communication is in bytes, and therefore any "input"
355 should be bytes, and the return value wil be bytes. If in text mode,
356 any "input" should be a string, and the return value will be a string
357 decoded according to locale encoding, or by "encoding" if set. Text mode
358 is triggered by setting any of text, encoding, errors or universal_newlines.
Georg Brandlf9734072008-12-07 15:30:06 +0000359 """
360 if 'stdout' in kwargs:
361 raise ValueError('stdout argument not allowed, it will be overridden.')
Gregory P. Smith6e730002015-04-14 16:14:25 -0700362
363 if 'input' in kwargs and kwargs['input'] is None:
364 # Explicitly passing input=None was previously equivalent to passing an
365 # empty string. That is maintained here for backwards compatibility.
366 kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
367
368 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
369 **kwargs).stdout
370
371
372class CompletedProcess(object):
373 """A process that has finished running.
374
375 This is returned by run().
376
377 Attributes:
378 args: The list or str args passed to run().
379 returncode: The exit code of the process, negative for signals.
380 stdout: The standard output (None if not captured).
381 stderr: The standard error (None if not captured).
382 """
383 def __init__(self, args, returncode, stdout=None, stderr=None):
384 self.args = args
385 self.returncode = returncode
386 self.stdout = stdout
387 self.stderr = stderr
388
389 def __repr__(self):
390 args = ['args={!r}'.format(self.args),
391 'returncode={!r}'.format(self.returncode)]
392 if self.stdout is not None:
393 args.append('stdout={!r}'.format(self.stdout))
394 if self.stderr is not None:
395 args.append('stderr={!r}'.format(self.stderr))
396 return "{}({})".format(type(self).__name__, ', '.join(args))
397
398 def check_returncode(self):
399 """Raise CalledProcessError if the exit code is non-zero."""
400 if self.returncode:
401 raise CalledProcessError(self.returncode, self.args, self.stdout,
402 self.stderr)
403
404
405def run(*popenargs, input=None, timeout=None, check=False, **kwargs):
406 """Run command with arguments and return a CompletedProcess instance.
407
408 The returned instance will have attributes args, returncode, stdout and
409 stderr. By default, stdout and stderr are not captured, and those attributes
410 will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.
411
412 If check is True and the exit code was non-zero, it raises a
413 CalledProcessError. The CalledProcessError object will have the return code
414 in the returncode attribute, and output & stderr attributes if those streams
415 were captured.
416
417 If timeout is given, and the process takes too long, a TimeoutExpired
418 exception will be raised.
419
420 There is an optional argument "input", allowing you to
andyclegg7fed7bd2017-10-23 03:01:19 +0100421 pass bytes or a string to the subprocess's stdin. If you use this argument
Gregory P. Smith6e730002015-04-14 16:14:25 -0700422 you may not also use the Popen constructor's "stdin" argument, as
423 it will be used internally.
424
andyclegg7fed7bd2017-10-23 03:01:19 +0100425 By default, all communication is in bytes, and therefore any "input" should
426 be bytes, and the stdout and stderr will be bytes. If in text mode, any
427 "input" should be a string, and stdout and stderr will be strings decoded
428 according to locale encoding, or by "encoding" if set. Text mode is
429 triggered by setting any of text, encoding, errors or universal_newlines.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700430
andyclegg7fed7bd2017-10-23 03:01:19 +0100431 The other arguments are the same as for the Popen constructor.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700432 """
433 if input is not None:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300434 if 'stdin' in kwargs:
435 raise ValueError('stdin and input arguments may not both be used.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300436 kwargs['stdin'] = PIPE
Gregory P. Smith6e730002015-04-14 16:14:25 -0700437
438 with Popen(*popenargs, **kwargs) as process:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200439 try:
Gregory P. Smith6e730002015-04-14 16:14:25 -0700440 stdout, stderr = process.communicate(input, timeout=timeout)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200441 except TimeoutExpired:
442 process.kill()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700443 stdout, stderr = process.communicate()
444 raise TimeoutExpired(process.args, timeout, output=stdout,
445 stderr=stderr)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200446 except:
447 process.kill()
448 process.wait()
449 raise
450 retcode = process.poll()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700451 if check and retcode:
452 raise CalledProcessError(retcode, process.args,
453 output=stdout, stderr=stderr)
454 return CompletedProcess(process.args, retcode, stdout, stderr)
Peter Astrand454f7672005-01-01 09:36:35 +0000455
456
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000457def list2cmdline(seq):
458 """
459 Translate a sequence of arguments into a command line
460 string, using the same rules as the MS C runtime:
461
462 1) Arguments are delimited by white space, which is either a
463 space or a tab.
464
465 2) A string surrounded by double quotation marks is
466 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000467 contained within. A quoted string can be embedded in an
468 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000469
470 3) A double quotation mark preceded by a backslash is
471 interpreted as a literal double quotation mark.
472
473 4) Backslashes are interpreted literally, unless they
474 immediately precede a double quotation mark.
475
476 5) If backslashes immediately precede a double quotation mark,
477 every pair of backslashes is interpreted as a literal
478 backslash. If the number of backslashes is odd, the last
479 backslash escapes the next double quotation mark as
480 described in rule 3.
481 """
482
483 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000484 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
485 # or search http://msdn.microsoft.com for
486 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000487 result = []
488 needquote = False
489 for arg in seq:
490 bs_buf = []
491
492 # Add a space to separate this argument from the others
493 if result:
494 result.append(' ')
495
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000496 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000497 if needquote:
498 result.append('"')
499
500 for c in arg:
501 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000502 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000503 bs_buf.append(c)
504 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000505 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000506 result.append('\\' * len(bs_buf)*2)
507 bs_buf = []
508 result.append('\\"')
509 else:
510 # Normal char
511 if bs_buf:
512 result.extend(bs_buf)
513 bs_buf = []
514 result.append(c)
515
Christian Heimesfdab48e2008-01-20 09:06:41 +0000516 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000517 if bs_buf:
518 result.extend(bs_buf)
519
520 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000521 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000522 result.append('"')
523
524 return ''.join(result)
525
526
Brett Cannona23810f2008-05-26 19:04:21 +0000527# Various tools for executing commands and looking at their output and status.
528#
Brett Cannona23810f2008-05-26 19:04:21 +0000529
530def getstatusoutput(cmd):
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700531 """Return (exitcode, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000532
Tim Golden60798142013-11-05 12:57:25 +0000533 Execute the string 'cmd' in a shell with 'check_output' and
Steve Dower050acae2016-09-06 20:16:17 -0700534 return a 2-tuple (status, output). The locale encoding is used
535 to decode the output and process newlines.
Tim Golden60798142013-11-05 12:57:25 +0000536
537 A trailing newline is stripped from the output.
538 The exit status for the command can be interpreted
539 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000540
541 >>> import subprocess
542 >>> subprocess.getstatusoutput('ls /bin/ls')
543 (0, '/bin/ls')
544 >>> subprocess.getstatusoutput('cat /bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700545 (1, 'cat: /bin/junk: No such file or directory')
Brett Cannona23810f2008-05-26 19:04:21 +0000546 >>> subprocess.getstatusoutput('/bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700547 (127, 'sh: /bin/junk: not found')
548 >>> subprocess.getstatusoutput('/bin/kill $$')
549 (-15, '')
Brett Cannona23810f2008-05-26 19:04:21 +0000550 """
Tim Goldene0041752013-11-03 12:53:17 +0000551 try:
andyclegg7fed7bd2017-10-23 03:01:19 +0100552 data = check_output(cmd, shell=True, text=True, stderr=STDOUT)
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700553 exitcode = 0
Tim Goldene0041752013-11-03 12:53:17 +0000554 except CalledProcessError as ex:
555 data = ex.output
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700556 exitcode = ex.returncode
Tim Goldene0041752013-11-03 12:53:17 +0000557 if data[-1:] == '\n':
558 data = data[:-1]
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700559 return exitcode, data
Brett Cannona23810f2008-05-26 19:04:21 +0000560
561def getoutput(cmd):
562 """Return output (stdout or stderr) of executing cmd in a shell.
563
564 Like getstatusoutput(), except the exit status is ignored and the return
565 value is a string containing the command's output. Example:
566
567 >>> import subprocess
568 >>> subprocess.getoutput('ls /bin/ls')
569 '/bin/ls'
570 """
571 return getstatusoutput(cmd)[1]
572
573
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000574_PLATFORM_DEFAULT_CLOSE_FDS = object()
Gregory P. Smithf5604852010-12-13 06:45:02 +0000575
576
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000577class Popen(object):
Martin Panter4afdca02016-10-25 22:20:48 +0000578 """ Execute a child program in a new process.
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200579
Martin Panter4afdca02016-10-25 22:20:48 +0000580 For a complete description of the arguments see the Python documentation.
581
582 Arguments:
583 args: A string, or a sequence of program arguments.
584
585 bufsize: supplied as the buffering argument to the open() function when
586 creating the stdin/stdout/stderr pipe file objects
587
588 executable: A replacement program to execute.
589
590 stdin, stdout and stderr: These specify the executed programs' standard
591 input, standard output and standard error file handles, respectively.
592
593 preexec_fn: (POSIX only) An object to be called in the child process
594 just before the child is executed.
595
596 close_fds: Controls closing or inheriting of file descriptors.
597
598 shell: If true, the command will be executed through the shell.
599
600 cwd: Sets the current directory before the child is executed.
601
602 env: Defines the environment variables for the new process.
603
andyclegg7fed7bd2017-10-23 03:01:19 +0100604 text: If true, decode stdin, stdout and stderr using the given encoding
605 (if set) or the system default otherwise.
606
607 universal_newlines: Alias of text, provided for backwards compatibility.
Martin Panter4afdca02016-10-25 22:20:48 +0000608
609 startupinfo and creationflags (Windows only)
610
611 restore_signals (POSIX only)
612
613 start_new_session (POSIX only)
614
615 pass_fds (POSIX only)
616
Martin Panter3dca6242016-10-25 23:41:42 +0000617 encoding and errors: Text mode encoding and error handling to use for
618 file objects stdin, stdout and stderr.
619
Martin Panter4afdca02016-10-25 22:20:48 +0000620 Attributes:
621 stdin, stdout, stderr, pid, returncode
622 """
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200623 _child_created = False # Set here since __del__ checks it
624
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700625 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000626 stdin=None, stdout=None, stderr=None,
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000627 preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,
andyclegg7fed7bd2017-10-23 03:01:19 +0100628 shell=False, cwd=None, env=None, universal_newlines=None,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000629 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000630 restore_signals=True, start_new_session=False,
andyclegg7fed7bd2017-10-23 03:01:19 +0100631 pass_fds=(), *, encoding=None, errors=None, text=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000632 """Create new Popen instance."""
633 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700634 # Held while anything is calling waitpid before returncode has been
635 # updated to prevent clobbering returncode if wait() or poll() are
636 # called from multiple threads at once. After acquiring the lock,
637 # code must re-check self.returncode to see if another thread just
638 # finished a waitpid() call.
639 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000640
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400641 self._input = None
642 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000643 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700644 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000645 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000646 raise TypeError("bufsize must be an integer")
647
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700648 if _mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000649 if preexec_fn is not None:
650 raise ValueError("preexec_fn is not supported on Windows "
651 "platforms")
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000652 any_stdio_set = (stdin is not None or stdout is not None or
653 stderr is not None)
654 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
655 if any_stdio_set:
656 close_fds = False
657 else:
658 close_fds = True
659 elif close_fds and any_stdio_set:
660 raise ValueError(
661 "close_fds is not supported on Windows platforms"
662 " if you redirect stdin/stdout/stderr")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000663 else:
664 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000665 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
666 close_fds = True
667 if pass_fds and not close_fds:
668 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
669 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000670 if startupinfo is not None:
671 raise ValueError("startupinfo is only supported on Windows "
672 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000673 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000674 raise ValueError("creationflags is only supported on Windows "
675 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000676
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400677 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000678 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000679 self.stdout = None
680 self.stderr = None
681 self.pid = None
682 self.returncode = None
Steve Dower050acae2016-09-06 20:16:17 -0700683 self.encoding = encoding
684 self.errors = errors
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000685
andyclegg7fed7bd2017-10-23 03:01:19 +0100686 # Validate the combinations of text and universal_newlines
687 if (text is not None and universal_newlines is not None
688 and bool(universal_newlines) != bool(text)):
689 raise SubprocessError('Cannot disambiguate when both text '
690 'and universal_newlines are supplied but '
691 'different. Pass one or the other.')
692
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000693 # Input and output objects. The general principle is like
694 # this:
695 #
696 # Parent Child
697 # ------ -----
698 # p2cwrite ---stdin---> p2cread
699 # c2pread <--stdout--- c2pwrite
700 # errread <--stderr--- errwrite
701 #
702 # On POSIX, the child objects are file descriptors. On
703 # Windows, these are Windows file handles. The parent objects
704 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000705 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000706 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000707
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000708 (p2cread, p2cwrite,
709 c2pread, c2pwrite,
710 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
711
Antoine Pitrouc9982322011-01-04 19:07:07 +0000712 # We wrap OS handles *before* launching the child, otherwise a
713 # quickly terminating child could make our fds unwrappable
714 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000715
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700716 if _mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000717 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000718 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000719 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000720 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000721 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000722 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000723
andyclegg7fed7bd2017-10-23 03:01:19 +0100724 self.text_mode = encoding or errors or text or universal_newlines
Tim Peterse718f612004-10-12 21:51:32 +0000725
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700726 self._closed_child_pipe_fds = False
Steve Dower050acae2016-09-06 20:16:17 -0700727
Antoine Pitrouc9982322011-01-04 19:07:07 +0000728 try:
Steve Dower050acae2016-09-06 20:16:17 -0700729 if p2cwrite != -1:
730 self.stdin = io.open(p2cwrite, 'wb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100731 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700732 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
733 line_buffering=(bufsize == 1),
734 encoding=encoding, errors=errors)
735 if c2pread != -1:
736 self.stdout = io.open(c2pread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100737 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700738 self.stdout = io.TextIOWrapper(self.stdout,
739 encoding=encoding, errors=errors)
740 if errread != -1:
741 self.stderr = io.open(errread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100742 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700743 self.stderr = io.TextIOWrapper(self.stderr,
744 encoding=encoding, errors=errors)
745
Antoine Pitrouc9982322011-01-04 19:07:07 +0000746 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300747 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000748 startupinfo, creationflags, shell,
749 p2cread, p2cwrite,
750 c2pread, c2pwrite,
751 errread, errwrite,
752 restore_signals, start_new_session)
753 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800754 # Cleanup if the child failed starting.
755 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000756 try:
757 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200758 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800759 pass # Ignore EBADF or other errors.
760
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700761 if not self._closed_child_pipe_fds:
762 to_close = []
763 if stdin == PIPE:
764 to_close.append(p2cread)
765 if stdout == PIPE:
766 to_close.append(c2pwrite)
767 if stderr == PIPE:
768 to_close.append(errwrite)
769 if hasattr(self, '_devnull'):
770 to_close.append(self._devnull)
771 for fd in to_close:
772 try:
Segev Finer4d385172017-08-18 16:18:13 +0300773 if _mswindows and isinstance(fd, Handle):
774 fd.Close()
775 else:
776 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700777 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700778 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800779
Antoine Pitrouc9982322011-01-04 19:07:07 +0000780 raise
781
andyclegg7fed7bd2017-10-23 03:01:19 +0100782 @property
783 def universal_newlines(self):
784 # universal_newlines as retained as an alias of text_mode for API
luzpaza5293b42017-11-05 07:37:50 -0600785 # compatibility. bpo-31756
andyclegg7fed7bd2017-10-23 03:01:19 +0100786 return self.text_mode
787
788 @universal_newlines.setter
789 def universal_newlines(self, universal_newlines):
790 self.text_mode = bool(universal_newlines)
791
Steve Dower050acae2016-09-06 20:16:17 -0700792 def _translate_newlines(self, data, encoding, errors):
793 data = data.decode(encoding, errors)
Andrew Svetlov82860712012-08-19 22:13:41 +0300794 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000795
Brian Curtin79cdb662010-12-03 02:46:02 +0000796 def __enter__(self):
797 return self
798
799 def __exit__(self, type, value, traceback):
800 if self.stdout:
801 self.stdout.close()
802 if self.stderr:
803 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200804 try: # Flushing a BufferedWriter may raise an error
805 if self.stdin:
806 self.stdin.close()
807 finally:
808 # Wait for the process to terminate, to avoid zombies.
809 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000810
Victor Stinner9505b032017-01-06 10:44:44 +0100811 def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200812 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000813 # We didn't get to successfully create a child process.
814 return
Victor Stinner5a48e212016-05-20 12:11:15 +0200815 if self.returncode is None:
Victor Stinnerc206f1e2016-06-14 16:42:59 +0200816 # Not reading subprocess exit status creates a zombi process which
817 # is only destroyed at the parent python process exit
Victor Stinner9505b032017-01-06 10:44:44 +0100818 _warn("subprocess %s is still running" % self.pid,
819 ResourceWarning, source=self)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000820 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000821 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000822 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000823 # Child is still running, keep us alive until we can wait on it.
824 _active.append(self)
825
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200826 def _get_devnull(self):
827 if not hasattr(self, '_devnull'):
828 self._devnull = os.open(os.devnull, os.O_RDWR)
829 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000830
Victor Stinnera5e881d2015-01-14 17:07:59 +0100831 def _stdin_write(self, input):
832 if input:
833 try:
834 self.stdin.write(input)
835 except BrokenPipeError:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000836 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200837 except OSError as exc:
838 if exc.errno == errno.EINVAL:
839 # bpo-19612, bpo-30418: On Windows, stdin.write() fails
840 # with EINVAL if the child process exited or if the child
841 # process is still running but closed the pipe.
Victor Stinnera5e881d2015-01-14 17:07:59 +0100842 pass
843 else:
844 raise
Victor Stinnerd52aa312017-06-08 17:30:39 +0200845
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000846 try:
847 self.stdin.close()
848 except BrokenPipeError:
849 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200850 except OSError as exc:
851 if exc.errno == errno.EINVAL:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000852 pass
853 else:
854 raise
Victor Stinnera5e881d2015-01-14 17:07:59 +0100855
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400856 def communicate(self, input=None, timeout=None):
Joel Schaerer88031a92017-09-13 21:11:20 +0200857 """Interact with process: Send data to stdin and close it.
858 Read data from stdout and stderr, until end-of-file is
859 reached. Wait for process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +0000860
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400861 The optional "input" argument should be data to be sent to the
andyclegg7fed7bd2017-10-23 03:01:19 +0100862 child process, or None, if no data should be sent to the child.
863 communicate() returns a tuple (stdout, stderr).
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400864
andyclegg7fed7bd2017-10-23 03:01:19 +0100865 By default, all communication is in bytes, and therefore any
866 "input" should be bytes, and the (stdout, stderr) will be bytes.
867 If in text mode (indicated by self.text_mode), any "input" should
868 be a string, and (stdout, stderr) will be strings decoded
869 according to locale encoding, or by "encoding" if set. Text mode
870 is triggered by setting any of text, encoding, errors or
871 universal_newlines.
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400872 """
Peter Astrand23109f02005-03-03 20:28:59 +0000873
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400874 if self._communication_started and input:
875 raise ValueError("Cannot send input after starting communication")
876
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400877 # Optimization: If we are not worried about timeouts, we haven't
878 # started communicating, and we have one or zero pipes, using select()
879 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200880 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400881 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000882 stdout = None
883 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000884 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +0100885 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +0000886 elif self.stdout:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000887 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000888 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000889 elif self.stderr:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000890 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000891 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000892 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200893 else:
894 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +0200895 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +0200896 else:
897 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000898
Victor Stinner7a8d0812011-04-05 13:13:08 +0200899 try:
900 stdout, stderr = self._communicate(input, endtime, timeout)
901 finally:
902 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400903
Victor Stinner7a8d0812011-04-05 13:13:08 +0200904 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400905
906 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +0000907
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000908
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000909 def poll(self):
Martin Panter4afdca02016-10-25 22:20:48 +0000910 """Check if child process has terminated. Set and return returncode
911 attribute."""
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000912 return self._internal_poll()
913
914
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400915 def _remaining_time(self, endtime):
916 """Convenience for _communicate when computing timeouts."""
917 if endtime is None:
918 return None
919 else:
Victor Stinner949d8c92012-05-30 13:30:32 +0200920 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400921
922
Reid Kleckner2b228f02011-03-16 16:57:54 -0400923 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400924 """Convenience for checking if a timeout has expired."""
925 if endtime is None:
926 return
Victor Stinner949d8c92012-05-30 13:30:32 +0200927 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -0400928 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400929
930
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700931 if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000932 #
933 # Windows methods
934 #
935 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +0000936 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000937 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
938 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000939 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000940 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +0000941
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000942 p2cread, p2cwrite = -1, -1
943 c2pread, c2pwrite = -1, -1
944 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000945
Peter Astrandd38ddf42005-02-10 08:32:50 +0000946 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200947 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000948 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200949 p2cread, _ = _winapi.CreatePipe(None, 0)
950 p2cread = Handle(p2cread)
951 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000952 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200953 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
954 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200955 elif stdin == DEVNULL:
956 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000957 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000958 p2cread = msvcrt.get_osfhandle(stdin)
959 else:
960 # Assuming file-like object
961 p2cread = msvcrt.get_osfhandle(stdin.fileno())
962 p2cread = self._make_inheritable(p2cread)
963
Peter Astrandd38ddf42005-02-10 08:32:50 +0000964 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200965 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000966 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200967 _, c2pwrite = _winapi.CreatePipe(None, 0)
968 c2pwrite = Handle(c2pwrite)
969 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000970 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200971 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
972 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200973 elif stdout == DEVNULL:
974 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000975 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000976 c2pwrite = msvcrt.get_osfhandle(stdout)
977 else:
978 # Assuming file-like object
979 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
980 c2pwrite = self._make_inheritable(c2pwrite)
981
Peter Astrandd38ddf42005-02-10 08:32:50 +0000982 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200983 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000984 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200985 _, errwrite = _winapi.CreatePipe(None, 0)
986 errwrite = Handle(errwrite)
987 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000988 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200989 errread, errwrite = _winapi.CreatePipe(None, 0)
990 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000991 elif stderr == STDOUT:
992 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200993 elif stderr == DEVNULL:
994 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000995 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000996 errwrite = msvcrt.get_osfhandle(stderr)
997 else:
998 # Assuming file-like object
999 errwrite = msvcrt.get_osfhandle(stderr.fileno())
1000 errwrite = self._make_inheritable(errwrite)
1001
1002 return (p2cread, p2cwrite,
1003 c2pread, c2pwrite,
1004 errread, errwrite)
1005
1006
1007 def _make_inheritable(self, handle):
1008 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001009 h = _winapi.DuplicateHandle(
1010 _winapi.GetCurrentProcess(), handle,
1011 _winapi.GetCurrentProcess(), 0, 1,
1012 _winapi.DUPLICATE_SAME_ACCESS)
1013 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001014
1015
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001016 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001017 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001018 startupinfo, creationflags, shell,
1019 p2cread, p2cwrite,
1020 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001021 errread, errwrite,
1022 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001023 """Execute program (MS Windows version)"""
1024
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001025 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001026
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001027 if not isinstance(args, str):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001028 args = list2cmdline(args)
1029
Peter Astrandc1d65362004-11-07 14:30:34 +00001030 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001031 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001032 startupinfo = STARTUPINFO()
Victor Stinnerb3693582010-05-21 20:13:12 +00001033 if -1 not in (p2cread, c2pwrite, errwrite):
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001034 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001035 startupinfo.hStdInput = p2cread
1036 startupinfo.hStdOutput = c2pwrite
1037 startupinfo.hStdError = errwrite
1038
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001039 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001040 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1041 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001042 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001043 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001044
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001045 # Start the process
1046 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001047 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001048 # no special security
1049 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001050 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001051 creationflags,
1052 env,
Benjamin Petersoncb90f262017-03-02 00:03:41 -08001053 os.fspath(cwd) if cwd is not None else None,
Tim Peterse8374a52004-10-13 03:15:00 +00001054 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001055 finally:
1056 # Child is launched. Close the parent's copy of those pipe
1057 # handles that only the child should have open. You need
1058 # to make sure that no handles to the write end of the
1059 # output pipe are maintained in this process or else the
1060 # pipe will not close when the child process exits and the
1061 # ReadFile will hang.
1062 if p2cread != -1:
1063 p2cread.Close()
1064 if c2pwrite != -1:
1065 c2pwrite.Close()
1066 if errwrite != -1:
1067 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001068 if hasattr(self, '_devnull'):
1069 os.close(self._devnull)
Segev Finer4d385172017-08-18 16:18:13 +03001070 # Prevent a double close of these handles/fds from __init__
1071 # on error.
1072 self._closed_child_pipe_fds = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001073
1074 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001075 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001076 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001077 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001078 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001079
Brett Cannon84df1e62010-05-14 00:33:40 +00001080 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001081 _WaitForSingleObject=_winapi.WaitForSingleObject,
1082 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1083 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001084 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001085 attribute.
1086
1087 This method is called by __del__, so it can only refer to objects
1088 in its local scope.
1089
1090 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001091 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001092 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1093 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001094 return self.returncode
1095
1096
Gregory P. Smith82604e02016-11-20 16:31:07 -08001097 def wait(self, timeout=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001098 """Wait for child process to terminate. Returns returncode
1099 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001100 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001101 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001102 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001103 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001104 if self.returncode is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001105 result = _winapi.WaitForSingleObject(self._handle,
1106 timeout_millis)
1107 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001108 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001109 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001110 return self.returncode
1111
1112
1113 def _readerthread(self, fh, buffer):
1114 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001115 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001116
1117
Reid Kleckner2b228f02011-03-16 16:57:54 -04001118 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001119 # Start reader threads feeding into a list hanging off of this
1120 # object, unless they've already been started.
1121 if self.stdout and not hasattr(self, "_stdout_buff"):
1122 self._stdout_buff = []
1123 self.stdout_thread = \
1124 threading.Thread(target=self._readerthread,
1125 args=(self.stdout, self._stdout_buff))
1126 self.stdout_thread.daemon = True
1127 self.stdout_thread.start()
1128 if self.stderr and not hasattr(self, "_stderr_buff"):
1129 self._stderr_buff = []
1130 self.stderr_thread = \
1131 threading.Thread(target=self._readerthread,
1132 args=(self.stderr, self._stderr_buff))
1133 self.stderr_thread.daemon = True
1134 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001135
1136 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001137 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001138
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001139 # Wait for the reader threads, or time out. If we time out, the
1140 # threads remain reading and the fds left open in case the user
1141 # calls communicate again.
1142 if self.stdout is not None:
1143 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001144 if self.stdout_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 if self.stderr is not None:
1147 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001148 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001149 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001150
1151 # Collect the output from and close both pipes, now that we know
1152 # both have been read successfully.
1153 stdout = None
1154 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001155 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001156 stdout = self._stdout_buff
1157 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001158 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001159 stderr = self._stderr_buff
1160 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001161
1162 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001163 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001164 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001165 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001166 stderr = stderr[0]
1167
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001168 return (stdout, stderr)
1169
Christian Heimesa342c012008-04-20 21:01:16 +00001170 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001171 """Send a signal to the process."""
1172 # Don't signal a process that we know has already died.
1173 if self.returncode is not None:
1174 return
Christian Heimesa342c012008-04-20 21:01:16 +00001175 if sig == signal.SIGTERM:
1176 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001177 elif sig == signal.CTRL_C_EVENT:
1178 os.kill(self.pid, signal.CTRL_C_EVENT)
1179 elif sig == signal.CTRL_BREAK_EVENT:
1180 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001181 else:
Brian Curtin19651362010-09-07 13:24:38 +00001182 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001183
1184 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001185 """Terminates the process."""
1186 # Don't terminate a process that we know has already died.
1187 if self.returncode is not None:
1188 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001189 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001190 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001191 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001192 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1193 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001194 rc = _winapi.GetExitCodeProcess(self._handle)
1195 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001196 raise
1197 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001198
1199 kill = terminate
1200
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001201 else:
1202 #
1203 # POSIX methods
1204 #
1205 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001206 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001207 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1208 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001209 p2cread, p2cwrite = -1, -1
1210 c2pread, c2pwrite = -1, -1
1211 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001212
Peter Astrandd38ddf42005-02-10 08:32:50 +00001213 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001214 pass
1215 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001216 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001217 elif stdin == DEVNULL:
1218 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001219 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001220 p2cread = stdin
1221 else:
1222 # Assuming file-like object
1223 p2cread = stdin.fileno()
1224
Peter Astrandd38ddf42005-02-10 08:32:50 +00001225 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001226 pass
1227 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001228 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001229 elif stdout == DEVNULL:
1230 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001231 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001232 c2pwrite = stdout
1233 else:
1234 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001235 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001236
Peter Astrandd38ddf42005-02-10 08:32:50 +00001237 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001238 pass
1239 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001240 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001241 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001242 if c2pwrite != -1:
1243 errwrite = c2pwrite
1244 else: # child's stdout is not set, use parent's stdout
1245 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001246 elif stderr == DEVNULL:
1247 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001248 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001249 errwrite = stderr
1250 else:
1251 # Assuming file-like object
1252 errwrite = stderr.fileno()
1253
1254 return (p2cread, p2cwrite,
1255 c2pread, c2pwrite,
1256 errread, errwrite)
1257
1258
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001259 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001260 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001261 startupinfo, creationflags, shell,
1262 p2cread, p2cwrite,
1263 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001264 errread, errwrite,
1265 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001266 """Execute program (POSIX version)"""
1267
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001268 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001269 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001270 else:
1271 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001272
1273 if shell:
Xavier de Gayeb35fc622016-12-13 16:32:21 +01001274 # On Android the default shell is at '/system/bin/sh'.
1275 unix_shell = ('/system/bin/sh' if
1276 hasattr(sys, 'getandroidapilevel') else '/bin/sh')
1277 args = [unix_shell, "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001278 if executable:
1279 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001280
Peter Astrandd38ddf42005-02-10 08:32:50 +00001281 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001282 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001283 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001284
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001285 # For transferring possible exec failure from child to parent.
1286 # Data format: "exception name:hex errno:description"
1287 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001288 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001289 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1290 low_fds_to_close = []
1291 while errpipe_write < 3:
1292 low_fds_to_close.append(errpipe_write)
1293 errpipe_write = os.dup(errpipe_write)
1294 for low_fd in low_fds_to_close:
1295 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001296 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001297 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001298 # We must avoid complex work that could involve
1299 # malloc or free in the child process to avoid
1300 # potential deadlocks, thus we do all this here.
1301 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001302
Victor Stinner372b8382011-06-21 17:24:21 +02001303 if env is not None:
Serhiy Storchakad174d242017-06-23 19:39:27 +03001304 env_list = []
1305 for k, v in env.items():
1306 k = os.fsencode(k)
1307 if b'=' in k:
1308 raise ValueError("illegal environment variable name")
1309 env_list.append(k + b'=' + os.fsencode(v))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001310 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001311 env_list = None # Use execv instead of execve.
1312 executable = os.fsencode(executable)
1313 if os.path.dirname(executable):
1314 executable_list = (executable,)
1315 else:
1316 # This matches the behavior of os._execvpe().
1317 executable_list = tuple(
1318 os.path.join(os.fsencode(dir), executable)
1319 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001320 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001321 fds_to_keep.add(errpipe_write)
1322 self.pid = _posixsubprocess.fork_exec(
1323 args, executable_list,
Serhiy Storchaka66bffd12017-04-19 21:12:46 +03001324 close_fds, tuple(sorted(map(int, fds_to_keep))),
1325 cwd, env_list,
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001326 p2cread, p2cwrite, c2pread, c2pwrite,
1327 errread, errwrite,
1328 errpipe_read, errpipe_write,
1329 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001330 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001331 finally:
1332 # be sure the FD is closed no matter what
1333 os.close(errpipe_write)
1334
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001335 # self._devnull is not always defined.
1336 devnull_fd = getattr(self, '_devnull', None)
1337 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001338 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001339 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001340 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001341 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001342 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001343 if devnull_fd is not None:
1344 os.close(devnull_fd)
1345 # Prevent a double close of these fds from __init__ on error.
1346 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001347
1348 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001349 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001350 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001351 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001352 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001353 errpipe_data += part
1354 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001355 break
Facundo Batista10706e22009-06-19 20:34:30 +00001356 finally:
1357 # be sure the FD is closed no matter what
1358 os.close(errpipe_read)
1359
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001360 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001361 try:
Victor Stinnera58e2c52016-05-20 12:08:12 +02001362 pid, sts = os.waitpid(self.pid, 0)
1363 if pid == self.pid:
1364 self._handle_exitstatus(sts)
1365 else:
1366 self.returncode = sys.maxsize
Victor Stinnera5e881d2015-01-14 17:07:59 +01001367 except ChildProcessError:
1368 pass
Victor Stinnera58e2c52016-05-20 12:08:12 +02001369
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001370 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001371 exception_name, hex_errno, err_msg = (
1372 errpipe_data.split(b':', 2))
Ammar Askar3fc499b2017-09-06 02:41:30 -04001373 # The encoding here should match the encoding
1374 # written in by the subprocess implementations
1375 # like _posixsubprocess
1376 err_msg = err_msg.decode()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001377 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001378 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001379 hex_errno = b'0'
Ammar Askar3fc499b2017-09-06 02:41:30 -04001380 err_msg = 'Bad exception data from child: {!r}'.format(
1381 bytes(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001382 child_exception_type = getattr(
1383 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001384 SubprocessError)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001385 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001386 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001387 child_exec_never_called = (err_msg == "noexec")
1388 if child_exec_never_called:
1389 err_msg = ""
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001390 # The error must be from chdir(cwd).
1391 err_filename = cwd
1392 else:
1393 err_filename = orig_executable
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001394 if errno_num != 0:
1395 err_msg = os.strerror(errno_num)
1396 if errno_num == errno.ENOENT:
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001397 err_msg += ': ' + repr(err_filename)
1398 raise child_exception_type(errno_num, err_msg, err_filename)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001399 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001400
1401
Brett Cannon84df1e62010-05-14 00:33:40 +00001402 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1403 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001404 _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
1405 _WSTOPSIG=os.WSTOPSIG):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001406 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001407 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001408 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001409 if _WIFSIGNALED(sts):
1410 self.returncode = -_WTERMSIG(sts)
1411 elif _WIFEXITED(sts):
1412 self.returncode = _WEXITSTATUS(sts)
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001413 elif _WIFSTOPPED(sts):
1414 self.returncode = -_WSTOPSIG(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001415 else:
1416 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001417 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001418
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001419
Brett Cannon84df1e62010-05-14 00:33:40 +00001420 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001421 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001422 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001423 attribute.
1424
1425 This method is called by __del__, so it cannot reference anything
1426 outside of the local scope (nor can any methods it calls).
1427
1428 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001429 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001430 if not self._waitpid_lock.acquire(False):
1431 # Something else is busy calling waitpid. Don't allow two
1432 # at once. We know nothing yet.
1433 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001434 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001435 if self.returncode is not None:
1436 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001437 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001438 if pid == self.pid:
1439 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001440 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001441 if _deadstate is not None:
1442 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001443 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001444 # This happens if SIGCLD is set to be ignored or
1445 # waiting for child processes has otherwise been
1446 # disabled for our process. This child is dead, we
1447 # can't get the status.
1448 # http://bugs.python.org/issue15756
1449 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001450 finally:
1451 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001452 return self.returncode
1453
1454
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001455 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001456 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001457 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001458 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001459 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001460 # This happens if SIGCLD is set to be ignored or waiting
1461 # for child processes has otherwise been disabled for our
1462 # process. This child is dead, we can't get the status.
1463 pid = self.pid
1464 sts = 0
1465 return (pid, sts)
1466
1467
Gregory P. Smith82604e02016-11-20 16:31:07 -08001468 def wait(self, timeout=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001469 """Wait for child process to terminate. Returns returncode
1470 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001471 if self.returncode is not None:
1472 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001473
Gregory P. Smith82604e02016-11-20 16:31:07 -08001474 if timeout is not None:
1475 endtime = _time() + timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001476 # Enter a busy loop if we have a timeout. This busy loop was
1477 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1478 delay = 0.0005 # 500 us -> initial delay of 1 ms
1479 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001480 if self._waitpid_lock.acquire(False):
1481 try:
1482 if self.returncode is not None:
1483 break # Another thread waited.
1484 (pid, sts) = self._try_wait(os.WNOHANG)
1485 assert pid == self.pid or pid == 0
1486 if pid == self.pid:
1487 self._handle_exitstatus(sts)
1488 break
1489 finally:
1490 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001491 remaining = self._remaining_time(endtime)
1492 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001493 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001494 delay = min(delay * 2, remaining, .05)
1495 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001496 else:
1497 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001498 with self._waitpid_lock:
1499 if self.returncode is not None:
1500 break # Another thread waited.
1501 (pid, sts) = self._try_wait(0)
1502 # Check the pid and loop as waitpid has been known to
1503 # return 0 even without WNOHANG in odd situations.
1504 # http://bugs.python.org/issue14396.
1505 if pid == self.pid:
1506 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001507 return self.returncode
1508
1509
Reid Kleckner2b228f02011-03-16 16:57:54 -04001510 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001511 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001512 # Flush stdio buffer. This might block, if the user has
1513 # been writing to .stdin in an uncontrolled fashion.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001514 try:
1515 self.stdin.flush()
1516 except BrokenPipeError:
1517 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001518 if not input:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001519 try:
1520 self.stdin.close()
1521 except BrokenPipeError:
1522 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001523
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001524 stdout = None
1525 stderr = None
1526
1527 # Only create this mapping if we haven't already.
1528 if not self._communication_started:
1529 self._fileobj2output = {}
1530 if self.stdout:
1531 self._fileobj2output[self.stdout] = []
1532 if self.stderr:
1533 self._fileobj2output[self.stderr] = []
1534
1535 if self.stdout:
1536 stdout = self._fileobj2output[self.stdout]
1537 if self.stderr:
1538 stderr = self._fileobj2output[self.stderr]
1539
1540 self._save_input(input)
1541
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001542 if self._input:
1543 input_view = memoryview(self._input)
1544
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001545 with _PopenSelector() as selector:
1546 if self.stdin and input:
1547 selector.register(self.stdin, selectors.EVENT_WRITE)
1548 if self.stdout:
1549 selector.register(self.stdout, selectors.EVENT_READ)
1550 if self.stderr:
1551 selector.register(self.stderr, selectors.EVENT_READ)
1552
1553 while selector.get_map():
1554 timeout = self._remaining_time(endtime)
1555 if timeout is not None and timeout < 0:
1556 raise TimeoutExpired(self.args, orig_timeout)
1557
1558 ready = selector.select(timeout)
1559 self._check_timeout(endtime, orig_timeout)
1560
1561 # XXX Rewrite these to use non-blocking I/O on the file
1562 # objects; they are no longer using C stdio!
1563
1564 for key, events in ready:
1565 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001566 chunk = input_view[self._input_offset :
1567 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001568 try:
1569 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001570 except BrokenPipeError:
1571 selector.unregister(key.fileobj)
1572 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001573 else:
1574 if self._input_offset >= len(self._input):
1575 selector.unregister(key.fileobj)
1576 key.fileobj.close()
1577 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001578 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001579 if not data:
1580 selector.unregister(key.fileobj)
1581 key.fileobj.close()
1582 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001583
1584 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001585
1586 # All data exchanged. Translate lists into strings.
1587 if stdout is not None:
1588 stdout = b''.join(stdout)
1589 if stderr is not None:
1590 stderr = b''.join(stderr)
1591
1592 # Translate newlines, if requested.
1593 # This also turns bytes into strings.
andyclegg7fed7bd2017-10-23 03:01:19 +01001594 if self.text_mode:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001595 if stdout is not None:
1596 stdout = self._translate_newlines(stdout,
Steve Dower050acae2016-09-06 20:16:17 -07001597 self.stdout.encoding,
1598 self.stdout.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001599 if stderr is not None:
1600 stderr = self._translate_newlines(stderr,
Steve Dower050acae2016-09-06 20:16:17 -07001601 self.stderr.encoding,
1602 self.stderr.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001603
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001604 return (stdout, stderr)
1605
1606
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001607 def _save_input(self, input):
1608 # This method is called from the _communicate_with_*() methods
1609 # so that if we time out while communicating, we can continue
1610 # sending input if we retry.
1611 if self.stdin and self._input is None:
1612 self._input_offset = 0
1613 self._input = input
andyclegg7fed7bd2017-10-23 03:01:19 +01001614 if input is not None and self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -07001615 self._input = self._input.encode(self.stdin.encoding,
1616 self.stdin.errors)
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001617
1618
Christian Heimesa342c012008-04-20 21:01:16 +00001619 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001620 """Send a signal to the process."""
1621 # Skip signalling a process that we know has already died.
1622 if self.returncode is None:
1623 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00001624
1625 def terminate(self):
1626 """Terminate the process with SIGTERM
1627 """
1628 self.send_signal(signal.SIGTERM)
1629
1630 def kill(self):
1631 """Kill the process with SIGKILL
1632 """
1633 self.send_signal(signal.SIGKILL)