blob: 502e26b9c42c3f36ae534210396d88ad66d15e26 [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,
41 then returns a (status, 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.
63
64 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):
74 return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode)
75
Gregory P. Smith6e730002015-04-14 16:14:25 -070076 @property
77 def stdout(self):
78 """Alias for output attribute, to match stderr"""
79 return self.output
80
81 @stdout.setter
82 def stdout(self, value):
83 # There's no obvious reason to set this, but allow it anyway so
84 # .stdout is a transparent alias for .output
85 self.output = value
86
Peter Astrand454f7672005-01-01 09:36:35 +000087
Gregory P. Smith54d412e2011-03-14 14:08:43 -040088class TimeoutExpired(SubprocessError):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -040089 """This exception is raised when the timeout expires while waiting for a
90 child process.
Martin Panter4afdca02016-10-25 22:20:48 +000091
92 Attributes:
93 cmd, output, stdout, stderr, timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -040094 """
Gregory P. Smith6e730002015-04-14 16:14:25 -070095 def __init__(self, cmd, timeout, output=None, stderr=None):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -040096 self.cmd = cmd
Reid Kleckner2b228f02011-03-16 16:57:54 -040097 self.timeout = timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -040098 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -070099 self.stderr = stderr
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400100
101 def __str__(self):
102 return ("Command '%s' timed out after %s seconds" %
103 (self.cmd, self.timeout))
104
Gregory P. Smith6e730002015-04-14 16:14:25 -0700105 @property
106 def stdout(self):
107 return self.output
108
109 @stdout.setter
110 def stdout(self, value):
111 # There's no obvious reason to set this, but allow it anyway so
112 # .stdout is a transparent alias for .output
113 self.output = value
114
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400115
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700116if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000117 import threading
118 import msvcrt
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200119 import _winapi
Brian Curtin1ce6b582010-04-24 16:19:22 +0000120 class STARTUPINFO:
121 dwFlags = 0
122 hStdInput = None
123 hStdOutput = None
124 hStdError = None
125 wShowWindow = 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000126else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -0700127 import _posixsubprocess
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100128 import select
129 import selectors
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700130 try:
131 import threading
132 except ImportError:
133 import dummy_threading as threading
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000134
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000135 # When select or poll has indicated that the file is writable,
136 # we can write up to _PIPE_BUF bytes without risk of blocking.
137 # POSIX defines PIPE_BUF as >= 512.
138 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
139
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100140 # poll/select have the advantage of not requiring any extra file
141 # descriptor, contrarily to epoll/kqueue (also, they require a single
142 # syscall).
143 if hasattr(selectors, 'PollSelector'):
144 _PopenSelector = selectors.PollSelector
145 else:
146 _PopenSelector = selectors.SelectSelector
147
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000148
Brett Cannona23810f2008-05-26 19:04:21 +0000149__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
Gregory P. Smith6e730002015-04-14 16:14:25 -0700150 "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL",
151 "SubprocessError", "TimeoutExpired", "CompletedProcess"]
Gregory P. Smithace55862015-04-07 15:57:54 -0700152 # NOTE: We intentionally exclude list2cmdline as it is
153 # considered an internal implementation detail. issue10838.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000154
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700155if _mswindows:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200156 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
157 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
158 STD_ERROR_HANDLE, SW_HIDE,
159 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW)
Brian Curtin5d9deaa2011-04-29 16:24:07 -0500160
Brian Curtin08fd8d92011-04-29 16:11:30 -0500161 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
Brian Curtin8b8e7f42011-04-29 15:48:13 -0500162 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
163 "STD_ERROR_HANDLE", "SW_HIDE",
164 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW"])
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200165
166 class Handle(int):
167 closed = False
168
169 def Close(self, CloseHandle=_winapi.CloseHandle):
170 if not self.closed:
171 self.closed = True
172 CloseHandle(self)
173
174 def Detach(self):
175 if not self.closed:
176 self.closed = True
177 return int(self)
178 raise ValueError("already closed")
179
180 def __repr__(self):
Serhiy Storchaka465e60e2014-07-25 23:36:00 +0300181 return "%s(%d)" % (self.__class__.__name__, int(self))
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200182
183 __del__ = Close
184 __str__ = __repr__
185
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000186
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200187# This lists holds Popen instances for which the underlying process had not
188# exited at the time its __del__ method got called: those processes are wait()ed
189# for synchronously from _cleanup() when a new Popen object is created, to avoid
190# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000191_active = []
192
193def _cleanup():
194 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000195 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200196 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000197 try:
198 _active.remove(inst)
199 except ValueError:
200 # This can happen if two threads create a new Popen instance.
201 # It's harmless that it was already removed, so ignore.
202 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000203
204PIPE = -1
205STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200206DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000207
208
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200209# XXX This function is only used by multiprocessing and the test suite,
210# but it's here so that it can be imported when Python is compiled without
211# threads.
212
213def _args_from_interpreter_flags():
214 """Return a list of command-line arguments reproducing the current
215 settings in sys.flags and sys.warnoptions."""
216 flag_opt_map = {
217 'debug': 'd',
218 # 'inspect': 'i',
219 # 'interactive': 'i',
220 'optimize': 'O',
221 'dont_write_bytecode': 'B',
222 'no_user_site': 's',
223 'no_site': 'S',
224 'ignore_environment': 'E',
225 'verbose': 'v',
226 'bytes_warning': 'b',
227 'quiet': 'q',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200228 }
229 args = []
230 for flag, opt in flag_opt_map.items():
231 v = getattr(sys.flags, flag)
232 if v > 0:
233 args.append('-' + opt * v)
234 for opt in sys.warnoptions:
235 args.append('-W' + opt)
236 return args
237
238
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400239def call(*popenargs, timeout=None, **kwargs):
240 """Run command with arguments. Wait for command to complete or
241 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000242
243 The arguments are the same as for the Popen constructor. Example:
244
245 retcode = call(["ls", "-l"])
246 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200247 with Popen(*popenargs, **kwargs) as p:
248 try:
249 return p.wait(timeout=timeout)
250 except:
251 p.kill()
252 p.wait()
253 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000254
255
Peter Astrand454f7672005-01-01 09:36:35 +0000256def check_call(*popenargs, **kwargs):
257 """Run command with arguments. Wait for command to complete. If
258 the exit code was zero then return, otherwise raise
259 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000260 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000261
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400262 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000263
264 check_call(["ls", "-l"])
265 """
266 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000267 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000268 cmd = kwargs.get("args")
269 if cmd is None:
270 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000271 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000272 return 0
273
274
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400275def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700276 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000277
278 If the exit code was non-zero it raises a CalledProcessError. The
279 CalledProcessError object will have the return code in the returncode
280 attribute and output in the output attribute.
281
282 The arguments are the same as for the Popen constructor. Example:
283
284 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000285 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000286
287 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000288 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000289
290 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000291 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000292 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000293 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700294
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300295 There is an additional optional argument, "input", allowing you to
296 pass a string to the subprocess's stdin. If you use this argument
297 you may not also use the Popen constructor's "stdin" argument, as
298 it too will be used internally. Example:
299
300 >>> check_output(["sed", "-e", "s/foo/bar/"],
301 ... input=b"when in the course of fooman events\n")
302 b'when in the course of barman events\n'
303
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400304 If universal_newlines=True is passed, the "input" argument must be a
305 string and the return value will be a string rather than bytes.
Georg Brandlf9734072008-12-07 15:30:06 +0000306 """
307 if 'stdout' in kwargs:
308 raise ValueError('stdout argument not allowed, it will be overridden.')
Gregory P. Smith6e730002015-04-14 16:14:25 -0700309
310 if 'input' in kwargs and kwargs['input'] is None:
311 # Explicitly passing input=None was previously equivalent to passing an
312 # empty string. That is maintained here for backwards compatibility.
313 kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
314
315 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
316 **kwargs).stdout
317
318
319class CompletedProcess(object):
320 """A process that has finished running.
321
322 This is returned by run().
323
324 Attributes:
325 args: The list or str args passed to run().
326 returncode: The exit code of the process, negative for signals.
327 stdout: The standard output (None if not captured).
328 stderr: The standard error (None if not captured).
329 """
330 def __init__(self, args, returncode, stdout=None, stderr=None):
331 self.args = args
332 self.returncode = returncode
333 self.stdout = stdout
334 self.stderr = stderr
335
336 def __repr__(self):
337 args = ['args={!r}'.format(self.args),
338 'returncode={!r}'.format(self.returncode)]
339 if self.stdout is not None:
340 args.append('stdout={!r}'.format(self.stdout))
341 if self.stderr is not None:
342 args.append('stderr={!r}'.format(self.stderr))
343 return "{}({})".format(type(self).__name__, ', '.join(args))
344
345 def check_returncode(self):
346 """Raise CalledProcessError if the exit code is non-zero."""
347 if self.returncode:
348 raise CalledProcessError(self.returncode, self.args, self.stdout,
349 self.stderr)
350
351
352def run(*popenargs, input=None, timeout=None, check=False, **kwargs):
353 """Run command with arguments and return a CompletedProcess instance.
354
355 The returned instance will have attributes args, returncode, stdout and
356 stderr. By default, stdout and stderr are not captured, and those attributes
357 will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.
358
359 If check is True and the exit code was non-zero, it raises a
360 CalledProcessError. The CalledProcessError object will have the return code
361 in the returncode attribute, and output & stderr attributes if those streams
362 were captured.
363
364 If timeout is given, and the process takes too long, a TimeoutExpired
365 exception will be raised.
366
367 There is an optional argument "input", allowing you to
368 pass a string to the subprocess's stdin. If you use this argument
369 you may not also use the Popen constructor's "stdin" argument, as
370 it will be used internally.
371
372 The other arguments are the same as for the Popen constructor.
373
374 If universal_newlines=True is passed, the "input" argument must be a
375 string and stdout/stderr in the returned object will be strings rather than
376 bytes.
377 """
378 if input is not None:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300379 if 'stdin' in kwargs:
380 raise ValueError('stdin and input arguments may not both be used.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300381 kwargs['stdin'] = PIPE
Gregory P. Smith6e730002015-04-14 16:14:25 -0700382
383 with Popen(*popenargs, **kwargs) as process:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200384 try:
Gregory P. Smith6e730002015-04-14 16:14:25 -0700385 stdout, stderr = process.communicate(input, timeout=timeout)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200386 except TimeoutExpired:
387 process.kill()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700388 stdout, stderr = process.communicate()
389 raise TimeoutExpired(process.args, timeout, output=stdout,
390 stderr=stderr)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200391 except:
392 process.kill()
393 process.wait()
394 raise
395 retcode = process.poll()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700396 if check and retcode:
397 raise CalledProcessError(retcode, process.args,
398 output=stdout, stderr=stderr)
399 return CompletedProcess(process.args, retcode, stdout, stderr)
Peter Astrand454f7672005-01-01 09:36:35 +0000400
401
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000402def list2cmdline(seq):
403 """
404 Translate a sequence of arguments into a command line
405 string, using the same rules as the MS C runtime:
406
407 1) Arguments are delimited by white space, which is either a
408 space or a tab.
409
410 2) A string surrounded by double quotation marks is
411 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000412 contained within. A quoted string can be embedded in an
413 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000414
415 3) A double quotation mark preceded by a backslash is
416 interpreted as a literal double quotation mark.
417
418 4) Backslashes are interpreted literally, unless they
419 immediately precede a double quotation mark.
420
421 5) If backslashes immediately precede a double quotation mark,
422 every pair of backslashes is interpreted as a literal
423 backslash. If the number of backslashes is odd, the last
424 backslash escapes the next double quotation mark as
425 described in rule 3.
426 """
427
428 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000429 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
430 # or search http://msdn.microsoft.com for
431 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000432 result = []
433 needquote = False
434 for arg in seq:
435 bs_buf = []
436
437 # Add a space to separate this argument from the others
438 if result:
439 result.append(' ')
440
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000441 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000442 if needquote:
443 result.append('"')
444
445 for c in arg:
446 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000447 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000448 bs_buf.append(c)
449 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000450 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000451 result.append('\\' * len(bs_buf)*2)
452 bs_buf = []
453 result.append('\\"')
454 else:
455 # Normal char
456 if bs_buf:
457 result.extend(bs_buf)
458 bs_buf = []
459 result.append(c)
460
Christian Heimesfdab48e2008-01-20 09:06:41 +0000461 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000462 if bs_buf:
463 result.extend(bs_buf)
464
465 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000466 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000467 result.append('"')
468
469 return ''.join(result)
470
471
Brett Cannona23810f2008-05-26 19:04:21 +0000472# Various tools for executing commands and looking at their output and status.
473#
Brett Cannona23810f2008-05-26 19:04:21 +0000474
475def getstatusoutput(cmd):
Tim Golden60798142013-11-05 12:57:25 +0000476 """ Return (status, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000477
Tim Golden60798142013-11-05 12:57:25 +0000478 Execute the string 'cmd' in a shell with 'check_output' and
479 return a 2-tuple (status, output). Universal newlines mode is used,
480 meaning that the result with be decoded to a string.
481
482 A trailing newline is stripped from the output.
483 The exit status for the command can be interpreted
484 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000485
486 >>> import subprocess
487 >>> subprocess.getstatusoutput('ls /bin/ls')
488 (0, '/bin/ls')
489 >>> subprocess.getstatusoutput('cat /bin/junk')
490 (256, 'cat: /bin/junk: No such file or directory')
491 >>> subprocess.getstatusoutput('/bin/junk')
492 (256, 'sh: /bin/junk: not found')
493 """
Tim Goldene0041752013-11-03 12:53:17 +0000494 try:
495 data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT)
496 status = 0
497 except CalledProcessError as ex:
498 data = ex.output
499 status = ex.returncode
500 if data[-1:] == '\n':
501 data = data[:-1]
502 return status, data
Brett Cannona23810f2008-05-26 19:04:21 +0000503
504def getoutput(cmd):
505 """Return output (stdout or stderr) of executing cmd in a shell.
506
507 Like getstatusoutput(), except the exit status is ignored and the return
508 value is a string containing the command's output. Example:
509
510 >>> import subprocess
511 >>> subprocess.getoutput('ls /bin/ls')
512 '/bin/ls'
513 """
514 return getstatusoutput(cmd)[1]
515
516
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000517_PLATFORM_DEFAULT_CLOSE_FDS = object()
Gregory P. Smithf5604852010-12-13 06:45:02 +0000518
519
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000520class Popen(object):
Martin Panter4afdca02016-10-25 22:20:48 +0000521 """ Execute a child program in a new process.
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200522
Martin Panter4afdca02016-10-25 22:20:48 +0000523 For a complete description of the arguments see the Python documentation.
524
525 Arguments:
526 args: A string, or a sequence of program arguments.
527
528 bufsize: supplied as the buffering argument to the open() function when
529 creating the stdin/stdout/stderr pipe file objects
530
531 executable: A replacement program to execute.
532
533 stdin, stdout and stderr: These specify the executed programs' standard
534 input, standard output and standard error file handles, respectively.
535
536 preexec_fn: (POSIX only) An object to be called in the child process
537 just before the child is executed.
538
539 close_fds: Controls closing or inheriting of file descriptors.
540
541 shell: If true, the command will be executed through the shell.
542
543 cwd: Sets the current directory before the child is executed.
544
545 env: Defines the environment variables for the new process.
546
547 universal_newlines: If true, use universal line endings for file
548 objects stdin, stdout and stderr.
549
550 startupinfo and creationflags (Windows only)
551
552 restore_signals (POSIX only)
553
554 start_new_session (POSIX only)
555
556 pass_fds (POSIX only)
557
558 Attributes:
559 stdin, stdout, stderr, pid, returncode
560 """
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200561 _child_created = False # Set here since __del__ checks it
562
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700563 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000564 stdin=None, stdout=None, stderr=None,
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000565 preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,
566 shell=False, cwd=None, env=None, universal_newlines=False,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000567 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000568 restore_signals=True, start_new_session=False,
569 pass_fds=()):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000570 """Create new Popen instance."""
571 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700572 # Held while anything is calling waitpid before returncode has been
573 # updated to prevent clobbering returncode if wait() or poll() are
574 # called from multiple threads at once. After acquiring the lock,
575 # code must re-check self.returncode to see if another thread just
576 # finished a waitpid() call.
577 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000578
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400579 self._input = None
580 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000581 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700582 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000583 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000584 raise TypeError("bufsize must be an integer")
585
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700586 if _mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000587 if preexec_fn is not None:
588 raise ValueError("preexec_fn is not supported on Windows "
589 "platforms")
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000590 any_stdio_set = (stdin is not None or stdout is not None or
591 stderr is not None)
592 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
593 if any_stdio_set:
594 close_fds = False
595 else:
596 close_fds = True
597 elif close_fds and any_stdio_set:
598 raise ValueError(
599 "close_fds is not supported on Windows platforms"
600 " if you redirect stdin/stdout/stderr")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000601 else:
602 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000603 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
604 close_fds = True
605 if pass_fds and not close_fds:
606 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
607 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000608 if startupinfo is not None:
609 raise ValueError("startupinfo is only supported on Windows "
610 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000611 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000612 raise ValueError("creationflags is only supported on Windows "
613 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000614
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400615 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000616 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000617 self.stdout = None
618 self.stderr = None
619 self.pid = None
620 self.returncode = None
621 self.universal_newlines = universal_newlines
622
623 # Input and output objects. The general principle is like
624 # this:
625 #
626 # Parent Child
627 # ------ -----
628 # p2cwrite ---stdin---> p2cread
629 # c2pread <--stdout--- c2pwrite
630 # errread <--stderr--- errwrite
631 #
632 # On POSIX, the child objects are file descriptors. On
633 # Windows, these are Windows file handles. The parent objects
634 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000635 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000636 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000637
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000638 (p2cread, p2cwrite,
639 c2pread, c2pwrite,
640 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
641
Antoine Pitrouc9982322011-01-04 19:07:07 +0000642 # We wrap OS handles *before* launching the child, otherwise a
643 # quickly terminating child could make our fds unwrappable
644 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000645
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700646 if _mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000647 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000648 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000649 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000650 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000651 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000652 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000653
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000654 if p2cwrite != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000655 self.stdin = io.open(p2cwrite, 'wb', bufsize)
Andrew Svetlov592df202012-08-15 17:36:15 +0300656 if universal_newlines:
Antoine Pitrouafe8d062014-09-21 21:10:56 +0200657 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
658 line_buffering=(bufsize == 1))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000659 if c2pread != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000660 self.stdout = io.open(c2pread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000661 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000662 self.stdout = io.TextIOWrapper(self.stdout)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000663 if errread != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000664 self.stderr = io.open(errread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000665 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000666 self.stderr = io.TextIOWrapper(self.stderr)
Tim Peterse718f612004-10-12 21:51:32 +0000667
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700668 self._closed_child_pipe_fds = False
Antoine Pitrouc9982322011-01-04 19:07:07 +0000669 try:
670 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300671 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000672 startupinfo, creationflags, shell,
673 p2cread, p2cwrite,
674 c2pread, c2pwrite,
675 errread, errwrite,
676 restore_signals, start_new_session)
677 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800678 # Cleanup if the child failed starting.
679 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000680 try:
681 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200682 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800683 pass # Ignore EBADF or other errors.
684
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700685 if not self._closed_child_pipe_fds:
686 to_close = []
687 if stdin == PIPE:
688 to_close.append(p2cread)
689 if stdout == PIPE:
690 to_close.append(c2pwrite)
691 if stderr == PIPE:
692 to_close.append(errwrite)
693 if hasattr(self, '_devnull'):
694 to_close.append(self._devnull)
695 for fd in to_close:
696 try:
697 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700698 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700699 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800700
Antoine Pitrouc9982322011-01-04 19:07:07 +0000701 raise
702
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000703
Guido van Rossum98297ee2007-11-06 21:34:58 +0000704 def _translate_newlines(self, data, encoding):
Andrew Svetlov82860712012-08-19 22:13:41 +0300705 data = data.decode(encoding)
706 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000707
Brian Curtin79cdb662010-12-03 02:46:02 +0000708 def __enter__(self):
709 return self
710
711 def __exit__(self, type, value, traceback):
712 if self.stdout:
713 self.stdout.close()
714 if self.stderr:
715 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200716 try: # Flushing a BufferedWriter may raise an error
717 if self.stdin:
718 self.stdin.close()
719 finally:
720 # Wait for the process to terminate, to avoid zombies.
721 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000722
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200723 def __del__(self, _maxsize=sys.maxsize):
724 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000725 # We didn't get to successfully create a child process.
726 return
727 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000728 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000729 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000730 # Child is still running, keep us alive until we can wait on it.
731 _active.append(self)
732
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200733 def _get_devnull(self):
734 if not hasattr(self, '_devnull'):
735 self._devnull = os.open(os.devnull, os.O_RDWR)
736 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000737
Victor Stinnera5e881d2015-01-14 17:07:59 +0100738 def _stdin_write(self, input):
739 if input:
740 try:
741 self.stdin.write(input)
742 except BrokenPipeError:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000743 pass # communicate() must ignore broken pipe errors.
Victor Stinnera5e881d2015-01-14 17:07:59 +0100744 except OSError as e:
745 if e.errno == errno.EINVAL and self.poll() is not None:
746 # Issue #19612: On Windows, stdin.write() fails with EINVAL
747 # if the process already exited before the write
748 pass
749 else:
750 raise
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000751 try:
752 self.stdin.close()
753 except BrokenPipeError:
754 pass # communicate() must ignore broken pipe errors.
755 except OSError as e:
756 if e.errno == errno.EINVAL and self.poll() is not None:
757 pass
758 else:
759 raise
Victor Stinnera5e881d2015-01-14 17:07:59 +0100760
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400761 def communicate(self, input=None, timeout=None):
Peter Astrand23109f02005-03-03 20:28:59 +0000762 """Interact with process: Send data to stdin. Read data from
763 stdout and stderr, until end-of-file is reached. Wait for
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400764 process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +0000765
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400766 The optional "input" argument should be data to be sent to the
767 child process (if self.universal_newlines is True, this should
768 be a string; if it is False, "input" should be bytes), or
769 None, if no data should be sent to the child.
770
771 communicate() returns a tuple (stdout, stderr). These will be
772 bytes or, if self.universal_newlines was True, a string.
773 """
Peter Astrand23109f02005-03-03 20:28:59 +0000774
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400775 if self._communication_started and input:
776 raise ValueError("Cannot send input after starting communication")
777
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400778 # Optimization: If we are not worried about timeouts, we haven't
779 # started communicating, and we have one or zero pipes, using select()
780 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200781 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400782 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000783 stdout = None
784 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000785 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +0100786 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +0000787 elif self.stdout:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000788 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000789 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000790 elif self.stderr:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000791 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000792 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000793 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200794 else:
795 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +0200796 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +0200797 else:
798 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000799
Victor Stinner7a8d0812011-04-05 13:13:08 +0200800 try:
801 stdout, stderr = self._communicate(input, endtime, timeout)
802 finally:
803 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400804
Victor Stinner7a8d0812011-04-05 13:13:08 +0200805 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400806
807 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +0000808
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000809
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000810 def poll(self):
Martin Panter4afdca02016-10-25 22:20:48 +0000811 """Check if child process has terminated. Set and return returncode
812 attribute."""
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000813 return self._internal_poll()
814
815
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400816 def _remaining_time(self, endtime):
817 """Convenience for _communicate when computing timeouts."""
818 if endtime is None:
819 return None
820 else:
Victor Stinner949d8c92012-05-30 13:30:32 +0200821 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400822
823
Reid Kleckner2b228f02011-03-16 16:57:54 -0400824 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400825 """Convenience for checking if a timeout has expired."""
826 if endtime is None:
827 return
Victor Stinner949d8c92012-05-30 13:30:32 +0200828 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -0400829 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400830
831
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700832 if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000833 #
834 # Windows methods
835 #
836 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +0000837 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000838 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
839 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000840 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000841 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +0000842
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000843 p2cread, p2cwrite = -1, -1
844 c2pread, c2pwrite = -1, -1
845 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000846
Peter Astrandd38ddf42005-02-10 08:32:50 +0000847 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200848 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000849 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200850 p2cread, _ = _winapi.CreatePipe(None, 0)
851 p2cread = Handle(p2cread)
852 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000853 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200854 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
855 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200856 elif stdin == DEVNULL:
857 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000858 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000859 p2cread = msvcrt.get_osfhandle(stdin)
860 else:
861 # Assuming file-like object
862 p2cread = msvcrt.get_osfhandle(stdin.fileno())
863 p2cread = self._make_inheritable(p2cread)
864
Peter Astrandd38ddf42005-02-10 08:32:50 +0000865 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200866 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000867 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200868 _, c2pwrite = _winapi.CreatePipe(None, 0)
869 c2pwrite = Handle(c2pwrite)
870 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000871 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200872 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
873 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200874 elif stdout == DEVNULL:
875 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000876 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000877 c2pwrite = msvcrt.get_osfhandle(stdout)
878 else:
879 # Assuming file-like object
880 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
881 c2pwrite = self._make_inheritable(c2pwrite)
882
Peter Astrandd38ddf42005-02-10 08:32:50 +0000883 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200884 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000885 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200886 _, errwrite = _winapi.CreatePipe(None, 0)
887 errwrite = Handle(errwrite)
888 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000889 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200890 errread, errwrite = _winapi.CreatePipe(None, 0)
891 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000892 elif stderr == STDOUT:
893 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200894 elif stderr == DEVNULL:
895 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000896 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000897 errwrite = msvcrt.get_osfhandle(stderr)
898 else:
899 # Assuming file-like object
900 errwrite = msvcrt.get_osfhandle(stderr.fileno())
901 errwrite = self._make_inheritable(errwrite)
902
903 return (p2cread, p2cwrite,
904 c2pread, c2pwrite,
905 errread, errwrite)
906
907
908 def _make_inheritable(self, handle):
909 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200910 h = _winapi.DuplicateHandle(
911 _winapi.GetCurrentProcess(), handle,
912 _winapi.GetCurrentProcess(), 0, 1,
913 _winapi.DUPLICATE_SAME_ACCESS)
914 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000915
916
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000917 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300918 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000919 startupinfo, creationflags, shell,
920 p2cread, p2cwrite,
921 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000922 errread, errwrite,
923 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000924 """Execute program (MS Windows version)"""
925
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000926 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000927
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000928 if not isinstance(args, str):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000929 args = list2cmdline(args)
930
Peter Astrandc1d65362004-11-07 14:30:34 +0000931 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +0000932 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000933 startupinfo = STARTUPINFO()
Victor Stinnerb3693582010-05-21 20:13:12 +0000934 if -1 not in (p2cread, c2pwrite, errwrite):
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200935 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +0000936 startupinfo.hStdInput = p2cread
937 startupinfo.hStdOutput = c2pwrite
938 startupinfo.hStdError = errwrite
939
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000940 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200941 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
942 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000943 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +0000944 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000945
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000946 # Start the process
947 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200948 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +0000949 # no special security
950 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +0000951 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +0000952 creationflags,
953 env,
954 cwd,
955 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +0000956 finally:
957 # Child is launched. Close the parent's copy of those pipe
958 # handles that only the child should have open. You need
959 # to make sure that no handles to the write end of the
960 # output pipe are maintained in this process or else the
961 # pipe will not close when the child process exits and the
962 # ReadFile will hang.
963 if p2cread != -1:
964 p2cread.Close()
965 if c2pwrite != -1:
966 c2pwrite.Close()
967 if errwrite != -1:
968 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200969 if hasattr(self, '_devnull'):
970 os.close(self._devnull)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000971
972 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000973 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200974 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000975 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200976 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000977
Brett Cannon84df1e62010-05-14 00:33:40 +0000978 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200979 _WaitForSingleObject=_winapi.WaitForSingleObject,
980 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
981 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000982 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +0000983 attribute.
984
985 This method is called by __del__, so it can only refer to objects
986 in its local scope.
987
988 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000989 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +0000990 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
991 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000992 return self.returncode
993
994
Reid Kleckner2b228f02011-03-16 16:57:54 -0400995 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000996 """Wait for child process to terminate. Returns returncode
997 attribute."""
Reid Kleckner2b228f02011-03-16 16:57:54 -0400998 if endtime is not None:
999 timeout = self._remaining_time(endtime)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001000 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001001 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001002 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001003 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001004 if self.returncode is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001005 result = _winapi.WaitForSingleObject(self._handle,
1006 timeout_millis)
1007 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001008 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001009 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001010 return self.returncode
1011
1012
1013 def _readerthread(self, fh, buffer):
1014 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001015 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001016
1017
Reid Kleckner2b228f02011-03-16 16:57:54 -04001018 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001019 # Start reader threads feeding into a list hanging off of this
1020 # object, unless they've already been started.
1021 if self.stdout and not hasattr(self, "_stdout_buff"):
1022 self._stdout_buff = []
1023 self.stdout_thread = \
1024 threading.Thread(target=self._readerthread,
1025 args=(self.stdout, self._stdout_buff))
1026 self.stdout_thread.daemon = True
1027 self.stdout_thread.start()
1028 if self.stderr and not hasattr(self, "_stderr_buff"):
1029 self._stderr_buff = []
1030 self.stderr_thread = \
1031 threading.Thread(target=self._readerthread,
1032 args=(self.stderr, self._stderr_buff))
1033 self.stderr_thread.daemon = True
1034 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001035
1036 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001037 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001038
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001039 # Wait for the reader threads, or time out. If we time out, the
1040 # threads remain reading and the fds left open in case the user
1041 # calls communicate again.
1042 if self.stdout is not None:
1043 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001044 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001045 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001046 if self.stderr is not None:
1047 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001048 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001049 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001050
1051 # Collect the output from and close both pipes, now that we know
1052 # both have been read successfully.
1053 stdout = None
1054 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001055 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001056 stdout = self._stdout_buff
1057 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001058 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001059 stderr = self._stderr_buff
1060 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001061
1062 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001063 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001064 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001065 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001066 stderr = stderr[0]
1067
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001068 return (stdout, stderr)
1069
Christian Heimesa342c012008-04-20 21:01:16 +00001070 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001071 """Send a signal to the process."""
1072 # Don't signal a process that we know has already died.
1073 if self.returncode is not None:
1074 return
Christian Heimesa342c012008-04-20 21:01:16 +00001075 if sig == signal.SIGTERM:
1076 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001077 elif sig == signal.CTRL_C_EVENT:
1078 os.kill(self.pid, signal.CTRL_C_EVENT)
1079 elif sig == signal.CTRL_BREAK_EVENT:
1080 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001081 else:
Brian Curtin19651362010-09-07 13:24:38 +00001082 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001083
1084 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001085 """Terminates the process."""
1086 # Don't terminate a process that we know has already died.
1087 if self.returncode is not None:
1088 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001089 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001090 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001091 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001092 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1093 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001094 rc = _winapi.GetExitCodeProcess(self._handle)
1095 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001096 raise
1097 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001098
1099 kill = terminate
1100
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001101 else:
1102 #
1103 # POSIX methods
1104 #
1105 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001106 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001107 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1108 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001109 p2cread, p2cwrite = -1, -1
1110 c2pread, c2pwrite = -1, -1
1111 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001112
Peter Astrandd38ddf42005-02-10 08:32:50 +00001113 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001114 pass
1115 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001116 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001117 elif stdin == DEVNULL:
1118 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001119 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001120 p2cread = stdin
1121 else:
1122 # Assuming file-like object
1123 p2cread = stdin.fileno()
1124
Peter Astrandd38ddf42005-02-10 08:32:50 +00001125 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001126 pass
1127 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001128 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001129 elif stdout == DEVNULL:
1130 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001131 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001132 c2pwrite = stdout
1133 else:
1134 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001135 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001136
Peter Astrandd38ddf42005-02-10 08:32:50 +00001137 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001138 pass
1139 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001140 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001141 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001142 if c2pwrite != -1:
1143 errwrite = c2pwrite
1144 else: # child's stdout is not set, use parent's stdout
1145 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001146 elif stderr == DEVNULL:
1147 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001148 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001149 errwrite = stderr
1150 else:
1151 # Assuming file-like object
1152 errwrite = stderr.fileno()
1153
1154 return (p2cread, p2cwrite,
1155 c2pread, c2pwrite,
1156 errread, errwrite)
1157
1158
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001159 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001160 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001161 startupinfo, creationflags, shell,
1162 p2cread, p2cwrite,
1163 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001164 errread, errwrite,
1165 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001166 """Execute program (POSIX version)"""
1167
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001168 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001169 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001170 else:
1171 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001172
1173 if shell:
1174 args = ["/bin/sh", "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001175 if executable:
1176 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001177
Peter Astrandd38ddf42005-02-10 08:32:50 +00001178 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001179 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001180 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001181
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001182 # For transferring possible exec failure from child to parent.
1183 # Data format: "exception name:hex errno:description"
1184 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001185 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001186 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1187 low_fds_to_close = []
1188 while errpipe_write < 3:
1189 low_fds_to_close.append(errpipe_write)
1190 errpipe_write = os.dup(errpipe_write)
1191 for low_fd in low_fds_to_close:
1192 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001193 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001194 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001195 # We must avoid complex work that could involve
1196 # malloc or free in the child process to avoid
1197 # potential deadlocks, thus we do all this here.
1198 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001199
Victor Stinner372b8382011-06-21 17:24:21 +02001200 if env is not None:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001201 env_list = [os.fsencode(k) + b'=' + os.fsencode(v)
1202 for k, v in env.items()]
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001203 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001204 env_list = None # Use execv instead of execve.
1205 executable = os.fsencode(executable)
1206 if os.path.dirname(executable):
1207 executable_list = (executable,)
1208 else:
1209 # This matches the behavior of os._execvpe().
1210 executable_list = tuple(
1211 os.path.join(os.fsencode(dir), executable)
1212 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001213 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001214 fds_to_keep.add(errpipe_write)
1215 self.pid = _posixsubprocess.fork_exec(
1216 args, executable_list,
1217 close_fds, sorted(fds_to_keep), cwd, env_list,
1218 p2cread, p2cwrite, c2pread, c2pwrite,
1219 errread, errwrite,
1220 errpipe_read, errpipe_write,
1221 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001222 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001223 finally:
1224 # be sure the FD is closed no matter what
1225 os.close(errpipe_write)
1226
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001227 # self._devnull is not always defined.
1228 devnull_fd = getattr(self, '_devnull', None)
1229 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001230 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001231 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001232 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001233 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001234 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001235 if devnull_fd is not None:
1236 os.close(devnull_fd)
1237 # Prevent a double close of these fds from __init__ on error.
1238 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001239
1240 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001241 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001242 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001243 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001244 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001245 errpipe_data += part
1246 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001247 break
Facundo Batista10706e22009-06-19 20:34:30 +00001248 finally:
1249 # be sure the FD is closed no matter what
1250 os.close(errpipe_read)
1251
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001252 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001253 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001254 os.waitpid(self.pid, 0)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001255 except ChildProcessError:
1256 pass
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001257 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001258 exception_name, hex_errno, err_msg = (
1259 errpipe_data.split(b':', 2))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001260 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001261 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001262 hex_errno = b'0'
Gregory P. Smith3aee2222012-11-11 00:04:13 -08001263 err_msg = (b'Bad exception data from child: ' +
1264 repr(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001265 child_exception_type = getattr(
1266 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001267 SubprocessError)
Victor Stinner4d078042010-04-23 19:28:32 +00001268 err_msg = err_msg.decode(errors="surrogatepass")
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001269 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001270 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001271 child_exec_never_called = (err_msg == "noexec")
1272 if child_exec_never_called:
1273 err_msg = ""
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001274 if errno_num != 0:
1275 err_msg = os.strerror(errno_num)
1276 if errno_num == errno.ENOENT:
Gregory P. Smith5591b022012-10-10 03:34:47 -07001277 if child_exec_never_called:
1278 # The error must be from chdir(cwd).
1279 err_msg += ': ' + repr(cwd)
1280 else:
1281 err_msg += ': ' + repr(orig_executable)
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001282 raise child_exception_type(errno_num, err_msg)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001283 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001284
1285
Brett Cannon84df1e62010-05-14 00:33:40 +00001286 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1287 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
1288 _WEXITSTATUS=os.WEXITSTATUS):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001289 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001290 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001291 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001292 if _WIFSIGNALED(sts):
1293 self.returncode = -_WTERMSIG(sts)
1294 elif _WIFEXITED(sts):
1295 self.returncode = _WEXITSTATUS(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001296 else:
1297 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001298 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001299
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001300
Brett Cannon84df1e62010-05-14 00:33:40 +00001301 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001302 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001303 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001304 attribute.
1305
1306 This method is called by __del__, so it cannot reference anything
1307 outside of the local scope (nor can any methods it calls).
1308
1309 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001310 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001311 if not self._waitpid_lock.acquire(False):
1312 # Something else is busy calling waitpid. Don't allow two
1313 # at once. We know nothing yet.
1314 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001315 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001316 if self.returncode is not None:
1317 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001318 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001319 if pid == self.pid:
1320 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001321 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001322 if _deadstate is not None:
1323 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001324 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001325 # This happens if SIGCLD is set to be ignored or
1326 # waiting for child processes has otherwise been
1327 # disabled for our process. This child is dead, we
1328 # can't get the status.
1329 # http://bugs.python.org/issue15756
1330 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001331 finally:
1332 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001333 return self.returncode
1334
1335
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001336 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001337 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001338 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001339 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001340 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001341 # This happens if SIGCLD is set to be ignored or waiting
1342 # for child processes has otherwise been disabled for our
1343 # process. This child is dead, we can't get the status.
1344 pid = self.pid
1345 sts = 0
1346 return (pid, sts)
1347
1348
1349 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001350 """Wait for child process to terminate. Returns returncode
1351 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001352 if self.returncode is not None:
1353 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001354
1355 # endtime is preferred to timeout. timeout is only used for
1356 # printing.
1357 if endtime is not None or timeout is not None:
1358 if endtime is None:
Victor Stinner949d8c92012-05-30 13:30:32 +02001359 endtime = _time() + timeout
Reid Kleckner2b228f02011-03-16 16:57:54 -04001360 elif timeout is None:
1361 timeout = self._remaining_time(endtime)
1362
1363 if endtime is not None:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001364 # Enter a busy loop if we have a timeout. This busy loop was
1365 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1366 delay = 0.0005 # 500 us -> initial delay of 1 ms
1367 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001368 if self._waitpid_lock.acquire(False):
1369 try:
1370 if self.returncode is not None:
1371 break # Another thread waited.
1372 (pid, sts) = self._try_wait(os.WNOHANG)
1373 assert pid == self.pid or pid == 0
1374 if pid == self.pid:
1375 self._handle_exitstatus(sts)
1376 break
1377 finally:
1378 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001379 remaining = self._remaining_time(endtime)
1380 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001381 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001382 delay = min(delay * 2, remaining, .05)
1383 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001384 else:
1385 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001386 with self._waitpid_lock:
1387 if self.returncode is not None:
1388 break # Another thread waited.
1389 (pid, sts) = self._try_wait(0)
1390 # Check the pid and loop as waitpid has been known to
1391 # return 0 even without WNOHANG in odd situations.
1392 # http://bugs.python.org/issue14396.
1393 if pid == self.pid:
1394 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001395 return self.returncode
1396
1397
Reid Kleckner2b228f02011-03-16 16:57:54 -04001398 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001399 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001400 # Flush stdio buffer. This might block, if the user has
1401 # been writing to .stdin in an uncontrolled fashion.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001402 try:
1403 self.stdin.flush()
1404 except BrokenPipeError:
1405 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001406 if not input:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001407 try:
1408 self.stdin.close()
1409 except BrokenPipeError:
1410 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001411
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001412 stdout = None
1413 stderr = None
1414
1415 # Only create this mapping if we haven't already.
1416 if not self._communication_started:
1417 self._fileobj2output = {}
1418 if self.stdout:
1419 self._fileobj2output[self.stdout] = []
1420 if self.stderr:
1421 self._fileobj2output[self.stderr] = []
1422
1423 if self.stdout:
1424 stdout = self._fileobj2output[self.stdout]
1425 if self.stderr:
1426 stderr = self._fileobj2output[self.stderr]
1427
1428 self._save_input(input)
1429
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001430 if self._input:
1431 input_view = memoryview(self._input)
1432
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001433 with _PopenSelector() as selector:
1434 if self.stdin and input:
1435 selector.register(self.stdin, selectors.EVENT_WRITE)
1436 if self.stdout:
1437 selector.register(self.stdout, selectors.EVENT_READ)
1438 if self.stderr:
1439 selector.register(self.stderr, selectors.EVENT_READ)
1440
1441 while selector.get_map():
1442 timeout = self._remaining_time(endtime)
1443 if timeout is not None and timeout < 0:
1444 raise TimeoutExpired(self.args, orig_timeout)
1445
1446 ready = selector.select(timeout)
1447 self._check_timeout(endtime, orig_timeout)
1448
1449 # XXX Rewrite these to use non-blocking I/O on the file
1450 # objects; they are no longer using C stdio!
1451
1452 for key, events in ready:
1453 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001454 chunk = input_view[self._input_offset :
1455 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001456 try:
1457 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001458 except BrokenPipeError:
1459 selector.unregister(key.fileobj)
1460 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001461 else:
1462 if self._input_offset >= len(self._input):
1463 selector.unregister(key.fileobj)
1464 key.fileobj.close()
1465 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001466 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001467 if not data:
1468 selector.unregister(key.fileobj)
1469 key.fileobj.close()
1470 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001471
1472 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001473
1474 # All data exchanged. Translate lists into strings.
1475 if stdout is not None:
1476 stdout = b''.join(stdout)
1477 if stderr is not None:
1478 stderr = b''.join(stderr)
1479
1480 # Translate newlines, if requested.
1481 # This also turns bytes into strings.
1482 if self.universal_newlines:
1483 if stdout is not None:
1484 stdout = self._translate_newlines(stdout,
1485 self.stdout.encoding)
1486 if stderr is not None:
1487 stderr = self._translate_newlines(stderr,
1488 self.stderr.encoding)
1489
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001490 return (stdout, stderr)
1491
1492
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001493 def _save_input(self, input):
1494 # This method is called from the _communicate_with_*() methods
1495 # so that if we time out while communicating, we can continue
1496 # sending input if we retry.
1497 if self.stdin and self._input is None:
1498 self._input_offset = 0
1499 self._input = input
1500 if self.universal_newlines and input is not None:
1501 self._input = self._input.encode(self.stdin.encoding)
1502
1503
Christian Heimesa342c012008-04-20 21:01:16 +00001504 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001505 """Send a signal to the process."""
1506 # Skip signalling a process that we know has already died.
1507 if self.returncode is None:
1508 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00001509
1510 def terminate(self):
1511 """Terminate the process with SIGTERM
1512 """
1513 self.send_signal(signal.SIGTERM)
1514
1515 def kill(self):
1516 """Kill the process with SIGKILL
1517 """
1518 self.send_signal(signal.SIGKILL)