blob: c7e568fafecae833fe1d192868b3593e42cf65d6 [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,
167 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW)
Brian Curtin5d9deaa2011-04-29 16:24:07 -0500168
Brian Curtin08fd8d92011-04-29 16:11:30 -0500169 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
Brian Curtin8b8e7f42011-04-29 15:48:13 -0500170 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
171 "STD_ERROR_HANDLE", "SW_HIDE",
Martin Panter528619b2016-04-16 23:42:37 +0000172 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW",
173 "STARTUPINFO"])
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200174
175 class Handle(int):
176 closed = False
177
178 def Close(self, CloseHandle=_winapi.CloseHandle):
179 if not self.closed:
180 self.closed = True
181 CloseHandle(self)
182
183 def Detach(self):
184 if not self.closed:
185 self.closed = True
186 return int(self)
187 raise ValueError("already closed")
188
189 def __repr__(self):
Serhiy Storchaka465e60e2014-07-25 23:36:00 +0300190 return "%s(%d)" % (self.__class__.__name__, int(self))
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200191
192 __del__ = Close
193 __str__ = __repr__
194
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000195
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200196# This lists holds Popen instances for which the underlying process had not
197# exited at the time its __del__ method got called: those processes are wait()ed
198# for synchronously from _cleanup() when a new Popen object is created, to avoid
199# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000200_active = []
201
202def _cleanup():
203 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000204 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200205 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000206 try:
207 _active.remove(inst)
208 except ValueError:
209 # This can happen if two threads create a new Popen instance.
210 # It's harmless that it was already removed, so ignore.
211 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000212
213PIPE = -1
214STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200215DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000216
217
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200218# XXX This function is only used by multiprocessing and the test suite,
219# but it's here so that it can be imported when Python is compiled without
220# threads.
221
Victor Stinner9def2842016-01-18 12:15:08 +0100222def _optim_args_from_interpreter_flags():
223 """Return a list of command-line arguments reproducing the current
224 optimization settings in sys.flags."""
225 args = []
226 value = sys.flags.optimize
227 if value > 0:
228 args.append('-' + 'O' * value)
229 return args
230
231
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200232def _args_from_interpreter_flags():
233 """Return a list of command-line arguments reproducing the current
234 settings in sys.flags and sys.warnoptions."""
235 flag_opt_map = {
236 'debug': 'd',
237 # 'inspect': 'i',
238 # 'interactive': 'i',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200239 'dont_write_bytecode': 'B',
240 'no_user_site': 's',
241 'no_site': 'S',
242 'ignore_environment': 'E',
243 'verbose': 'v',
244 'bytes_warning': 'b',
245 'quiet': 'q',
Victor Stinner9def2842016-01-18 12:15:08 +0100246 # -O is handled in _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200247 }
Victor Stinner9def2842016-01-18 12:15:08 +0100248 args = _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200249 for flag, opt in flag_opt_map.items():
250 v = getattr(sys.flags, flag)
251 if v > 0:
252 args.append('-' + opt * v)
253 for opt in sys.warnoptions:
254 args.append('-W' + opt)
255 return args
256
257
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400258def call(*popenargs, timeout=None, **kwargs):
259 """Run command with arguments. Wait for command to complete or
260 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000261
262 The arguments are the same as for the Popen constructor. Example:
263
264 retcode = call(["ls", "-l"])
265 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200266 with Popen(*popenargs, **kwargs) as p:
267 try:
268 return p.wait(timeout=timeout)
269 except:
270 p.kill()
271 p.wait()
272 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000273
274
Peter Astrand454f7672005-01-01 09:36:35 +0000275def check_call(*popenargs, **kwargs):
276 """Run command with arguments. Wait for command to complete. If
277 the exit code was zero then return, otherwise raise
278 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000279 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000280
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400281 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000282
283 check_call(["ls", "-l"])
284 """
285 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000286 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000287 cmd = kwargs.get("args")
288 if cmd is None:
289 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000290 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000291 return 0
292
293
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400294def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700295 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000296
297 If the exit code was non-zero it raises a CalledProcessError. The
298 CalledProcessError object will have the return code in the returncode
299 attribute and output in the output attribute.
300
301 The arguments are the same as for the Popen constructor. Example:
302
303 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000304 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000305
306 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000307 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000308
309 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000310 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000311 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000312 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700313
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300314 There is an additional optional argument, "input", allowing you to
315 pass a string to the subprocess's stdin. If you use this argument
316 you may not also use the Popen constructor's "stdin" argument, as
317 it too will be used internally. Example:
318
319 >>> check_output(["sed", "-e", "s/foo/bar/"],
320 ... input=b"when in the course of fooman events\n")
321 b'when in the course of barman events\n'
322
andyclegg7fed7bd2017-10-23 03:01:19 +0100323 By default, all communication is in bytes, and therefore any "input"
324 should be bytes, and the return value wil be bytes. If in text mode,
325 any "input" should be a string, and the return value will be a string
326 decoded according to locale encoding, or by "encoding" if set. Text mode
327 is triggered by setting any of text, encoding, errors or universal_newlines.
Georg Brandlf9734072008-12-07 15:30:06 +0000328 """
329 if 'stdout' in kwargs:
330 raise ValueError('stdout argument not allowed, it will be overridden.')
Gregory P. Smith6e730002015-04-14 16:14:25 -0700331
332 if 'input' in kwargs and kwargs['input'] is None:
333 # Explicitly passing input=None was previously equivalent to passing an
334 # empty string. That is maintained here for backwards compatibility.
335 kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
336
337 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
338 **kwargs).stdout
339
340
341class CompletedProcess(object):
342 """A process that has finished running.
343
344 This is returned by run().
345
346 Attributes:
347 args: The list or str args passed to run().
348 returncode: The exit code of the process, negative for signals.
349 stdout: The standard output (None if not captured).
350 stderr: The standard error (None if not captured).
351 """
352 def __init__(self, args, returncode, stdout=None, stderr=None):
353 self.args = args
354 self.returncode = returncode
355 self.stdout = stdout
356 self.stderr = stderr
357
358 def __repr__(self):
359 args = ['args={!r}'.format(self.args),
360 'returncode={!r}'.format(self.returncode)]
361 if self.stdout is not None:
362 args.append('stdout={!r}'.format(self.stdout))
363 if self.stderr is not None:
364 args.append('stderr={!r}'.format(self.stderr))
365 return "{}({})".format(type(self).__name__, ', '.join(args))
366
367 def check_returncode(self):
368 """Raise CalledProcessError if the exit code is non-zero."""
369 if self.returncode:
370 raise CalledProcessError(self.returncode, self.args, self.stdout,
371 self.stderr)
372
373
374def run(*popenargs, input=None, timeout=None, check=False, **kwargs):
375 """Run command with arguments and return a CompletedProcess instance.
376
377 The returned instance will have attributes args, returncode, stdout and
378 stderr. By default, stdout and stderr are not captured, and those attributes
379 will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.
380
381 If check is True and the exit code was non-zero, it raises a
382 CalledProcessError. The CalledProcessError object will have the return code
383 in the returncode attribute, and output & stderr attributes if those streams
384 were captured.
385
386 If timeout is given, and the process takes too long, a TimeoutExpired
387 exception will be raised.
388
389 There is an optional argument "input", allowing you to
andyclegg7fed7bd2017-10-23 03:01:19 +0100390 pass bytes or a string to the subprocess's stdin. If you use this argument
Gregory P. Smith6e730002015-04-14 16:14:25 -0700391 you may not also use the Popen constructor's "stdin" argument, as
392 it will be used internally.
393
andyclegg7fed7bd2017-10-23 03:01:19 +0100394 By default, all communication is in bytes, and therefore any "input" should
395 be bytes, and the stdout and stderr will be bytes. If in text mode, any
396 "input" should be a string, and stdout and stderr will be strings decoded
397 according to locale encoding, or by "encoding" if set. Text mode is
398 triggered by setting any of text, encoding, errors or universal_newlines.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700399
andyclegg7fed7bd2017-10-23 03:01:19 +0100400 The other arguments are the same as for the Popen constructor.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700401 """
402 if input is not None:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300403 if 'stdin' in kwargs:
404 raise ValueError('stdin and input arguments may not both be used.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300405 kwargs['stdin'] = PIPE
Gregory P. Smith6e730002015-04-14 16:14:25 -0700406
407 with Popen(*popenargs, **kwargs) as process:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200408 try:
Gregory P. Smith6e730002015-04-14 16:14:25 -0700409 stdout, stderr = process.communicate(input, timeout=timeout)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200410 except TimeoutExpired:
411 process.kill()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700412 stdout, stderr = process.communicate()
413 raise TimeoutExpired(process.args, timeout, output=stdout,
414 stderr=stderr)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200415 except:
416 process.kill()
417 process.wait()
418 raise
419 retcode = process.poll()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700420 if check and retcode:
421 raise CalledProcessError(retcode, process.args,
422 output=stdout, stderr=stderr)
423 return CompletedProcess(process.args, retcode, stdout, stderr)
Peter Astrand454f7672005-01-01 09:36:35 +0000424
425
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000426def list2cmdline(seq):
427 """
428 Translate a sequence of arguments into a command line
429 string, using the same rules as the MS C runtime:
430
431 1) Arguments are delimited by white space, which is either a
432 space or a tab.
433
434 2) A string surrounded by double quotation marks is
435 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000436 contained within. A quoted string can be embedded in an
437 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000438
439 3) A double quotation mark preceded by a backslash is
440 interpreted as a literal double quotation mark.
441
442 4) Backslashes are interpreted literally, unless they
443 immediately precede a double quotation mark.
444
445 5) If backslashes immediately precede a double quotation mark,
446 every pair of backslashes is interpreted as a literal
447 backslash. If the number of backslashes is odd, the last
448 backslash escapes the next double quotation mark as
449 described in rule 3.
450 """
451
452 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000453 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
454 # or search http://msdn.microsoft.com for
455 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000456 result = []
457 needquote = False
458 for arg in seq:
459 bs_buf = []
460
461 # Add a space to separate this argument from the others
462 if result:
463 result.append(' ')
464
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000465 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000466 if needquote:
467 result.append('"')
468
469 for c in arg:
470 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000471 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000472 bs_buf.append(c)
473 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000474 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000475 result.append('\\' * len(bs_buf)*2)
476 bs_buf = []
477 result.append('\\"')
478 else:
479 # Normal char
480 if bs_buf:
481 result.extend(bs_buf)
482 bs_buf = []
483 result.append(c)
484
Christian Heimesfdab48e2008-01-20 09:06:41 +0000485 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000486 if bs_buf:
487 result.extend(bs_buf)
488
489 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000490 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000491 result.append('"')
492
493 return ''.join(result)
494
495
Brett Cannona23810f2008-05-26 19:04:21 +0000496# Various tools for executing commands and looking at their output and status.
497#
Brett Cannona23810f2008-05-26 19:04:21 +0000498
499def getstatusoutput(cmd):
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700500 """Return (exitcode, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000501
Tim Golden60798142013-11-05 12:57:25 +0000502 Execute the string 'cmd' in a shell with 'check_output' and
Steve Dower050acae2016-09-06 20:16:17 -0700503 return a 2-tuple (status, output). The locale encoding is used
504 to decode the output and process newlines.
Tim Golden60798142013-11-05 12:57:25 +0000505
506 A trailing newline is stripped from the output.
507 The exit status for the command can be interpreted
508 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000509
510 >>> import subprocess
511 >>> subprocess.getstatusoutput('ls /bin/ls')
512 (0, '/bin/ls')
513 >>> subprocess.getstatusoutput('cat /bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700514 (1, 'cat: /bin/junk: No such file or directory')
Brett Cannona23810f2008-05-26 19:04:21 +0000515 >>> subprocess.getstatusoutput('/bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700516 (127, 'sh: /bin/junk: not found')
517 >>> subprocess.getstatusoutput('/bin/kill $$')
518 (-15, '')
Brett Cannona23810f2008-05-26 19:04:21 +0000519 """
Tim Goldene0041752013-11-03 12:53:17 +0000520 try:
andyclegg7fed7bd2017-10-23 03:01:19 +0100521 data = check_output(cmd, shell=True, text=True, stderr=STDOUT)
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700522 exitcode = 0
Tim Goldene0041752013-11-03 12:53:17 +0000523 except CalledProcessError as ex:
524 data = ex.output
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700525 exitcode = ex.returncode
Tim Goldene0041752013-11-03 12:53:17 +0000526 if data[-1:] == '\n':
527 data = data[:-1]
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700528 return exitcode, data
Brett Cannona23810f2008-05-26 19:04:21 +0000529
530def getoutput(cmd):
531 """Return output (stdout or stderr) of executing cmd in a shell.
532
533 Like getstatusoutput(), except the exit status is ignored and the return
534 value is a string containing the command's output. Example:
535
536 >>> import subprocess
537 >>> subprocess.getoutput('ls /bin/ls')
538 '/bin/ls'
539 """
540 return getstatusoutput(cmd)[1]
541
542
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000543_PLATFORM_DEFAULT_CLOSE_FDS = object()
Gregory P. Smithf5604852010-12-13 06:45:02 +0000544
545
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000546class Popen(object):
Martin Panter4afdca02016-10-25 22:20:48 +0000547 """ Execute a child program in a new process.
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200548
Martin Panter4afdca02016-10-25 22:20:48 +0000549 For a complete description of the arguments see the Python documentation.
550
551 Arguments:
552 args: A string, or a sequence of program arguments.
553
554 bufsize: supplied as the buffering argument to the open() function when
555 creating the stdin/stdout/stderr pipe file objects
556
557 executable: A replacement program to execute.
558
559 stdin, stdout and stderr: These specify the executed programs' standard
560 input, standard output and standard error file handles, respectively.
561
562 preexec_fn: (POSIX only) An object to be called in the child process
563 just before the child is executed.
564
565 close_fds: Controls closing or inheriting of file descriptors.
566
567 shell: If true, the command will be executed through the shell.
568
569 cwd: Sets the current directory before the child is executed.
570
571 env: Defines the environment variables for the new process.
572
andyclegg7fed7bd2017-10-23 03:01:19 +0100573 text: If true, decode stdin, stdout and stderr using the given encoding
574 (if set) or the system default otherwise.
575
576 universal_newlines: Alias of text, provided for backwards compatibility.
Martin Panter4afdca02016-10-25 22:20:48 +0000577
578 startupinfo and creationflags (Windows only)
579
580 restore_signals (POSIX only)
581
582 start_new_session (POSIX only)
583
584 pass_fds (POSIX only)
585
Martin Panter3dca6242016-10-25 23:41:42 +0000586 encoding and errors: Text mode encoding and error handling to use for
587 file objects stdin, stdout and stderr.
588
Martin Panter4afdca02016-10-25 22:20:48 +0000589 Attributes:
590 stdin, stdout, stderr, pid, returncode
591 """
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200592 _child_created = False # Set here since __del__ checks it
593
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700594 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000595 stdin=None, stdout=None, stderr=None,
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000596 preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,
andyclegg7fed7bd2017-10-23 03:01:19 +0100597 shell=False, cwd=None, env=None, universal_newlines=None,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000598 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000599 restore_signals=True, start_new_session=False,
andyclegg7fed7bd2017-10-23 03:01:19 +0100600 pass_fds=(), *, encoding=None, errors=None, text=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000601 """Create new Popen instance."""
602 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700603 # Held while anything is calling waitpid before returncode has been
604 # updated to prevent clobbering returncode if wait() or poll() are
605 # called from multiple threads at once. After acquiring the lock,
606 # code must re-check self.returncode to see if another thread just
607 # finished a waitpid() call.
608 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000609
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400610 self._input = None
611 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000612 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700613 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000614 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000615 raise TypeError("bufsize must be an integer")
616
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700617 if _mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000618 if preexec_fn is not None:
619 raise ValueError("preexec_fn is not supported on Windows "
620 "platforms")
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000621 any_stdio_set = (stdin is not None or stdout is not None or
622 stderr is not None)
623 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
624 if any_stdio_set:
625 close_fds = False
626 else:
627 close_fds = True
628 elif close_fds and any_stdio_set:
629 raise ValueError(
630 "close_fds is not supported on Windows platforms"
631 " if you redirect stdin/stdout/stderr")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000632 else:
633 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000634 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
635 close_fds = True
636 if pass_fds and not close_fds:
637 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
638 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000639 if startupinfo is not None:
640 raise ValueError("startupinfo is only supported on Windows "
641 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000642 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000643 raise ValueError("creationflags is only supported on Windows "
644 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000645
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400646 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000647 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000648 self.stdout = None
649 self.stderr = None
650 self.pid = None
651 self.returncode = None
Steve Dower050acae2016-09-06 20:16:17 -0700652 self.encoding = encoding
653 self.errors = errors
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000654
andyclegg7fed7bd2017-10-23 03:01:19 +0100655 # Validate the combinations of text and universal_newlines
656 if (text is not None and universal_newlines is not None
657 and bool(universal_newlines) != bool(text)):
658 raise SubprocessError('Cannot disambiguate when both text '
659 'and universal_newlines are supplied but '
660 'different. Pass one or the other.')
661
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000662 # Input and output objects. The general principle is like
663 # this:
664 #
665 # Parent Child
666 # ------ -----
667 # p2cwrite ---stdin---> p2cread
668 # c2pread <--stdout--- c2pwrite
669 # errread <--stderr--- errwrite
670 #
671 # On POSIX, the child objects are file descriptors. On
672 # Windows, these are Windows file handles. The parent objects
673 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000674 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000675 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000676
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000677 (p2cread, p2cwrite,
678 c2pread, c2pwrite,
679 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
680
Antoine Pitrouc9982322011-01-04 19:07:07 +0000681 # We wrap OS handles *before* launching the child, otherwise a
682 # quickly terminating child could make our fds unwrappable
683 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000684
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700685 if _mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000686 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000687 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000688 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000689 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000690 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000691 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000692
andyclegg7fed7bd2017-10-23 03:01:19 +0100693 self.text_mode = encoding or errors or text or universal_newlines
Tim Peterse718f612004-10-12 21:51:32 +0000694
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700695 self._closed_child_pipe_fds = False
Steve Dower050acae2016-09-06 20:16:17 -0700696
Antoine Pitrouc9982322011-01-04 19:07:07 +0000697 try:
Steve Dower050acae2016-09-06 20:16:17 -0700698 if p2cwrite != -1:
699 self.stdin = io.open(p2cwrite, 'wb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100700 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700701 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
702 line_buffering=(bufsize == 1),
703 encoding=encoding, errors=errors)
704 if c2pread != -1:
705 self.stdout = io.open(c2pread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100706 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700707 self.stdout = io.TextIOWrapper(self.stdout,
708 encoding=encoding, errors=errors)
709 if errread != -1:
710 self.stderr = io.open(errread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100711 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700712 self.stderr = io.TextIOWrapper(self.stderr,
713 encoding=encoding, errors=errors)
714
Antoine Pitrouc9982322011-01-04 19:07:07 +0000715 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300716 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000717 startupinfo, creationflags, shell,
718 p2cread, p2cwrite,
719 c2pread, c2pwrite,
720 errread, errwrite,
721 restore_signals, start_new_session)
722 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800723 # Cleanup if the child failed starting.
724 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000725 try:
726 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200727 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800728 pass # Ignore EBADF or other errors.
729
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700730 if not self._closed_child_pipe_fds:
731 to_close = []
732 if stdin == PIPE:
733 to_close.append(p2cread)
734 if stdout == PIPE:
735 to_close.append(c2pwrite)
736 if stderr == PIPE:
737 to_close.append(errwrite)
738 if hasattr(self, '_devnull'):
739 to_close.append(self._devnull)
740 for fd in to_close:
741 try:
Segev Finer4d385172017-08-18 16:18:13 +0300742 if _mswindows and isinstance(fd, Handle):
743 fd.Close()
744 else:
745 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700746 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700747 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800748
Antoine Pitrouc9982322011-01-04 19:07:07 +0000749 raise
750
andyclegg7fed7bd2017-10-23 03:01:19 +0100751 @property
752 def universal_newlines(self):
753 # universal_newlines as retained as an alias of text_mode for API
754 # compatability. bpo-31756
755 return self.text_mode
756
757 @universal_newlines.setter
758 def universal_newlines(self, universal_newlines):
759 self.text_mode = bool(universal_newlines)
760
Steve Dower050acae2016-09-06 20:16:17 -0700761 def _translate_newlines(self, data, encoding, errors):
762 data = data.decode(encoding, errors)
Andrew Svetlov82860712012-08-19 22:13:41 +0300763 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000764
Brian Curtin79cdb662010-12-03 02:46:02 +0000765 def __enter__(self):
766 return self
767
768 def __exit__(self, type, value, traceback):
769 if self.stdout:
770 self.stdout.close()
771 if self.stderr:
772 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200773 try: # Flushing a BufferedWriter may raise an error
774 if self.stdin:
775 self.stdin.close()
776 finally:
777 # Wait for the process to terminate, to avoid zombies.
778 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000779
Victor Stinner9505b032017-01-06 10:44:44 +0100780 def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200781 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000782 # We didn't get to successfully create a child process.
783 return
Victor Stinner5a48e212016-05-20 12:11:15 +0200784 if self.returncode is None:
Victor Stinnerc206f1e2016-06-14 16:42:59 +0200785 # Not reading subprocess exit status creates a zombi process which
786 # is only destroyed at the parent python process exit
Victor Stinner9505b032017-01-06 10:44:44 +0100787 _warn("subprocess %s is still running" % self.pid,
788 ResourceWarning, source=self)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000789 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000790 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000791 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000792 # Child is still running, keep us alive until we can wait on it.
793 _active.append(self)
794
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200795 def _get_devnull(self):
796 if not hasattr(self, '_devnull'):
797 self._devnull = os.open(os.devnull, os.O_RDWR)
798 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000799
Victor Stinnera5e881d2015-01-14 17:07:59 +0100800 def _stdin_write(self, input):
801 if input:
802 try:
803 self.stdin.write(input)
804 except BrokenPipeError:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000805 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200806 except OSError as exc:
807 if exc.errno == errno.EINVAL:
808 # bpo-19612, bpo-30418: On Windows, stdin.write() fails
809 # with EINVAL if the child process exited or if the child
810 # process is still running but closed the pipe.
Victor Stinnera5e881d2015-01-14 17:07:59 +0100811 pass
812 else:
813 raise
Victor Stinnerd52aa312017-06-08 17:30:39 +0200814
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000815 try:
816 self.stdin.close()
817 except BrokenPipeError:
818 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200819 except OSError as exc:
820 if exc.errno == errno.EINVAL:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000821 pass
822 else:
823 raise
Victor Stinnera5e881d2015-01-14 17:07:59 +0100824
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400825 def communicate(self, input=None, timeout=None):
Joel Schaerer88031a92017-09-13 21:11:20 +0200826 """Interact with process: Send data to stdin and close it.
827 Read data from stdout and stderr, until end-of-file is
828 reached. Wait for process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +0000829
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400830 The optional "input" argument should be data to be sent to the
andyclegg7fed7bd2017-10-23 03:01:19 +0100831 child process, or None, if no data should be sent to the child.
832 communicate() returns a tuple (stdout, stderr).
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400833
andyclegg7fed7bd2017-10-23 03:01:19 +0100834 By default, all communication is in bytes, and therefore any
835 "input" should be bytes, and the (stdout, stderr) will be bytes.
836 If in text mode (indicated by self.text_mode), any "input" should
837 be a string, and (stdout, stderr) will be strings decoded
838 according to locale encoding, or by "encoding" if set. Text mode
839 is triggered by setting any of text, encoding, errors or
840 universal_newlines.
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400841 """
Peter Astrand23109f02005-03-03 20:28:59 +0000842
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400843 if self._communication_started and input:
844 raise ValueError("Cannot send input after starting communication")
845
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400846 # Optimization: If we are not worried about timeouts, we haven't
847 # started communicating, and we have one or zero pipes, using select()
848 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200849 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400850 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000851 stdout = None
852 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000853 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +0100854 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +0000855 elif self.stdout:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000856 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000857 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000858 elif self.stderr:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000859 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000860 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000861 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200862 else:
863 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +0200864 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +0200865 else:
866 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000867
Victor Stinner7a8d0812011-04-05 13:13:08 +0200868 try:
869 stdout, stderr = self._communicate(input, endtime, timeout)
870 finally:
871 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400872
Victor Stinner7a8d0812011-04-05 13:13:08 +0200873 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400874
875 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +0000876
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000877
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000878 def poll(self):
Martin Panter4afdca02016-10-25 22:20:48 +0000879 """Check if child process has terminated. Set and return returncode
880 attribute."""
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000881 return self._internal_poll()
882
883
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400884 def _remaining_time(self, endtime):
885 """Convenience for _communicate when computing timeouts."""
886 if endtime is None:
887 return None
888 else:
Victor Stinner949d8c92012-05-30 13:30:32 +0200889 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400890
891
Reid Kleckner2b228f02011-03-16 16:57:54 -0400892 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400893 """Convenience for checking if a timeout has expired."""
894 if endtime is None:
895 return
Victor Stinner949d8c92012-05-30 13:30:32 +0200896 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -0400897 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400898
899
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700900 if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000901 #
902 # Windows methods
903 #
904 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +0000905 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000906 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
907 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000908 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000909 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +0000910
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000911 p2cread, p2cwrite = -1, -1
912 c2pread, c2pwrite = -1, -1
913 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000914
Peter Astrandd38ddf42005-02-10 08:32:50 +0000915 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200916 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000917 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200918 p2cread, _ = _winapi.CreatePipe(None, 0)
919 p2cread = Handle(p2cread)
920 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000921 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200922 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
923 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200924 elif stdin == DEVNULL:
925 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000926 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000927 p2cread = msvcrt.get_osfhandle(stdin)
928 else:
929 # Assuming file-like object
930 p2cread = msvcrt.get_osfhandle(stdin.fileno())
931 p2cread = self._make_inheritable(p2cread)
932
Peter Astrandd38ddf42005-02-10 08:32:50 +0000933 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200934 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000935 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200936 _, c2pwrite = _winapi.CreatePipe(None, 0)
937 c2pwrite = Handle(c2pwrite)
938 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000939 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200940 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
941 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200942 elif stdout == DEVNULL:
943 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000944 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000945 c2pwrite = msvcrt.get_osfhandle(stdout)
946 else:
947 # Assuming file-like object
948 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
949 c2pwrite = self._make_inheritable(c2pwrite)
950
Peter Astrandd38ddf42005-02-10 08:32:50 +0000951 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200952 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000953 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200954 _, errwrite = _winapi.CreatePipe(None, 0)
955 errwrite = Handle(errwrite)
956 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000957 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200958 errread, errwrite = _winapi.CreatePipe(None, 0)
959 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000960 elif stderr == STDOUT:
961 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200962 elif stderr == DEVNULL:
963 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000964 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000965 errwrite = msvcrt.get_osfhandle(stderr)
966 else:
967 # Assuming file-like object
968 errwrite = msvcrt.get_osfhandle(stderr.fileno())
969 errwrite = self._make_inheritable(errwrite)
970
971 return (p2cread, p2cwrite,
972 c2pread, c2pwrite,
973 errread, errwrite)
974
975
976 def _make_inheritable(self, handle):
977 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200978 h = _winapi.DuplicateHandle(
979 _winapi.GetCurrentProcess(), handle,
980 _winapi.GetCurrentProcess(), 0, 1,
981 _winapi.DUPLICATE_SAME_ACCESS)
982 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000983
984
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000985 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300986 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000987 startupinfo, creationflags, shell,
988 p2cread, p2cwrite,
989 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000990 errread, errwrite,
991 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000992 """Execute program (MS Windows version)"""
993
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000994 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000995
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000996 if not isinstance(args, str):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000997 args = list2cmdline(args)
998
Peter Astrandc1d65362004-11-07 14:30:34 +0000999 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001000 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001001 startupinfo = STARTUPINFO()
Victor Stinnerb3693582010-05-21 20:13:12 +00001002 if -1 not in (p2cread, c2pwrite, errwrite):
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001003 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001004 startupinfo.hStdInput = p2cread
1005 startupinfo.hStdOutput = c2pwrite
1006 startupinfo.hStdError = errwrite
1007
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001008 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001009 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1010 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001011 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001012 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001013
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001014 # Start the process
1015 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001016 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001017 # no special security
1018 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001019 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001020 creationflags,
1021 env,
Benjamin Petersoncb90f262017-03-02 00:03:41 -08001022 os.fspath(cwd) if cwd is not None else None,
Tim Peterse8374a52004-10-13 03:15:00 +00001023 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001024 finally:
1025 # Child is launched. Close the parent's copy of those pipe
1026 # handles that only the child should have open. You need
1027 # to make sure that no handles to the write end of the
1028 # output pipe are maintained in this process or else the
1029 # pipe will not close when the child process exits and the
1030 # ReadFile will hang.
1031 if p2cread != -1:
1032 p2cread.Close()
1033 if c2pwrite != -1:
1034 c2pwrite.Close()
1035 if errwrite != -1:
1036 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001037 if hasattr(self, '_devnull'):
1038 os.close(self._devnull)
Segev Finer4d385172017-08-18 16:18:13 +03001039 # Prevent a double close of these handles/fds from __init__
1040 # on error.
1041 self._closed_child_pipe_fds = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001042
1043 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001044 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001045 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001046 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001047 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001048
Brett Cannon84df1e62010-05-14 00:33:40 +00001049 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001050 _WaitForSingleObject=_winapi.WaitForSingleObject,
1051 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1052 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001053 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001054 attribute.
1055
1056 This method is called by __del__, so it can only refer to objects
1057 in its local scope.
1058
1059 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001060 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001061 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1062 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001063 return self.returncode
1064
1065
Gregory P. Smith82604e02016-11-20 16:31:07 -08001066 def wait(self, timeout=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001067 """Wait for child process to terminate. Returns returncode
1068 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001069 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001070 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001071 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001072 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001073 if self.returncode is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001074 result = _winapi.WaitForSingleObject(self._handle,
1075 timeout_millis)
1076 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001077 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001078 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001079 return self.returncode
1080
1081
1082 def _readerthread(self, fh, buffer):
1083 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001084 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001085
1086
Reid Kleckner2b228f02011-03-16 16:57:54 -04001087 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001088 # Start reader threads feeding into a list hanging off of this
1089 # object, unless they've already been started.
1090 if self.stdout and not hasattr(self, "_stdout_buff"):
1091 self._stdout_buff = []
1092 self.stdout_thread = \
1093 threading.Thread(target=self._readerthread,
1094 args=(self.stdout, self._stdout_buff))
1095 self.stdout_thread.daemon = True
1096 self.stdout_thread.start()
1097 if self.stderr and not hasattr(self, "_stderr_buff"):
1098 self._stderr_buff = []
1099 self.stderr_thread = \
1100 threading.Thread(target=self._readerthread,
1101 args=(self.stderr, self._stderr_buff))
1102 self.stderr_thread.daemon = True
1103 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001104
1105 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001106 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001107
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001108 # Wait for the reader threads, or time out. If we time out, the
1109 # threads remain reading and the fds left open in case the user
1110 # calls communicate again.
1111 if self.stdout is not None:
1112 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001113 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001114 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001115 if self.stderr is not None:
1116 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001117 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001118 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001119
1120 # Collect the output from and close both pipes, now that we know
1121 # both have been read successfully.
1122 stdout = None
1123 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001124 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001125 stdout = self._stdout_buff
1126 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001127 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001128 stderr = self._stderr_buff
1129 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001130
1131 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001132 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001133 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001134 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001135 stderr = stderr[0]
1136
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001137 return (stdout, stderr)
1138
Christian Heimesa342c012008-04-20 21:01:16 +00001139 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001140 """Send a signal to the process."""
1141 # Don't signal a process that we know has already died.
1142 if self.returncode is not None:
1143 return
Christian Heimesa342c012008-04-20 21:01:16 +00001144 if sig == signal.SIGTERM:
1145 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001146 elif sig == signal.CTRL_C_EVENT:
1147 os.kill(self.pid, signal.CTRL_C_EVENT)
1148 elif sig == signal.CTRL_BREAK_EVENT:
1149 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001150 else:
Brian Curtin19651362010-09-07 13:24:38 +00001151 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001152
1153 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001154 """Terminates the process."""
1155 # Don't terminate a process that we know has already died.
1156 if self.returncode is not None:
1157 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001158 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001159 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001160 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001161 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1162 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001163 rc = _winapi.GetExitCodeProcess(self._handle)
1164 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001165 raise
1166 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001167
1168 kill = terminate
1169
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001170 else:
1171 #
1172 # POSIX methods
1173 #
1174 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001175 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001176 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1177 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001178 p2cread, p2cwrite = -1, -1
1179 c2pread, c2pwrite = -1, -1
1180 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001181
Peter Astrandd38ddf42005-02-10 08:32:50 +00001182 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001183 pass
1184 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001185 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001186 elif stdin == DEVNULL:
1187 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001188 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001189 p2cread = stdin
1190 else:
1191 # Assuming file-like object
1192 p2cread = stdin.fileno()
1193
Peter Astrandd38ddf42005-02-10 08:32:50 +00001194 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001195 pass
1196 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001197 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001198 elif stdout == DEVNULL:
1199 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001200 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001201 c2pwrite = stdout
1202 else:
1203 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001204 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001205
Peter Astrandd38ddf42005-02-10 08:32:50 +00001206 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001207 pass
1208 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001209 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001210 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001211 if c2pwrite != -1:
1212 errwrite = c2pwrite
1213 else: # child's stdout is not set, use parent's stdout
1214 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001215 elif stderr == DEVNULL:
1216 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001217 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001218 errwrite = stderr
1219 else:
1220 # Assuming file-like object
1221 errwrite = stderr.fileno()
1222
1223 return (p2cread, p2cwrite,
1224 c2pread, c2pwrite,
1225 errread, errwrite)
1226
1227
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001228 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001229 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001230 startupinfo, creationflags, shell,
1231 p2cread, p2cwrite,
1232 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001233 errread, errwrite,
1234 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001235 """Execute program (POSIX version)"""
1236
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001237 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001238 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001239 else:
1240 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001241
1242 if shell:
Xavier de Gayeb35fc622016-12-13 16:32:21 +01001243 # On Android the default shell is at '/system/bin/sh'.
1244 unix_shell = ('/system/bin/sh' if
1245 hasattr(sys, 'getandroidapilevel') else '/bin/sh')
1246 args = [unix_shell, "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001247 if executable:
1248 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001249
Peter Astrandd38ddf42005-02-10 08:32:50 +00001250 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001251 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001252 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001253
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001254 # For transferring possible exec failure from child to parent.
1255 # Data format: "exception name:hex errno:description"
1256 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001257 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001258 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1259 low_fds_to_close = []
1260 while errpipe_write < 3:
1261 low_fds_to_close.append(errpipe_write)
1262 errpipe_write = os.dup(errpipe_write)
1263 for low_fd in low_fds_to_close:
1264 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001265 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001266 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001267 # We must avoid complex work that could involve
1268 # malloc or free in the child process to avoid
1269 # potential deadlocks, thus we do all this here.
1270 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001271
Victor Stinner372b8382011-06-21 17:24:21 +02001272 if env is not None:
Serhiy Storchakad174d242017-06-23 19:39:27 +03001273 env_list = []
1274 for k, v in env.items():
1275 k = os.fsencode(k)
1276 if b'=' in k:
1277 raise ValueError("illegal environment variable name")
1278 env_list.append(k + b'=' + os.fsencode(v))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001279 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001280 env_list = None # Use execv instead of execve.
1281 executable = os.fsencode(executable)
1282 if os.path.dirname(executable):
1283 executable_list = (executable,)
1284 else:
1285 # This matches the behavior of os._execvpe().
1286 executable_list = tuple(
1287 os.path.join(os.fsencode(dir), executable)
1288 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001289 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001290 fds_to_keep.add(errpipe_write)
1291 self.pid = _posixsubprocess.fork_exec(
1292 args, executable_list,
Serhiy Storchaka66bffd12017-04-19 21:12:46 +03001293 close_fds, tuple(sorted(map(int, fds_to_keep))),
1294 cwd, env_list,
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001295 p2cread, p2cwrite, c2pread, c2pwrite,
1296 errread, errwrite,
1297 errpipe_read, errpipe_write,
1298 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001299 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001300 finally:
1301 # be sure the FD is closed no matter what
1302 os.close(errpipe_write)
1303
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001304 # self._devnull is not always defined.
1305 devnull_fd = getattr(self, '_devnull', None)
1306 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001307 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001308 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001309 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001310 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001311 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001312 if devnull_fd is not None:
1313 os.close(devnull_fd)
1314 # Prevent a double close of these fds from __init__ on error.
1315 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001316
1317 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001318 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001319 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001320 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001321 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001322 errpipe_data += part
1323 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001324 break
Facundo Batista10706e22009-06-19 20:34:30 +00001325 finally:
1326 # be sure the FD is closed no matter what
1327 os.close(errpipe_read)
1328
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001329 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001330 try:
Victor Stinnera58e2c52016-05-20 12:08:12 +02001331 pid, sts = os.waitpid(self.pid, 0)
1332 if pid == self.pid:
1333 self._handle_exitstatus(sts)
1334 else:
1335 self.returncode = sys.maxsize
Victor Stinnera5e881d2015-01-14 17:07:59 +01001336 except ChildProcessError:
1337 pass
Victor Stinnera58e2c52016-05-20 12:08:12 +02001338
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001339 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001340 exception_name, hex_errno, err_msg = (
1341 errpipe_data.split(b':', 2))
Ammar Askar3fc499b2017-09-06 02:41:30 -04001342 # The encoding here should match the encoding
1343 # written in by the subprocess implementations
1344 # like _posixsubprocess
1345 err_msg = err_msg.decode()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001346 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001347 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001348 hex_errno = b'0'
Ammar Askar3fc499b2017-09-06 02:41:30 -04001349 err_msg = 'Bad exception data from child: {!r}'.format(
1350 bytes(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001351 child_exception_type = getattr(
1352 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001353 SubprocessError)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001354 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001355 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001356 child_exec_never_called = (err_msg == "noexec")
1357 if child_exec_never_called:
1358 err_msg = ""
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001359 # The error must be from chdir(cwd).
1360 err_filename = cwd
1361 else:
1362 err_filename = orig_executable
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001363 if errno_num != 0:
1364 err_msg = os.strerror(errno_num)
1365 if errno_num == errno.ENOENT:
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001366 err_msg += ': ' + repr(err_filename)
1367 raise child_exception_type(errno_num, err_msg, err_filename)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001368 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001369
1370
Brett Cannon84df1e62010-05-14 00:33:40 +00001371 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1372 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001373 _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
1374 _WSTOPSIG=os.WSTOPSIG):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001375 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001376 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001377 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001378 if _WIFSIGNALED(sts):
1379 self.returncode = -_WTERMSIG(sts)
1380 elif _WIFEXITED(sts):
1381 self.returncode = _WEXITSTATUS(sts)
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001382 elif _WIFSTOPPED(sts):
1383 self.returncode = -_WSTOPSIG(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001384 else:
1385 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001386 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001387
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001388
Brett Cannon84df1e62010-05-14 00:33:40 +00001389 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001390 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001391 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001392 attribute.
1393
1394 This method is called by __del__, so it cannot reference anything
1395 outside of the local scope (nor can any methods it calls).
1396
1397 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001398 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001399 if not self._waitpid_lock.acquire(False):
1400 # Something else is busy calling waitpid. Don't allow two
1401 # at once. We know nothing yet.
1402 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001403 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001404 if self.returncode is not None:
1405 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001406 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001407 if pid == self.pid:
1408 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001409 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001410 if _deadstate is not None:
1411 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001412 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001413 # This happens if SIGCLD is set to be ignored or
1414 # waiting for child processes has otherwise been
1415 # disabled for our process. This child is dead, we
1416 # can't get the status.
1417 # http://bugs.python.org/issue15756
1418 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001419 finally:
1420 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001421 return self.returncode
1422
1423
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001424 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001425 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001426 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001427 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001428 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001429 # This happens if SIGCLD is set to be ignored or waiting
1430 # for child processes has otherwise been disabled for our
1431 # process. This child is dead, we can't get the status.
1432 pid = self.pid
1433 sts = 0
1434 return (pid, sts)
1435
1436
Gregory P. Smith82604e02016-11-20 16:31:07 -08001437 def wait(self, timeout=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001438 """Wait for child process to terminate. Returns returncode
1439 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001440 if self.returncode is not None:
1441 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001442
Gregory P. Smith82604e02016-11-20 16:31:07 -08001443 if timeout is not None:
1444 endtime = _time() + timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001445 # Enter a busy loop if we have a timeout. This busy loop was
1446 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1447 delay = 0.0005 # 500 us -> initial delay of 1 ms
1448 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001449 if self._waitpid_lock.acquire(False):
1450 try:
1451 if self.returncode is not None:
1452 break # Another thread waited.
1453 (pid, sts) = self._try_wait(os.WNOHANG)
1454 assert pid == self.pid or pid == 0
1455 if pid == self.pid:
1456 self._handle_exitstatus(sts)
1457 break
1458 finally:
1459 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001460 remaining = self._remaining_time(endtime)
1461 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001462 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001463 delay = min(delay * 2, remaining, .05)
1464 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001465 else:
1466 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001467 with self._waitpid_lock:
1468 if self.returncode is not None:
1469 break # Another thread waited.
1470 (pid, sts) = self._try_wait(0)
1471 # Check the pid and loop as waitpid has been known to
1472 # return 0 even without WNOHANG in odd situations.
1473 # http://bugs.python.org/issue14396.
1474 if pid == self.pid:
1475 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001476 return self.returncode
1477
1478
Reid Kleckner2b228f02011-03-16 16:57:54 -04001479 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001480 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001481 # Flush stdio buffer. This might block, if the user has
1482 # been writing to .stdin in an uncontrolled fashion.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001483 try:
1484 self.stdin.flush()
1485 except BrokenPipeError:
1486 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001487 if not input:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001488 try:
1489 self.stdin.close()
1490 except BrokenPipeError:
1491 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001492
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001493 stdout = None
1494 stderr = None
1495
1496 # Only create this mapping if we haven't already.
1497 if not self._communication_started:
1498 self._fileobj2output = {}
1499 if self.stdout:
1500 self._fileobj2output[self.stdout] = []
1501 if self.stderr:
1502 self._fileobj2output[self.stderr] = []
1503
1504 if self.stdout:
1505 stdout = self._fileobj2output[self.stdout]
1506 if self.stderr:
1507 stderr = self._fileobj2output[self.stderr]
1508
1509 self._save_input(input)
1510
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001511 if self._input:
1512 input_view = memoryview(self._input)
1513
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001514 with _PopenSelector() as selector:
1515 if self.stdin and input:
1516 selector.register(self.stdin, selectors.EVENT_WRITE)
1517 if self.stdout:
1518 selector.register(self.stdout, selectors.EVENT_READ)
1519 if self.stderr:
1520 selector.register(self.stderr, selectors.EVENT_READ)
1521
1522 while selector.get_map():
1523 timeout = self._remaining_time(endtime)
1524 if timeout is not None and timeout < 0:
1525 raise TimeoutExpired(self.args, orig_timeout)
1526
1527 ready = selector.select(timeout)
1528 self._check_timeout(endtime, orig_timeout)
1529
1530 # XXX Rewrite these to use non-blocking I/O on the file
1531 # objects; they are no longer using C stdio!
1532
1533 for key, events in ready:
1534 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001535 chunk = input_view[self._input_offset :
1536 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001537 try:
1538 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001539 except BrokenPipeError:
1540 selector.unregister(key.fileobj)
1541 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001542 else:
1543 if self._input_offset >= len(self._input):
1544 selector.unregister(key.fileobj)
1545 key.fileobj.close()
1546 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001547 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001548 if not data:
1549 selector.unregister(key.fileobj)
1550 key.fileobj.close()
1551 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001552
1553 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001554
1555 # All data exchanged. Translate lists into strings.
1556 if stdout is not None:
1557 stdout = b''.join(stdout)
1558 if stderr is not None:
1559 stderr = b''.join(stderr)
1560
1561 # Translate newlines, if requested.
1562 # This also turns bytes into strings.
andyclegg7fed7bd2017-10-23 03:01:19 +01001563 if self.text_mode:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001564 if stdout is not None:
1565 stdout = self._translate_newlines(stdout,
Steve Dower050acae2016-09-06 20:16:17 -07001566 self.stdout.encoding,
1567 self.stdout.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001568 if stderr is not None:
1569 stderr = self._translate_newlines(stderr,
Steve Dower050acae2016-09-06 20:16:17 -07001570 self.stderr.encoding,
1571 self.stderr.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001572
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001573 return (stdout, stderr)
1574
1575
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001576 def _save_input(self, input):
1577 # This method is called from the _communicate_with_*() methods
1578 # so that if we time out while communicating, we can continue
1579 # sending input if we retry.
1580 if self.stdin and self._input is None:
1581 self._input_offset = 0
1582 self._input = input
andyclegg7fed7bd2017-10-23 03:01:19 +01001583 if input is not None and self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -07001584 self._input = self._input.encode(self.stdin.encoding,
1585 self.stdin.errors)
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001586
1587
Christian Heimesa342c012008-04-20 21:01:16 +00001588 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001589 """Send a signal to the process."""
1590 # Skip signalling a process that we know has already died.
1591 if self.returncode is None:
1592 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00001593
1594 def terminate(self):
1595 """Terminate the process with SIGTERM
1596 """
1597 self.send_signal(signal.SIGTERM)
1598
1599 def kill(self):
1600 """Kill the process with SIGKILL
1601 """
1602 self.send_signal(signal.SIGKILL)