blob: 551aad342b8304f3f956563d7381919c064de321 [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.
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
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700141 try:
142 import threading
143 except ImportError:
144 import dummy_threading as threading
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000145
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000146 # When select or poll has indicated that the file is writable,
147 # we can write up to _PIPE_BUF bytes without risk of blocking.
148 # POSIX defines PIPE_BUF as >= 512.
149 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
150
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100151 # poll/select have the advantage of not requiring any extra file
152 # descriptor, contrarily to epoll/kqueue (also, they require a single
153 # syscall).
154 if hasattr(selectors, 'PollSelector'):
155 _PopenSelector = selectors.PollSelector
156 else:
157 _PopenSelector = selectors.SelectSelector
158
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000159
Brett Cannona23810f2008-05-26 19:04:21 +0000160__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
Gregory P. Smith6e730002015-04-14 16:14:25 -0700161 "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL",
162 "SubprocessError", "TimeoutExpired", "CompletedProcess"]
Gregory P. Smithace55862015-04-07 15:57:54 -0700163 # NOTE: We intentionally exclude list2cmdline as it is
164 # considered an internal implementation detail. issue10838.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000165
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700166if _mswindows:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200167 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
168 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
169 STD_ERROR_HANDLE, SW_HIDE,
170 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW)
Brian Curtin5d9deaa2011-04-29 16:24:07 -0500171
Brian Curtin08fd8d92011-04-29 16:11:30 -0500172 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
Brian Curtin8b8e7f42011-04-29 15:48:13 -0500173 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
174 "STD_ERROR_HANDLE", "SW_HIDE",
Martin Panter528619b2016-04-16 23:42:37 +0000175 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW",
176 "STARTUPINFO"])
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200177
178 class Handle(int):
179 closed = False
180
181 def Close(self, CloseHandle=_winapi.CloseHandle):
182 if not self.closed:
183 self.closed = True
184 CloseHandle(self)
185
186 def Detach(self):
187 if not self.closed:
188 self.closed = True
189 return int(self)
190 raise ValueError("already closed")
191
192 def __repr__(self):
Serhiy Storchaka465e60e2014-07-25 23:36:00 +0300193 return "%s(%d)" % (self.__class__.__name__, int(self))
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200194
195 __del__ = Close
196 __str__ = __repr__
197
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000198
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200199# This lists holds Popen instances for which the underlying process had not
200# exited at the time its __del__ method got called: those processes are wait()ed
201# for synchronously from _cleanup() when a new Popen object is created, to avoid
202# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000203_active = []
204
205def _cleanup():
206 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000207 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200208 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000209 try:
210 _active.remove(inst)
211 except ValueError:
212 # This can happen if two threads create a new Popen instance.
213 # It's harmless that it was already removed, so ignore.
214 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000215
216PIPE = -1
217STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200218DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000219
220
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200221# XXX This function is only used by multiprocessing and the test suite,
222# but it's here so that it can be imported when Python is compiled without
223# threads.
224
Victor Stinner9def2842016-01-18 12:15:08 +0100225def _optim_args_from_interpreter_flags():
226 """Return a list of command-line arguments reproducing the current
227 optimization settings in sys.flags."""
228 args = []
229 value = sys.flags.optimize
230 if value > 0:
231 args.append('-' + 'O' * value)
232 return args
233
234
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200235def _args_from_interpreter_flags():
236 """Return a list of command-line arguments reproducing the current
237 settings in sys.flags and sys.warnoptions."""
238 flag_opt_map = {
239 'debug': 'd',
240 # 'inspect': 'i',
241 # 'interactive': 'i',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200242 'dont_write_bytecode': 'B',
243 'no_user_site': 's',
244 'no_site': 'S',
245 'ignore_environment': 'E',
246 'verbose': 'v',
247 'bytes_warning': 'b',
248 'quiet': 'q',
Victor Stinner9def2842016-01-18 12:15:08 +0100249 # -O is handled in _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200250 }
Victor Stinner9def2842016-01-18 12:15:08 +0100251 args = _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200252 for flag, opt in flag_opt_map.items():
253 v = getattr(sys.flags, flag)
254 if v > 0:
255 args.append('-' + opt * v)
256 for opt in sys.warnoptions:
257 args.append('-W' + opt)
258 return args
259
260
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400261def call(*popenargs, timeout=None, **kwargs):
262 """Run command with arguments. Wait for command to complete or
263 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000264
265 The arguments are the same as for the Popen constructor. Example:
266
267 retcode = call(["ls", "-l"])
268 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200269 with Popen(*popenargs, **kwargs) as p:
270 try:
271 return p.wait(timeout=timeout)
272 except:
273 p.kill()
274 p.wait()
275 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000276
277
Peter Astrand454f7672005-01-01 09:36:35 +0000278def check_call(*popenargs, **kwargs):
279 """Run command with arguments. Wait for command to complete. If
280 the exit code was zero then return, otherwise raise
281 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000282 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000283
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400284 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000285
286 check_call(["ls", "-l"])
287 """
288 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000289 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000290 cmd = kwargs.get("args")
291 if cmd is None:
292 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000293 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000294 return 0
295
296
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400297def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700298 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000299
300 If the exit code was non-zero it raises a CalledProcessError. The
301 CalledProcessError object will have the return code in the returncode
302 attribute and output in the output attribute.
303
304 The arguments are the same as for the Popen constructor. Example:
305
306 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000307 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000308
309 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000310 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000311
312 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000313 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000314 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000315 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700316
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300317 There is an additional optional argument, "input", allowing you to
318 pass a string to the subprocess's stdin. If you use this argument
319 you may not also use the Popen constructor's "stdin" argument, as
320 it too will be used internally. Example:
321
322 >>> check_output(["sed", "-e", "s/foo/bar/"],
323 ... input=b"when in the course of fooman events\n")
324 b'when in the course of barman events\n'
325
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400326 If universal_newlines=True is passed, the "input" argument must be a
327 string and the return value will be a string rather than bytes.
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
390 pass a string to the subprocess's stdin. If you use this argument
391 you may not also use the Popen constructor's "stdin" argument, as
392 it will be used internally.
393
394 The other arguments are the same as for the Popen constructor.
395
396 If universal_newlines=True is passed, the "input" argument must be a
397 string and stdout/stderr in the returned object will be strings rather than
398 bytes.
399 """
400 if input is not None:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300401 if 'stdin' in kwargs:
402 raise ValueError('stdin and input arguments may not both be used.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300403 kwargs['stdin'] = PIPE
Gregory P. Smith6e730002015-04-14 16:14:25 -0700404
405 with Popen(*popenargs, **kwargs) as process:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200406 try:
Gregory P. Smith6e730002015-04-14 16:14:25 -0700407 stdout, stderr = process.communicate(input, timeout=timeout)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200408 except TimeoutExpired:
409 process.kill()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700410 stdout, stderr = process.communicate()
411 raise TimeoutExpired(process.args, timeout, output=stdout,
412 stderr=stderr)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200413 except:
414 process.kill()
415 process.wait()
416 raise
417 retcode = process.poll()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700418 if check and retcode:
419 raise CalledProcessError(retcode, process.args,
420 output=stdout, stderr=stderr)
421 return CompletedProcess(process.args, retcode, stdout, stderr)
Peter Astrand454f7672005-01-01 09:36:35 +0000422
423
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000424def list2cmdline(seq):
425 """
426 Translate a sequence of arguments into a command line
427 string, using the same rules as the MS C runtime:
428
429 1) Arguments are delimited by white space, which is either a
430 space or a tab.
431
432 2) A string surrounded by double quotation marks is
433 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000434 contained within. A quoted string can be embedded in an
435 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000436
437 3) A double quotation mark preceded by a backslash is
438 interpreted as a literal double quotation mark.
439
440 4) Backslashes are interpreted literally, unless they
441 immediately precede a double quotation mark.
442
443 5) If backslashes immediately precede a double quotation mark,
444 every pair of backslashes is interpreted as a literal
445 backslash. If the number of backslashes is odd, the last
446 backslash escapes the next double quotation mark as
447 described in rule 3.
448 """
449
450 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000451 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
452 # or search http://msdn.microsoft.com for
453 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000454 result = []
455 needquote = False
456 for arg in seq:
457 bs_buf = []
458
459 # Add a space to separate this argument from the others
460 if result:
461 result.append(' ')
462
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000463 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000464 if needquote:
465 result.append('"')
466
467 for c in arg:
468 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000469 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000470 bs_buf.append(c)
471 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000472 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000473 result.append('\\' * len(bs_buf)*2)
474 bs_buf = []
475 result.append('\\"')
476 else:
477 # Normal char
478 if bs_buf:
479 result.extend(bs_buf)
480 bs_buf = []
481 result.append(c)
482
Christian Heimesfdab48e2008-01-20 09:06:41 +0000483 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000484 if bs_buf:
485 result.extend(bs_buf)
486
487 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000488 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000489 result.append('"')
490
491 return ''.join(result)
492
493
Brett Cannona23810f2008-05-26 19:04:21 +0000494# Various tools for executing commands and looking at their output and status.
495#
Brett Cannona23810f2008-05-26 19:04:21 +0000496
497def getstatusoutput(cmd):
Tim Golden60798142013-11-05 12:57:25 +0000498 """ Return (status, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000499
Tim Golden60798142013-11-05 12:57:25 +0000500 Execute the string 'cmd' in a shell with 'check_output' and
Steve Dower050acae2016-09-06 20:16:17 -0700501 return a 2-tuple (status, output). The locale encoding is used
502 to decode the output and process newlines.
Tim Golden60798142013-11-05 12:57:25 +0000503
504 A trailing newline is stripped from the output.
505 The exit status for the command can be interpreted
506 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000507
508 >>> import subprocess
509 >>> subprocess.getstatusoutput('ls /bin/ls')
510 (0, '/bin/ls')
511 >>> subprocess.getstatusoutput('cat /bin/junk')
512 (256, 'cat: /bin/junk: No such file or directory')
513 >>> subprocess.getstatusoutput('/bin/junk')
514 (256, 'sh: /bin/junk: not found')
515 """
Tim Goldene0041752013-11-03 12:53:17 +0000516 try:
517 data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT)
518 status = 0
519 except CalledProcessError as ex:
520 data = ex.output
521 status = ex.returncode
522 if data[-1:] == '\n':
523 data = data[:-1]
524 return status, data
Brett Cannona23810f2008-05-26 19:04:21 +0000525
526def getoutput(cmd):
527 """Return output (stdout or stderr) of executing cmd in a shell.
528
529 Like getstatusoutput(), except the exit status is ignored and the return
530 value is a string containing the command's output. Example:
531
532 >>> import subprocess
533 >>> subprocess.getoutput('ls /bin/ls')
534 '/bin/ls'
535 """
536 return getstatusoutput(cmd)[1]
537
538
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000539_PLATFORM_DEFAULT_CLOSE_FDS = object()
Gregory P. Smithf5604852010-12-13 06:45:02 +0000540
541
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000542class Popen(object):
Martin Panter4afdca02016-10-25 22:20:48 +0000543 """ Execute a child program in a new process.
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200544
Martin Panter4afdca02016-10-25 22:20:48 +0000545 For a complete description of the arguments see the Python documentation.
546
547 Arguments:
548 args: A string, or a sequence of program arguments.
549
550 bufsize: supplied as the buffering argument to the open() function when
551 creating the stdin/stdout/stderr pipe file objects
552
553 executable: A replacement program to execute.
554
555 stdin, stdout and stderr: These specify the executed programs' standard
556 input, standard output and standard error file handles, respectively.
557
558 preexec_fn: (POSIX only) An object to be called in the child process
559 just before the child is executed.
560
561 close_fds: Controls closing or inheriting of file descriptors.
562
563 shell: If true, the command will be executed through the shell.
564
565 cwd: Sets the current directory before the child is executed.
566
567 env: Defines the environment variables for the new process.
568
569 universal_newlines: If true, use universal line endings for file
570 objects stdin, stdout and stderr.
571
572 startupinfo and creationflags (Windows only)
573
574 restore_signals (POSIX only)
575
576 start_new_session (POSIX only)
577
578 pass_fds (POSIX only)
579
Martin Panter3dca6242016-10-25 23:41:42 +0000580 encoding and errors: Text mode encoding and error handling to use for
581 file objects stdin, stdout and stderr.
582
Martin Panter4afdca02016-10-25 22:20:48 +0000583 Attributes:
584 stdin, stdout, stderr, pid, returncode
585 """
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200586 _child_created = False # Set here since __del__ checks it
587
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700588 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000589 stdin=None, stdout=None, stderr=None,
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000590 preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,
591 shell=False, cwd=None, env=None, universal_newlines=False,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000592 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000593 restore_signals=True, start_new_session=False,
Steve Dower050acae2016-09-06 20:16:17 -0700594 pass_fds=(), *, encoding=None, errors=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000595 """Create new Popen instance."""
596 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700597 # Held while anything is calling waitpid before returncode has been
598 # updated to prevent clobbering returncode if wait() or poll() are
599 # called from multiple threads at once. After acquiring the lock,
600 # code must re-check self.returncode to see if another thread just
601 # finished a waitpid() call.
602 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000603
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400604 self._input = None
605 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000606 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700607 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000608 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000609 raise TypeError("bufsize must be an integer")
610
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700611 if _mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000612 if preexec_fn is not None:
613 raise ValueError("preexec_fn is not supported on Windows "
614 "platforms")
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000615 any_stdio_set = (stdin is not None or stdout is not None or
616 stderr is not None)
617 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
618 if any_stdio_set:
619 close_fds = False
620 else:
621 close_fds = True
622 elif close_fds and any_stdio_set:
623 raise ValueError(
624 "close_fds is not supported on Windows platforms"
625 " if you redirect stdin/stdout/stderr")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000626 else:
627 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000628 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
629 close_fds = True
630 if pass_fds and not close_fds:
631 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
632 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000633 if startupinfo is not None:
634 raise ValueError("startupinfo is only supported on Windows "
635 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000636 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000637 raise ValueError("creationflags is only supported on Windows "
638 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000639
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400640 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000641 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000642 self.stdout = None
643 self.stderr = None
644 self.pid = None
645 self.returncode = None
646 self.universal_newlines = universal_newlines
Steve Dower050acae2016-09-06 20:16:17 -0700647 self.encoding = encoding
648 self.errors = errors
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000649
650 # Input and output objects. The general principle is like
651 # this:
652 #
653 # Parent Child
654 # ------ -----
655 # p2cwrite ---stdin---> p2cread
656 # c2pread <--stdout--- c2pwrite
657 # errread <--stderr--- errwrite
658 #
659 # On POSIX, the child objects are file descriptors. On
660 # Windows, these are Windows file handles. The parent objects
661 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000662 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000663 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000664
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000665 (p2cread, p2cwrite,
666 c2pread, c2pwrite,
667 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
668
Antoine Pitrouc9982322011-01-04 19:07:07 +0000669 # We wrap OS handles *before* launching the child, otherwise a
670 # quickly terminating child could make our fds unwrappable
671 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000672
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700673 if _mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000674 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000675 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000676 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000677 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000678 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000679 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000680
Steve Dower050acae2016-09-06 20:16:17 -0700681 text_mode = encoding or errors or universal_newlines
Tim Peterse718f612004-10-12 21:51:32 +0000682
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700683 self._closed_child_pipe_fds = False
Steve Dower050acae2016-09-06 20:16:17 -0700684
Antoine Pitrouc9982322011-01-04 19:07:07 +0000685 try:
Steve Dower050acae2016-09-06 20:16:17 -0700686 if p2cwrite != -1:
687 self.stdin = io.open(p2cwrite, 'wb', bufsize)
688 if text_mode:
689 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
690 line_buffering=(bufsize == 1),
691 encoding=encoding, errors=errors)
692 if c2pread != -1:
693 self.stdout = io.open(c2pread, 'rb', bufsize)
694 if text_mode:
695 self.stdout = io.TextIOWrapper(self.stdout,
696 encoding=encoding, errors=errors)
697 if errread != -1:
698 self.stderr = io.open(errread, 'rb', bufsize)
699 if text_mode:
700 self.stderr = io.TextIOWrapper(self.stderr,
701 encoding=encoding, errors=errors)
702
Antoine Pitrouc9982322011-01-04 19:07:07 +0000703 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300704 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000705 startupinfo, creationflags, shell,
706 p2cread, p2cwrite,
707 c2pread, c2pwrite,
708 errread, errwrite,
709 restore_signals, start_new_session)
710 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800711 # Cleanup if the child failed starting.
712 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000713 try:
714 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200715 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800716 pass # Ignore EBADF or other errors.
717
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700718 if not self._closed_child_pipe_fds:
719 to_close = []
720 if stdin == PIPE:
721 to_close.append(p2cread)
722 if stdout == PIPE:
723 to_close.append(c2pwrite)
724 if stderr == PIPE:
725 to_close.append(errwrite)
726 if hasattr(self, '_devnull'):
727 to_close.append(self._devnull)
728 for fd in to_close:
729 try:
730 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700731 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700732 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800733
Antoine Pitrouc9982322011-01-04 19:07:07 +0000734 raise
735
Steve Dower050acae2016-09-06 20:16:17 -0700736 def _translate_newlines(self, data, encoding, errors):
737 data = data.decode(encoding, errors)
Andrew Svetlov82860712012-08-19 22:13:41 +0300738 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000739
Brian Curtin79cdb662010-12-03 02:46:02 +0000740 def __enter__(self):
741 return self
742
743 def __exit__(self, type, value, traceback):
744 if self.stdout:
745 self.stdout.close()
746 if self.stderr:
747 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200748 try: # Flushing a BufferedWriter may raise an error
749 if self.stdin:
750 self.stdin.close()
751 finally:
752 # Wait for the process to terminate, to avoid zombies.
753 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000754
Victor Stinner9505b032017-01-06 10:44:44 +0100755 def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200756 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000757 # We didn't get to successfully create a child process.
758 return
Victor Stinner5a48e212016-05-20 12:11:15 +0200759 if self.returncode is None:
Victor Stinnerc206f1e2016-06-14 16:42:59 +0200760 # Not reading subprocess exit status creates a zombi process which
761 # is only destroyed at the parent python process exit
Victor Stinner9505b032017-01-06 10:44:44 +0100762 _warn("subprocess %s is still running" % self.pid,
763 ResourceWarning, source=self)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000764 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000765 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000766 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000767 # Child is still running, keep us alive until we can wait on it.
768 _active.append(self)
769
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200770 def _get_devnull(self):
771 if not hasattr(self, '_devnull'):
772 self._devnull = os.open(os.devnull, os.O_RDWR)
773 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000774
Victor Stinnera5e881d2015-01-14 17:07:59 +0100775 def _stdin_write(self, input):
776 if input:
777 try:
778 self.stdin.write(input)
779 except BrokenPipeError:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000780 pass # communicate() must ignore broken pipe errors.
Victor Stinnera5e881d2015-01-14 17:07:59 +0100781 except OSError as e:
782 if e.errno == errno.EINVAL and self.poll() is not None:
783 # Issue #19612: On Windows, stdin.write() fails with EINVAL
784 # if the process already exited before the write
785 pass
786 else:
787 raise
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000788 try:
789 self.stdin.close()
790 except BrokenPipeError:
791 pass # communicate() must ignore broken pipe errors.
792 except OSError as e:
793 if e.errno == errno.EINVAL and self.poll() is not None:
794 pass
795 else:
796 raise
Victor Stinnera5e881d2015-01-14 17:07:59 +0100797
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400798 def communicate(self, input=None, timeout=None):
Peter Astrand23109f02005-03-03 20:28:59 +0000799 """Interact with process: Send data to stdin. Read data from
800 stdout and stderr, until end-of-file is reached. Wait for
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400801 process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +0000802
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400803 The optional "input" argument should be data to be sent to the
804 child process (if self.universal_newlines is True, this should
805 be a string; if it is False, "input" should be bytes), or
806 None, if no data should be sent to the child.
807
808 communicate() returns a tuple (stdout, stderr). These will be
809 bytes or, if self.universal_newlines was True, a string.
810 """
Peter Astrand23109f02005-03-03 20:28:59 +0000811
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400812 if self._communication_started and input:
813 raise ValueError("Cannot send input after starting communication")
814
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400815 # Optimization: If we are not worried about timeouts, we haven't
816 # started communicating, and we have one or zero pipes, using select()
817 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200818 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400819 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000820 stdout = None
821 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000822 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +0100823 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +0000824 elif self.stdout:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000825 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000826 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000827 elif self.stderr:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000828 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000829 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000830 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200831 else:
832 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +0200833 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +0200834 else:
835 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000836
Victor Stinner7a8d0812011-04-05 13:13:08 +0200837 try:
838 stdout, stderr = self._communicate(input, endtime, timeout)
839 finally:
840 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400841
Victor Stinner7a8d0812011-04-05 13:13:08 +0200842 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400843
844 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +0000845
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000846
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000847 def poll(self):
Martin Panter4afdca02016-10-25 22:20:48 +0000848 """Check if child process has terminated. Set and return returncode
849 attribute."""
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000850 return self._internal_poll()
851
852
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400853 def _remaining_time(self, endtime):
854 """Convenience for _communicate when computing timeouts."""
855 if endtime is None:
856 return None
857 else:
Victor Stinner949d8c92012-05-30 13:30:32 +0200858 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400859
860
Reid Kleckner2b228f02011-03-16 16:57:54 -0400861 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400862 """Convenience for checking if a timeout has expired."""
863 if endtime is None:
864 return
Victor Stinner949d8c92012-05-30 13:30:32 +0200865 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -0400866 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400867
868
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700869 if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000870 #
871 # Windows methods
872 #
873 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +0000874 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000875 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
876 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000877 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000878 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +0000879
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000880 p2cread, p2cwrite = -1, -1
881 c2pread, c2pwrite = -1, -1
882 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000883
Peter Astrandd38ddf42005-02-10 08:32:50 +0000884 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200885 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000886 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200887 p2cread, _ = _winapi.CreatePipe(None, 0)
888 p2cread = Handle(p2cread)
889 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000890 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200891 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
892 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200893 elif stdin == DEVNULL:
894 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000895 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000896 p2cread = msvcrt.get_osfhandle(stdin)
897 else:
898 # Assuming file-like object
899 p2cread = msvcrt.get_osfhandle(stdin.fileno())
900 p2cread = self._make_inheritable(p2cread)
901
Peter Astrandd38ddf42005-02-10 08:32:50 +0000902 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200903 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000904 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200905 _, c2pwrite = _winapi.CreatePipe(None, 0)
906 c2pwrite = Handle(c2pwrite)
907 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000908 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200909 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
910 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200911 elif stdout == DEVNULL:
912 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000913 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000914 c2pwrite = msvcrt.get_osfhandle(stdout)
915 else:
916 # Assuming file-like object
917 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
918 c2pwrite = self._make_inheritable(c2pwrite)
919
Peter Astrandd38ddf42005-02-10 08:32:50 +0000920 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200921 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000922 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200923 _, errwrite = _winapi.CreatePipe(None, 0)
924 errwrite = Handle(errwrite)
925 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000926 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200927 errread, errwrite = _winapi.CreatePipe(None, 0)
928 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000929 elif stderr == STDOUT:
930 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200931 elif stderr == DEVNULL:
932 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000933 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000934 errwrite = msvcrt.get_osfhandle(stderr)
935 else:
936 # Assuming file-like object
937 errwrite = msvcrt.get_osfhandle(stderr.fileno())
938 errwrite = self._make_inheritable(errwrite)
939
940 return (p2cread, p2cwrite,
941 c2pread, c2pwrite,
942 errread, errwrite)
943
944
945 def _make_inheritable(self, handle):
946 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200947 h = _winapi.DuplicateHandle(
948 _winapi.GetCurrentProcess(), handle,
949 _winapi.GetCurrentProcess(), 0, 1,
950 _winapi.DUPLICATE_SAME_ACCESS)
951 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000952
953
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000954 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300955 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000956 startupinfo, creationflags, shell,
957 p2cread, p2cwrite,
958 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000959 errread, errwrite,
960 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000961 """Execute program (MS Windows version)"""
962
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000963 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000964
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000965 if not isinstance(args, str):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000966 args = list2cmdline(args)
967
Peter Astrandc1d65362004-11-07 14:30:34 +0000968 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +0000969 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000970 startupinfo = STARTUPINFO()
Victor Stinnerb3693582010-05-21 20:13:12 +0000971 if -1 not in (p2cread, c2pwrite, errwrite):
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200972 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +0000973 startupinfo.hStdInput = p2cread
974 startupinfo.hStdOutput = c2pwrite
975 startupinfo.hStdError = errwrite
976
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000977 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200978 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
979 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000980 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +0000981 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000982
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000983 # Start the process
984 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200985 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +0000986 # no special security
987 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +0000988 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +0000989 creationflags,
990 env,
Benjamin Petersoncb90f262017-03-02 00:03:41 -0800991 os.fspath(cwd) if cwd is not None else None,
Tim Peterse8374a52004-10-13 03:15:00 +0000992 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +0000993 finally:
994 # Child is launched. Close the parent's copy of those pipe
995 # handles that only the child should have open. You need
996 # to make sure that no handles to the write end of the
997 # output pipe are maintained in this process or else the
998 # pipe will not close when the child process exits and the
999 # ReadFile will hang.
1000 if p2cread != -1:
1001 p2cread.Close()
1002 if c2pwrite != -1:
1003 c2pwrite.Close()
1004 if errwrite != -1:
1005 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001006 if hasattr(self, '_devnull'):
1007 os.close(self._devnull)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001008
1009 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001010 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001011 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001012 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001013 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001014
Brett Cannon84df1e62010-05-14 00:33:40 +00001015 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001016 _WaitForSingleObject=_winapi.WaitForSingleObject,
1017 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1018 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001019 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001020 attribute.
1021
1022 This method is called by __del__, so it can only refer to objects
1023 in its local scope.
1024
1025 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001026 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001027 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1028 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001029 return self.returncode
1030
1031
Gregory P. Smith82604e02016-11-20 16:31:07 -08001032 def wait(self, timeout=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001033 """Wait for child process to terminate. Returns returncode
1034 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001035 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001036 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001037 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001038 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001039 if self.returncode is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001040 result = _winapi.WaitForSingleObject(self._handle,
1041 timeout_millis)
1042 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001043 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001044 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001045 return self.returncode
1046
1047
1048 def _readerthread(self, fh, buffer):
1049 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001050 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001051
1052
Reid Kleckner2b228f02011-03-16 16:57:54 -04001053 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001054 # Start reader threads feeding into a list hanging off of this
1055 # object, unless they've already been started.
1056 if self.stdout and not hasattr(self, "_stdout_buff"):
1057 self._stdout_buff = []
1058 self.stdout_thread = \
1059 threading.Thread(target=self._readerthread,
1060 args=(self.stdout, self._stdout_buff))
1061 self.stdout_thread.daemon = True
1062 self.stdout_thread.start()
1063 if self.stderr and not hasattr(self, "_stderr_buff"):
1064 self._stderr_buff = []
1065 self.stderr_thread = \
1066 threading.Thread(target=self._readerthread,
1067 args=(self.stderr, self._stderr_buff))
1068 self.stderr_thread.daemon = True
1069 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001070
1071 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001072 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001073
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001074 # Wait for the reader threads, or time out. If we time out, the
1075 # threads remain reading and the fds left open in case the user
1076 # calls communicate again.
1077 if self.stdout is not None:
1078 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001079 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001080 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001081 if self.stderr is not None:
1082 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001083 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001084 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001085
1086 # Collect the output from and close both pipes, now that we know
1087 # both have been read successfully.
1088 stdout = None
1089 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001090 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001091 stdout = self._stdout_buff
1092 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001093 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001094 stderr = self._stderr_buff
1095 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001096
1097 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001098 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001099 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001100 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001101 stderr = stderr[0]
1102
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001103 return (stdout, stderr)
1104
Christian Heimesa342c012008-04-20 21:01:16 +00001105 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001106 """Send a signal to the process."""
1107 # Don't signal a process that we know has already died.
1108 if self.returncode is not None:
1109 return
Christian Heimesa342c012008-04-20 21:01:16 +00001110 if sig == signal.SIGTERM:
1111 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001112 elif sig == signal.CTRL_C_EVENT:
1113 os.kill(self.pid, signal.CTRL_C_EVENT)
1114 elif sig == signal.CTRL_BREAK_EVENT:
1115 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001116 else:
Brian Curtin19651362010-09-07 13:24:38 +00001117 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001118
1119 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001120 """Terminates the process."""
1121 # Don't terminate a process that we know has already died.
1122 if self.returncode is not None:
1123 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001124 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001125 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001126 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001127 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1128 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001129 rc = _winapi.GetExitCodeProcess(self._handle)
1130 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001131 raise
1132 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001133
1134 kill = terminate
1135
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001136 else:
1137 #
1138 # POSIX methods
1139 #
1140 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001141 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001142 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1143 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001144 p2cread, p2cwrite = -1, -1
1145 c2pread, c2pwrite = -1, -1
1146 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001147
Peter Astrandd38ddf42005-02-10 08:32:50 +00001148 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001149 pass
1150 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001151 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001152 elif stdin == DEVNULL:
1153 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001154 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001155 p2cread = stdin
1156 else:
1157 # Assuming file-like object
1158 p2cread = stdin.fileno()
1159
Peter Astrandd38ddf42005-02-10 08:32:50 +00001160 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001161 pass
1162 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001163 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001164 elif stdout == DEVNULL:
1165 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001166 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001167 c2pwrite = stdout
1168 else:
1169 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001170 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001171
Peter Astrandd38ddf42005-02-10 08:32:50 +00001172 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001173 pass
1174 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001175 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001176 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001177 if c2pwrite != -1:
1178 errwrite = c2pwrite
1179 else: # child's stdout is not set, use parent's stdout
1180 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001181 elif stderr == DEVNULL:
1182 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001183 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001184 errwrite = stderr
1185 else:
1186 # Assuming file-like object
1187 errwrite = stderr.fileno()
1188
1189 return (p2cread, p2cwrite,
1190 c2pread, c2pwrite,
1191 errread, errwrite)
1192
1193
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001194 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001195 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001196 startupinfo, creationflags, shell,
1197 p2cread, p2cwrite,
1198 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001199 errread, errwrite,
1200 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001201 """Execute program (POSIX version)"""
1202
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001203 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001204 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001205 else:
1206 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001207
1208 if shell:
Xavier de Gayeb35fc622016-12-13 16:32:21 +01001209 # On Android the default shell is at '/system/bin/sh'.
1210 unix_shell = ('/system/bin/sh' if
1211 hasattr(sys, 'getandroidapilevel') else '/bin/sh')
1212 args = [unix_shell, "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001213 if executable:
1214 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001215
Peter Astrandd38ddf42005-02-10 08:32:50 +00001216 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001217 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001218 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001219
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001220 # For transferring possible exec failure from child to parent.
1221 # Data format: "exception name:hex errno:description"
1222 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001223 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001224 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1225 low_fds_to_close = []
1226 while errpipe_write < 3:
1227 low_fds_to_close.append(errpipe_write)
1228 errpipe_write = os.dup(errpipe_write)
1229 for low_fd in low_fds_to_close:
1230 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001231 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001232 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001233 # We must avoid complex work that could involve
1234 # malloc or free in the child process to avoid
1235 # potential deadlocks, thus we do all this here.
1236 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001237
Victor Stinner372b8382011-06-21 17:24:21 +02001238 if env is not None:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001239 env_list = [os.fsencode(k) + b'=' + os.fsencode(v)
1240 for k, v in env.items()]
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001241 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001242 env_list = None # Use execv instead of execve.
1243 executable = os.fsencode(executable)
1244 if os.path.dirname(executable):
1245 executable_list = (executable,)
1246 else:
1247 # This matches the behavior of os._execvpe().
1248 executable_list = tuple(
1249 os.path.join(os.fsencode(dir), executable)
1250 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001251 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001252 fds_to_keep.add(errpipe_write)
1253 self.pid = _posixsubprocess.fork_exec(
1254 args, executable_list,
Serhiy Storchaka66bffd12017-04-19 21:12:46 +03001255 close_fds, tuple(sorted(map(int, fds_to_keep))),
1256 cwd, env_list,
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001257 p2cread, p2cwrite, c2pread, c2pwrite,
1258 errread, errwrite,
1259 errpipe_read, errpipe_write,
1260 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001261 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001262 finally:
1263 # be sure the FD is closed no matter what
1264 os.close(errpipe_write)
1265
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001266 # self._devnull is not always defined.
1267 devnull_fd = getattr(self, '_devnull', None)
1268 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001269 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001270 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001271 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001272 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001273 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001274 if devnull_fd is not None:
1275 os.close(devnull_fd)
1276 # Prevent a double close of these fds from __init__ on error.
1277 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001278
1279 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001280 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001281 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001282 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001283 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001284 errpipe_data += part
1285 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001286 break
Facundo Batista10706e22009-06-19 20:34:30 +00001287 finally:
1288 # be sure the FD is closed no matter what
1289 os.close(errpipe_read)
1290
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001291 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001292 try:
Victor Stinnera58e2c52016-05-20 12:08:12 +02001293 pid, sts = os.waitpid(self.pid, 0)
1294 if pid == self.pid:
1295 self._handle_exitstatus(sts)
1296 else:
1297 self.returncode = sys.maxsize
Victor Stinnera5e881d2015-01-14 17:07:59 +01001298 except ChildProcessError:
1299 pass
Victor Stinnera58e2c52016-05-20 12:08:12 +02001300
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001301 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001302 exception_name, hex_errno, err_msg = (
1303 errpipe_data.split(b':', 2))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001304 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001305 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001306 hex_errno = b'0'
Gregory P. Smith3aee2222012-11-11 00:04:13 -08001307 err_msg = (b'Bad exception data from child: ' +
1308 repr(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001309 child_exception_type = getattr(
1310 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001311 SubprocessError)
Victor Stinner4d078042010-04-23 19:28:32 +00001312 err_msg = err_msg.decode(errors="surrogatepass")
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001313 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001314 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001315 child_exec_never_called = (err_msg == "noexec")
1316 if child_exec_never_called:
1317 err_msg = ""
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001318 if errno_num != 0:
1319 err_msg = os.strerror(errno_num)
1320 if errno_num == errno.ENOENT:
Gregory P. Smith5591b022012-10-10 03:34:47 -07001321 if child_exec_never_called:
1322 # The error must be from chdir(cwd).
1323 err_msg += ': ' + repr(cwd)
1324 else:
1325 err_msg += ': ' + repr(orig_executable)
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001326 raise child_exception_type(errno_num, err_msg)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001327 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001328
1329
Brett Cannon84df1e62010-05-14 00:33:40 +00001330 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1331 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001332 _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
1333 _WSTOPSIG=os.WSTOPSIG):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001334 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001335 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001336 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001337 if _WIFSIGNALED(sts):
1338 self.returncode = -_WTERMSIG(sts)
1339 elif _WIFEXITED(sts):
1340 self.returncode = _WEXITSTATUS(sts)
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001341 elif _WIFSTOPPED(sts):
1342 self.returncode = -_WSTOPSIG(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001343 else:
1344 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001345 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001346
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001347
Brett Cannon84df1e62010-05-14 00:33:40 +00001348 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001349 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001350 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001351 attribute.
1352
1353 This method is called by __del__, so it cannot reference anything
1354 outside of the local scope (nor can any methods it calls).
1355
1356 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001357 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001358 if not self._waitpid_lock.acquire(False):
1359 # Something else is busy calling waitpid. Don't allow two
1360 # at once. We know nothing yet.
1361 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001362 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001363 if self.returncode is not None:
1364 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001365 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001366 if pid == self.pid:
1367 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001368 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001369 if _deadstate is not None:
1370 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001371 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001372 # This happens if SIGCLD is set to be ignored or
1373 # waiting for child processes has otherwise been
1374 # disabled for our process. This child is dead, we
1375 # can't get the status.
1376 # http://bugs.python.org/issue15756
1377 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001378 finally:
1379 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001380 return self.returncode
1381
1382
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001383 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001384 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001385 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001386 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001387 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001388 # This happens if SIGCLD is set to be ignored or waiting
1389 # for child processes has otherwise been disabled for our
1390 # process. This child is dead, we can't get the status.
1391 pid = self.pid
1392 sts = 0
1393 return (pid, sts)
1394
1395
Gregory P. Smith82604e02016-11-20 16:31:07 -08001396 def wait(self, timeout=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001397 """Wait for child process to terminate. Returns returncode
1398 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001399 if self.returncode is not None:
1400 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001401
Gregory P. Smith82604e02016-11-20 16:31:07 -08001402 if timeout is not None:
1403 endtime = _time() + timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001404 # Enter a busy loop if we have a timeout. This busy loop was
1405 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1406 delay = 0.0005 # 500 us -> initial delay of 1 ms
1407 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001408 if self._waitpid_lock.acquire(False):
1409 try:
1410 if self.returncode is not None:
1411 break # Another thread waited.
1412 (pid, sts) = self._try_wait(os.WNOHANG)
1413 assert pid == self.pid or pid == 0
1414 if pid == self.pid:
1415 self._handle_exitstatus(sts)
1416 break
1417 finally:
1418 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001419 remaining = self._remaining_time(endtime)
1420 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001421 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001422 delay = min(delay * 2, remaining, .05)
1423 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001424 else:
1425 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001426 with self._waitpid_lock:
1427 if self.returncode is not None:
1428 break # Another thread waited.
1429 (pid, sts) = self._try_wait(0)
1430 # Check the pid and loop as waitpid has been known to
1431 # return 0 even without WNOHANG in odd situations.
1432 # http://bugs.python.org/issue14396.
1433 if pid == self.pid:
1434 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001435 return self.returncode
1436
1437
Reid Kleckner2b228f02011-03-16 16:57:54 -04001438 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001439 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001440 # Flush stdio buffer. This might block, if the user has
1441 # been writing to .stdin in an uncontrolled fashion.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001442 try:
1443 self.stdin.flush()
1444 except BrokenPipeError:
1445 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001446 if not input:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001447 try:
1448 self.stdin.close()
1449 except BrokenPipeError:
1450 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001451
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001452 stdout = None
1453 stderr = None
1454
1455 # Only create this mapping if we haven't already.
1456 if not self._communication_started:
1457 self._fileobj2output = {}
1458 if self.stdout:
1459 self._fileobj2output[self.stdout] = []
1460 if self.stderr:
1461 self._fileobj2output[self.stderr] = []
1462
1463 if self.stdout:
1464 stdout = self._fileobj2output[self.stdout]
1465 if self.stderr:
1466 stderr = self._fileobj2output[self.stderr]
1467
1468 self._save_input(input)
1469
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001470 if self._input:
1471 input_view = memoryview(self._input)
1472
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001473 with _PopenSelector() as selector:
1474 if self.stdin and input:
1475 selector.register(self.stdin, selectors.EVENT_WRITE)
1476 if self.stdout:
1477 selector.register(self.stdout, selectors.EVENT_READ)
1478 if self.stderr:
1479 selector.register(self.stderr, selectors.EVENT_READ)
1480
1481 while selector.get_map():
1482 timeout = self._remaining_time(endtime)
1483 if timeout is not None and timeout < 0:
1484 raise TimeoutExpired(self.args, orig_timeout)
1485
1486 ready = selector.select(timeout)
1487 self._check_timeout(endtime, orig_timeout)
1488
1489 # XXX Rewrite these to use non-blocking I/O on the file
1490 # objects; they are no longer using C stdio!
1491
1492 for key, events in ready:
1493 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001494 chunk = input_view[self._input_offset :
1495 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001496 try:
1497 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001498 except BrokenPipeError:
1499 selector.unregister(key.fileobj)
1500 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001501 else:
1502 if self._input_offset >= len(self._input):
1503 selector.unregister(key.fileobj)
1504 key.fileobj.close()
1505 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001506 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001507 if not data:
1508 selector.unregister(key.fileobj)
1509 key.fileobj.close()
1510 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001511
1512 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001513
1514 # All data exchanged. Translate lists into strings.
1515 if stdout is not None:
1516 stdout = b''.join(stdout)
1517 if stderr is not None:
1518 stderr = b''.join(stderr)
1519
1520 # Translate newlines, if requested.
1521 # This also turns bytes into strings.
Steve Dower050acae2016-09-06 20:16:17 -07001522 if self.encoding or self.errors or self.universal_newlines:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001523 if stdout is not None:
1524 stdout = self._translate_newlines(stdout,
Steve Dower050acae2016-09-06 20:16:17 -07001525 self.stdout.encoding,
1526 self.stdout.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001527 if stderr is not None:
1528 stderr = self._translate_newlines(stderr,
Steve Dower050acae2016-09-06 20:16:17 -07001529 self.stderr.encoding,
1530 self.stderr.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001531
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001532 return (stdout, stderr)
1533
1534
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001535 def _save_input(self, input):
1536 # This method is called from the _communicate_with_*() methods
1537 # so that if we time out while communicating, we can continue
1538 # sending input if we retry.
1539 if self.stdin and self._input is None:
1540 self._input_offset = 0
1541 self._input = input
Steve Dower050acae2016-09-06 20:16:17 -07001542 if input is not None and (
1543 self.encoding or self.errors or self.universal_newlines):
1544 self._input = self._input.encode(self.stdin.encoding,
1545 self.stdin.errors)
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001546
1547
Christian Heimesa342c012008-04-20 21:01:16 +00001548 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001549 """Send a signal to the process."""
1550 # Skip signalling a process that we know has already died.
1551 if self.returncode is None:
1552 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00001553
1554 def terminate(self):
1555 """Terminate the process with SIGTERM
1556 """
1557 self.send_signal(signal.SIGTERM)
1558
1559 def kill(self):
1560 """Kill the process with SIGKILL
1561 """
1562 self.send_signal(signal.SIGKILL)