blob: e626a8afdbb7f07288818416f701d935ef17e5d7 [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:
130 dwFlags = 0
131 hStdInput = None
132 hStdOutput = None
133 hStdError = None
134 wShowWindow = 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000135else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -0700136 import _posixsubprocess
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100137 import select
138 import selectors
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700139 try:
140 import threading
141 except ImportError:
142 import dummy_threading as threading
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000143
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000144 # When select or poll has indicated that the file is writable,
145 # we can write up to _PIPE_BUF bytes without risk of blocking.
146 # POSIX defines PIPE_BUF as >= 512.
147 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
148
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100149 # poll/select have the advantage of not requiring any extra file
150 # descriptor, contrarily to epoll/kqueue (also, they require a single
151 # syscall).
152 if hasattr(selectors, 'PollSelector'):
153 _PopenSelector = selectors.PollSelector
154 else:
155 _PopenSelector = selectors.SelectSelector
156
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000157
Brett Cannona23810f2008-05-26 19:04:21 +0000158__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
Gregory P. Smith6e730002015-04-14 16:14:25 -0700159 "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL",
160 "SubprocessError", "TimeoutExpired", "CompletedProcess"]
Gregory P. Smithace55862015-04-07 15:57:54 -0700161 # NOTE: We intentionally exclude list2cmdline as it is
162 # considered an internal implementation detail. issue10838.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000163
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700164if _mswindows:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200165 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
166 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
167 STD_ERROR_HANDLE, SW_HIDE,
168 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW)
Brian Curtin5d9deaa2011-04-29 16:24:07 -0500169
Brian Curtin08fd8d92011-04-29 16:11:30 -0500170 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
Brian Curtin8b8e7f42011-04-29 15:48:13 -0500171 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
172 "STD_ERROR_HANDLE", "SW_HIDE",
Martin Panter528619b2016-04-16 23:42:37 +0000173 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW",
174 "STARTUPINFO"])
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200175
176 class Handle(int):
177 closed = False
178
179 def Close(self, CloseHandle=_winapi.CloseHandle):
180 if not self.closed:
181 self.closed = True
182 CloseHandle(self)
183
184 def Detach(self):
185 if not self.closed:
186 self.closed = True
187 return int(self)
188 raise ValueError("already closed")
189
190 def __repr__(self):
Serhiy Storchaka465e60e2014-07-25 23:36:00 +0300191 return "%s(%d)" % (self.__class__.__name__, int(self))
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200192
193 __del__ = Close
194 __str__ = __repr__
195
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000196
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200197# This lists holds Popen instances for which the underlying process had not
198# exited at the time its __del__ method got called: those processes are wait()ed
199# for synchronously from _cleanup() when a new Popen object is created, to avoid
200# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000201_active = []
202
203def _cleanup():
204 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000205 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200206 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000207 try:
208 _active.remove(inst)
209 except ValueError:
210 # This can happen if two threads create a new Popen instance.
211 # It's harmless that it was already removed, so ignore.
212 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000213
214PIPE = -1
215STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200216DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000217
218
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200219# XXX This function is only used by multiprocessing and the test suite,
220# but it's here so that it can be imported when Python is compiled without
221# threads.
222
Victor Stinner9def2842016-01-18 12:15:08 +0100223def _optim_args_from_interpreter_flags():
224 """Return a list of command-line arguments reproducing the current
225 optimization settings in sys.flags."""
226 args = []
227 value = sys.flags.optimize
228 if value > 0:
229 args.append('-' + 'O' * value)
230 return args
231
232
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200233def _args_from_interpreter_flags():
234 """Return a list of command-line arguments reproducing the current
235 settings in sys.flags and sys.warnoptions."""
236 flag_opt_map = {
237 'debug': 'd',
238 # 'inspect': 'i',
239 # 'interactive': 'i',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200240 'dont_write_bytecode': 'B',
241 'no_user_site': 's',
242 'no_site': 'S',
243 'ignore_environment': 'E',
244 'verbose': 'v',
245 'bytes_warning': 'b',
246 'quiet': 'q',
Victor Stinner9def2842016-01-18 12:15:08 +0100247 # -O is handled in _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200248 }
Victor Stinner9def2842016-01-18 12:15:08 +0100249 args = _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200250 for flag, opt in flag_opt_map.items():
251 v = getattr(sys.flags, flag)
252 if v > 0:
253 args.append('-' + opt * v)
254 for opt in sys.warnoptions:
255 args.append('-W' + opt)
256 return args
257
258
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400259def call(*popenargs, timeout=None, **kwargs):
260 """Run command with arguments. Wait for command to complete or
261 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000262
263 The arguments are the same as for the Popen constructor. Example:
264
265 retcode = call(["ls", "-l"])
266 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200267 with Popen(*popenargs, **kwargs) as p:
268 try:
269 return p.wait(timeout=timeout)
270 except:
271 p.kill()
272 p.wait()
273 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000274
275
Peter Astrand454f7672005-01-01 09:36:35 +0000276def check_call(*popenargs, **kwargs):
277 """Run command with arguments. Wait for command to complete. If
278 the exit code was zero then return, otherwise raise
279 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000280 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000281
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400282 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000283
284 check_call(["ls", "-l"])
285 """
286 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000287 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000288 cmd = kwargs.get("args")
289 if cmd is None:
290 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000291 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000292 return 0
293
294
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400295def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700296 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000297
298 If the exit code was non-zero it raises a CalledProcessError. The
299 CalledProcessError object will have the return code in the returncode
300 attribute and output in the output attribute.
301
302 The arguments are the same as for the Popen constructor. Example:
303
304 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000305 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000306
307 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000308 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000309
310 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000311 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000312 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000313 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700314
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300315 There is an additional optional argument, "input", allowing you to
316 pass a string to the subprocess's stdin. If you use this argument
317 you may not also use the Popen constructor's "stdin" argument, as
318 it too will be used internally. Example:
319
320 >>> check_output(["sed", "-e", "s/foo/bar/"],
321 ... input=b"when in the course of fooman events\n")
322 b'when in the course of barman events\n'
323
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400324 If universal_newlines=True is passed, the "input" argument must be a
325 string and the return value will be a string rather than bytes.
Georg Brandlf9734072008-12-07 15:30:06 +0000326 """
327 if 'stdout' in kwargs:
328 raise ValueError('stdout argument not allowed, it will be overridden.')
Gregory P. Smith6e730002015-04-14 16:14:25 -0700329
330 if 'input' in kwargs and kwargs['input'] is None:
331 # Explicitly passing input=None was previously equivalent to passing an
332 # empty string. That is maintained here for backwards compatibility.
333 kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
334
335 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
336 **kwargs).stdout
337
338
339class CompletedProcess(object):
340 """A process that has finished running.
341
342 This is returned by run().
343
344 Attributes:
345 args: The list or str args passed to run().
346 returncode: The exit code of the process, negative for signals.
347 stdout: The standard output (None if not captured).
348 stderr: The standard error (None if not captured).
349 """
350 def __init__(self, args, returncode, stdout=None, stderr=None):
351 self.args = args
352 self.returncode = returncode
353 self.stdout = stdout
354 self.stderr = stderr
355
356 def __repr__(self):
357 args = ['args={!r}'.format(self.args),
358 'returncode={!r}'.format(self.returncode)]
359 if self.stdout is not None:
360 args.append('stdout={!r}'.format(self.stdout))
361 if self.stderr is not None:
362 args.append('stderr={!r}'.format(self.stderr))
363 return "{}({})".format(type(self).__name__, ', '.join(args))
364
365 def check_returncode(self):
366 """Raise CalledProcessError if the exit code is non-zero."""
367 if self.returncode:
368 raise CalledProcessError(self.returncode, self.args, self.stdout,
369 self.stderr)
370
371
372def run(*popenargs, input=None, timeout=None, check=False, **kwargs):
373 """Run command with arguments and return a CompletedProcess instance.
374
375 The returned instance will have attributes args, returncode, stdout and
376 stderr. By default, stdout and stderr are not captured, and those attributes
377 will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.
378
379 If check is True and the exit code was non-zero, it raises a
380 CalledProcessError. The CalledProcessError object will have the return code
381 in the returncode attribute, and output & stderr attributes if those streams
382 were captured.
383
384 If timeout is given, and the process takes too long, a TimeoutExpired
385 exception will be raised.
386
387 There is an optional argument "input", allowing you to
388 pass a string to the subprocess's stdin. If you use this argument
389 you may not also use the Popen constructor's "stdin" argument, as
390 it will be used internally.
391
392 The other arguments are the same as for the Popen constructor.
393
394 If universal_newlines=True is passed, the "input" argument must be a
395 string and stdout/stderr in the returned object will be strings rather than
396 bytes.
397 """
398 if input is not None:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300399 if 'stdin' in kwargs:
400 raise ValueError('stdin and input arguments may not both be used.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300401 kwargs['stdin'] = PIPE
Gregory P. Smith6e730002015-04-14 16:14:25 -0700402
403 with Popen(*popenargs, **kwargs) as process:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200404 try:
Gregory P. Smith6e730002015-04-14 16:14:25 -0700405 stdout, stderr = process.communicate(input, timeout=timeout)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200406 except TimeoutExpired:
407 process.kill()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700408 stdout, stderr = process.communicate()
409 raise TimeoutExpired(process.args, timeout, output=stdout,
410 stderr=stderr)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200411 except:
412 process.kill()
413 process.wait()
414 raise
415 retcode = process.poll()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700416 if check and retcode:
417 raise CalledProcessError(retcode, process.args,
418 output=stdout, stderr=stderr)
419 return CompletedProcess(process.args, retcode, stdout, stderr)
Peter Astrand454f7672005-01-01 09:36:35 +0000420
421
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000422def list2cmdline(seq):
423 """
424 Translate a sequence of arguments into a command line
425 string, using the same rules as the MS C runtime:
426
427 1) Arguments are delimited by white space, which is either a
428 space or a tab.
429
430 2) A string surrounded by double quotation marks is
431 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000432 contained within. A quoted string can be embedded in an
433 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000434
435 3) A double quotation mark preceded by a backslash is
436 interpreted as a literal double quotation mark.
437
438 4) Backslashes are interpreted literally, unless they
439 immediately precede a double quotation mark.
440
441 5) If backslashes immediately precede a double quotation mark,
442 every pair of backslashes is interpreted as a literal
443 backslash. If the number of backslashes is odd, the last
444 backslash escapes the next double quotation mark as
445 described in rule 3.
446 """
447
448 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000449 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
450 # or search http://msdn.microsoft.com for
451 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000452 result = []
453 needquote = False
454 for arg in seq:
455 bs_buf = []
456
457 # Add a space to separate this argument from the others
458 if result:
459 result.append(' ')
460
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000461 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000462 if needquote:
463 result.append('"')
464
465 for c in arg:
466 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000467 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000468 bs_buf.append(c)
469 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000470 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000471 result.append('\\' * len(bs_buf)*2)
472 bs_buf = []
473 result.append('\\"')
474 else:
475 # Normal char
476 if bs_buf:
477 result.extend(bs_buf)
478 bs_buf = []
479 result.append(c)
480
Christian Heimesfdab48e2008-01-20 09:06:41 +0000481 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000482 if bs_buf:
483 result.extend(bs_buf)
484
485 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000486 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000487 result.append('"')
488
489 return ''.join(result)
490
491
Brett Cannona23810f2008-05-26 19:04:21 +0000492# Various tools for executing commands and looking at their output and status.
493#
Brett Cannona23810f2008-05-26 19:04:21 +0000494
495def getstatusoutput(cmd):
Tim Golden60798142013-11-05 12:57:25 +0000496 """ Return (status, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000497
Tim Golden60798142013-11-05 12:57:25 +0000498 Execute the string 'cmd' in a shell with 'check_output' and
Steve Dower050acae2016-09-06 20:16:17 -0700499 return a 2-tuple (status, output). The locale encoding is used
500 to decode the output and process newlines.
Tim Golden60798142013-11-05 12:57:25 +0000501
502 A trailing newline is stripped from the output.
503 The exit status for the command can be interpreted
504 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000505
506 >>> import subprocess
507 >>> subprocess.getstatusoutput('ls /bin/ls')
508 (0, '/bin/ls')
509 >>> subprocess.getstatusoutput('cat /bin/junk')
510 (256, 'cat: /bin/junk: No such file or directory')
511 >>> subprocess.getstatusoutput('/bin/junk')
512 (256, 'sh: /bin/junk: not found')
513 """
Tim Goldene0041752013-11-03 12:53:17 +0000514 try:
515 data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT)
516 status = 0
517 except CalledProcessError as ex:
518 data = ex.output
519 status = ex.returncode
520 if data[-1:] == '\n':
521 data = data[:-1]
522 return status, data
Brett Cannona23810f2008-05-26 19:04:21 +0000523
524def getoutput(cmd):
525 """Return output (stdout or stderr) of executing cmd in a shell.
526
527 Like getstatusoutput(), except the exit status is ignored and the return
528 value is a string containing the command's output. Example:
529
530 >>> import subprocess
531 >>> subprocess.getoutput('ls /bin/ls')
532 '/bin/ls'
533 """
534 return getstatusoutput(cmd)[1]
535
536
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000537_PLATFORM_DEFAULT_CLOSE_FDS = object()
Gregory P. Smithf5604852010-12-13 06:45:02 +0000538
539
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000540class Popen(object):
Martin Panter4afdca02016-10-25 22:20:48 +0000541 """ Execute a child program in a new process.
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200542
Martin Panter4afdca02016-10-25 22:20:48 +0000543 For a complete description of the arguments see the Python documentation.
544
545 Arguments:
546 args: A string, or a sequence of program arguments.
547
548 bufsize: supplied as the buffering argument to the open() function when
549 creating the stdin/stdout/stderr pipe file objects
550
551 executable: A replacement program to execute.
552
553 stdin, stdout and stderr: These specify the executed programs' standard
554 input, standard output and standard error file handles, respectively.
555
556 preexec_fn: (POSIX only) An object to be called in the child process
557 just before the child is executed.
558
559 close_fds: Controls closing or inheriting of file descriptors.
560
561 shell: If true, the command will be executed through the shell.
562
563 cwd: Sets the current directory before the child is executed.
564
565 env: Defines the environment variables for the new process.
566
567 universal_newlines: If true, use universal line endings for file
568 objects stdin, stdout and stderr.
569
570 startupinfo and creationflags (Windows only)
571
572 restore_signals (POSIX only)
573
574 start_new_session (POSIX only)
575
576 pass_fds (POSIX only)
577
Martin Panter3dca6242016-10-25 23:41:42 +0000578 encoding and errors: Text mode encoding and error handling to use for
579 file objects stdin, stdout and stderr.
580
Martin Panter4afdca02016-10-25 22:20:48 +0000581 Attributes:
582 stdin, stdout, stderr, pid, returncode
583 """
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200584 _child_created = False # Set here since __del__ checks it
585
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700586 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000587 stdin=None, stdout=None, stderr=None,
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000588 preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,
589 shell=False, cwd=None, env=None, universal_newlines=False,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000590 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000591 restore_signals=True, start_new_session=False,
Steve Dower050acae2016-09-06 20:16:17 -0700592 pass_fds=(), *, encoding=None, errors=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000593 """Create new Popen instance."""
594 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700595 # Held while anything is calling waitpid before returncode has been
596 # updated to prevent clobbering returncode if wait() or poll() are
597 # called from multiple threads at once. After acquiring the lock,
598 # code must re-check self.returncode to see if another thread just
599 # finished a waitpid() call.
600 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000601
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400602 self._input = None
603 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000604 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700605 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000606 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000607 raise TypeError("bufsize must be an integer")
608
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700609 if _mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000610 if preexec_fn is not None:
611 raise ValueError("preexec_fn is not supported on Windows "
612 "platforms")
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000613 any_stdio_set = (stdin is not None or stdout is not None or
614 stderr is not None)
615 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
616 if any_stdio_set:
617 close_fds = False
618 else:
619 close_fds = True
620 elif close_fds and any_stdio_set:
621 raise ValueError(
622 "close_fds is not supported on Windows platforms"
623 " if you redirect stdin/stdout/stderr")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000624 else:
625 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000626 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
627 close_fds = True
628 if pass_fds and not close_fds:
629 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
630 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000631 if startupinfo is not None:
632 raise ValueError("startupinfo is only supported on Windows "
633 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000634 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000635 raise ValueError("creationflags is only supported on Windows "
636 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000637
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400638 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000639 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000640 self.stdout = None
641 self.stderr = None
642 self.pid = None
643 self.returncode = None
644 self.universal_newlines = universal_newlines
Steve Dower050acae2016-09-06 20:16:17 -0700645 self.encoding = encoding
646 self.errors = errors
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000647
648 # Input and output objects. The general principle is like
649 # this:
650 #
651 # Parent Child
652 # ------ -----
653 # p2cwrite ---stdin---> p2cread
654 # c2pread <--stdout--- c2pwrite
655 # errread <--stderr--- errwrite
656 #
657 # On POSIX, the child objects are file descriptors. On
658 # Windows, these are Windows file handles. The parent objects
659 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000660 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000661 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000662
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000663 (p2cread, p2cwrite,
664 c2pread, c2pwrite,
665 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
666
Antoine Pitrouc9982322011-01-04 19:07:07 +0000667 # We wrap OS handles *before* launching the child, otherwise a
668 # quickly terminating child could make our fds unwrappable
669 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000670
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700671 if _mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000672 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000673 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000674 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000675 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000676 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000677 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000678
Steve Dower050acae2016-09-06 20:16:17 -0700679 text_mode = encoding or errors or universal_newlines
Tim Peterse718f612004-10-12 21:51:32 +0000680
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700681 self._closed_child_pipe_fds = False
Steve Dower050acae2016-09-06 20:16:17 -0700682
Antoine Pitrouc9982322011-01-04 19:07:07 +0000683 try:
Steve Dower050acae2016-09-06 20:16:17 -0700684 if p2cwrite != -1:
685 self.stdin = io.open(p2cwrite, 'wb', bufsize)
686 if text_mode:
687 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
688 line_buffering=(bufsize == 1),
689 encoding=encoding, errors=errors)
690 if c2pread != -1:
691 self.stdout = io.open(c2pread, 'rb', bufsize)
692 if text_mode:
693 self.stdout = io.TextIOWrapper(self.stdout,
694 encoding=encoding, errors=errors)
695 if errread != -1:
696 self.stderr = io.open(errread, 'rb', bufsize)
697 if text_mode:
698 self.stderr = io.TextIOWrapper(self.stderr,
699 encoding=encoding, errors=errors)
700
Antoine Pitrouc9982322011-01-04 19:07:07 +0000701 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300702 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000703 startupinfo, creationflags, shell,
704 p2cread, p2cwrite,
705 c2pread, c2pwrite,
706 errread, errwrite,
707 restore_signals, start_new_session)
708 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800709 # Cleanup if the child failed starting.
710 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000711 try:
712 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200713 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800714 pass # Ignore EBADF or other errors.
715
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700716 if not self._closed_child_pipe_fds:
717 to_close = []
718 if stdin == PIPE:
719 to_close.append(p2cread)
720 if stdout == PIPE:
721 to_close.append(c2pwrite)
722 if stderr == PIPE:
723 to_close.append(errwrite)
724 if hasattr(self, '_devnull'):
725 to_close.append(self._devnull)
726 for fd in to_close:
727 try:
728 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700729 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700730 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800731
Antoine Pitrouc9982322011-01-04 19:07:07 +0000732 raise
733
Steve Dower050acae2016-09-06 20:16:17 -0700734 def _translate_newlines(self, data, encoding, errors):
735 data = data.decode(encoding, errors)
Andrew Svetlov82860712012-08-19 22:13:41 +0300736 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000737
Brian Curtin79cdb662010-12-03 02:46:02 +0000738 def __enter__(self):
739 return self
740
741 def __exit__(self, type, value, traceback):
742 if self.stdout:
743 self.stdout.close()
744 if self.stderr:
745 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200746 try: # Flushing a BufferedWriter may raise an error
747 if self.stdin:
748 self.stdin.close()
749 finally:
750 # Wait for the process to terminate, to avoid zombies.
751 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000752
Victor Stinner9505b032017-01-06 10:44:44 +0100753 def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200754 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000755 # We didn't get to successfully create a child process.
756 return
Victor Stinner5a48e212016-05-20 12:11:15 +0200757 if self.returncode is None:
Victor Stinnerc206f1e2016-06-14 16:42:59 +0200758 # Not reading subprocess exit status creates a zombi process which
759 # is only destroyed at the parent python process exit
Victor Stinner9505b032017-01-06 10:44:44 +0100760 _warn("subprocess %s is still running" % self.pid,
761 ResourceWarning, source=self)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000762 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000763 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000764 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000765 # Child is still running, keep us alive until we can wait on it.
766 _active.append(self)
767
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200768 def _get_devnull(self):
769 if not hasattr(self, '_devnull'):
770 self._devnull = os.open(os.devnull, os.O_RDWR)
771 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000772
Victor Stinnera5e881d2015-01-14 17:07:59 +0100773 def _stdin_write(self, input):
774 if input:
775 try:
776 self.stdin.write(input)
777 except BrokenPipeError:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000778 pass # communicate() must ignore broken pipe errors.
Victor Stinnerb319d092017-06-08 23:14:07 +0200779 except OSError as exc:
780 if exc.errno == errno.EINVAL:
781 # bpo-19612, bpo-30418: On Windows, stdin.write() fails
782 # with EINVAL if the child process exited or if the child
783 # process is still running but closed the pipe.
Victor Stinnera5e881d2015-01-14 17:07:59 +0100784 pass
785 else:
786 raise
Victor Stinnerb319d092017-06-08 23:14:07 +0200787
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.
Victor Stinnerb319d092017-06-08 23:14:07 +0200792 except OSError as exc:
793 if exc.errno == errno.EINVAL:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000794 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,
Zachary Waredf6f3f62017-03-11 17:16:34 -0600991 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
Reid Kleckner2b228f02011-03-16 16:57:54 -04001032 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001033 """Wait for child process to terminate. Returns returncode
1034 attribute."""
Reid Kleckner2b228f02011-03-16 16:57:54 -04001035 if endtime is not None:
Gregory P. Smithf0e98c52016-11-20 16:25:14 -08001036 warnings.warn(
1037 "'endtime' argument is deprecated; use 'timeout'.",
1038 DeprecationWarning,
1039 stacklevel=2)
Reid Kleckner2b228f02011-03-16 16:57:54 -04001040 timeout = self._remaining_time(endtime)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001041 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001042 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001043 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001044 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001045 if self.returncode is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001046 result = _winapi.WaitForSingleObject(self._handle,
1047 timeout_millis)
1048 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001049 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001050 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001051 return self.returncode
1052
1053
1054 def _readerthread(self, fh, buffer):
1055 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001056 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001057
1058
Reid Kleckner2b228f02011-03-16 16:57:54 -04001059 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001060 # Start reader threads feeding into a list hanging off of this
1061 # object, unless they've already been started.
1062 if self.stdout and not hasattr(self, "_stdout_buff"):
1063 self._stdout_buff = []
1064 self.stdout_thread = \
1065 threading.Thread(target=self._readerthread,
1066 args=(self.stdout, self._stdout_buff))
1067 self.stdout_thread.daemon = True
1068 self.stdout_thread.start()
1069 if self.stderr and not hasattr(self, "_stderr_buff"):
1070 self._stderr_buff = []
1071 self.stderr_thread = \
1072 threading.Thread(target=self._readerthread,
1073 args=(self.stderr, self._stderr_buff))
1074 self.stderr_thread.daemon = True
1075 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001076
1077 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001078 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001079
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001080 # Wait for the reader threads, or time out. If we time out, the
1081 # threads remain reading and the fds left open in case the user
1082 # calls communicate again.
1083 if self.stdout is not None:
1084 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001085 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001086 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001087 if self.stderr is not None:
1088 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001089 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001090 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001091
1092 # Collect the output from and close both pipes, now that we know
1093 # both have been read successfully.
1094 stdout = None
1095 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001096 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001097 stdout = self._stdout_buff
1098 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001099 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001100 stderr = self._stderr_buff
1101 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001102
1103 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001104 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001105 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001106 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001107 stderr = stderr[0]
1108
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001109 return (stdout, stderr)
1110
Christian Heimesa342c012008-04-20 21:01:16 +00001111 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001112 """Send a signal to the process."""
1113 # Don't signal a process that we know has already died.
1114 if self.returncode is not None:
1115 return
Christian Heimesa342c012008-04-20 21:01:16 +00001116 if sig == signal.SIGTERM:
1117 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001118 elif sig == signal.CTRL_C_EVENT:
1119 os.kill(self.pid, signal.CTRL_C_EVENT)
1120 elif sig == signal.CTRL_BREAK_EVENT:
1121 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001122 else:
Brian Curtin19651362010-09-07 13:24:38 +00001123 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001124
1125 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001126 """Terminates the process."""
1127 # Don't terminate a process that we know has already died.
1128 if self.returncode is not None:
1129 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001130 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001131 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001132 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001133 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1134 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001135 rc = _winapi.GetExitCodeProcess(self._handle)
1136 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001137 raise
1138 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001139
1140 kill = terminate
1141
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001142 else:
1143 #
1144 # POSIX methods
1145 #
1146 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001147 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001148 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1149 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001150 p2cread, p2cwrite = -1, -1
1151 c2pread, c2pwrite = -1, -1
1152 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001153
Peter Astrandd38ddf42005-02-10 08:32:50 +00001154 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001155 pass
1156 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001157 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001158 elif stdin == DEVNULL:
1159 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001160 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001161 p2cread = stdin
1162 else:
1163 # Assuming file-like object
1164 p2cread = stdin.fileno()
1165
Peter Astrandd38ddf42005-02-10 08:32:50 +00001166 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001167 pass
1168 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001169 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001170 elif stdout == DEVNULL:
1171 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001172 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001173 c2pwrite = stdout
1174 else:
1175 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001176 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001177
Peter Astrandd38ddf42005-02-10 08:32:50 +00001178 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001179 pass
1180 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001181 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001182 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001183 if c2pwrite != -1:
1184 errwrite = c2pwrite
1185 else: # child's stdout is not set, use parent's stdout
1186 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001187 elif stderr == DEVNULL:
1188 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001189 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001190 errwrite = stderr
1191 else:
1192 # Assuming file-like object
1193 errwrite = stderr.fileno()
1194
1195 return (p2cread, p2cwrite,
1196 c2pread, c2pwrite,
1197 errread, errwrite)
1198
1199
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001200 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001201 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001202 startupinfo, creationflags, shell,
1203 p2cread, p2cwrite,
1204 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001205 errread, errwrite,
1206 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001207 """Execute program (POSIX version)"""
1208
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001209 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001210 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001211 else:
1212 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001213
1214 if shell:
1215 args = ["/bin/sh", "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001216 if executable:
1217 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001218
Peter Astrandd38ddf42005-02-10 08:32:50 +00001219 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001220 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001221 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001222
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001223 # For transferring possible exec failure from child to parent.
1224 # Data format: "exception name:hex errno:description"
1225 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001226 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001227 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1228 low_fds_to_close = []
1229 while errpipe_write < 3:
1230 low_fds_to_close.append(errpipe_write)
1231 errpipe_write = os.dup(errpipe_write)
1232 for low_fd in low_fds_to_close:
1233 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001234 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001235 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001236 # We must avoid complex work that could involve
1237 # malloc or free in the child process to avoid
1238 # potential deadlocks, thus we do all this here.
1239 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001240
Victor Stinner372b8382011-06-21 17:24:21 +02001241 if env is not None:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001242 env_list = [os.fsencode(k) + b'=' + os.fsencode(v)
1243 for k, v in env.items()]
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001244 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001245 env_list = None # Use execv instead of execve.
1246 executable = os.fsencode(executable)
1247 if os.path.dirname(executable):
1248 executable_list = (executable,)
1249 else:
1250 # This matches the behavior of os._execvpe().
1251 executable_list = tuple(
1252 os.path.join(os.fsencode(dir), executable)
1253 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001254 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001255 fds_to_keep.add(errpipe_write)
1256 self.pid = _posixsubprocess.fork_exec(
1257 args, executable_list,
Serhiy Storchakae2546172017-04-19 23:59:02 +03001258 close_fds, tuple(sorted(map(int, fds_to_keep))),
1259 cwd, env_list,
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001260 p2cread, p2cwrite, c2pread, c2pwrite,
1261 errread, errwrite,
1262 errpipe_read, errpipe_write,
1263 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001264 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001265 finally:
1266 # be sure the FD is closed no matter what
1267 os.close(errpipe_write)
1268
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001269 # self._devnull is not always defined.
1270 devnull_fd = getattr(self, '_devnull', None)
1271 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001272 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001273 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001274 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001275 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001276 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001277 if devnull_fd is not None:
1278 os.close(devnull_fd)
1279 # Prevent a double close of these fds from __init__ on error.
1280 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001281
1282 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001283 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001284 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001285 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001286 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001287 errpipe_data += part
1288 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001289 break
Facundo Batista10706e22009-06-19 20:34:30 +00001290 finally:
1291 # be sure the FD is closed no matter what
1292 os.close(errpipe_read)
1293
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001294 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001295 try:
Victor Stinnera58e2c52016-05-20 12:08:12 +02001296 pid, sts = os.waitpid(self.pid, 0)
1297 if pid == self.pid:
1298 self._handle_exitstatus(sts)
1299 else:
1300 self.returncode = sys.maxsize
Victor Stinnera5e881d2015-01-14 17:07:59 +01001301 except ChildProcessError:
1302 pass
Victor Stinnera58e2c52016-05-20 12:08:12 +02001303
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001304 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001305 exception_name, hex_errno, err_msg = (
1306 errpipe_data.split(b':', 2))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001307 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001308 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001309 hex_errno = b'0'
Gregory P. Smith3aee2222012-11-11 00:04:13 -08001310 err_msg = (b'Bad exception data from child: ' +
1311 repr(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001312 child_exception_type = getattr(
1313 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001314 SubprocessError)
Victor Stinner4d078042010-04-23 19:28:32 +00001315 err_msg = err_msg.decode(errors="surrogatepass")
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001316 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001317 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001318 child_exec_never_called = (err_msg == "noexec")
1319 if child_exec_never_called:
1320 err_msg = ""
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001321 if errno_num != 0:
1322 err_msg = os.strerror(errno_num)
1323 if errno_num == errno.ENOENT:
Gregory P. Smith5591b022012-10-10 03:34:47 -07001324 if child_exec_never_called:
1325 # The error must be from chdir(cwd).
1326 err_msg += ': ' + repr(cwd)
1327 else:
1328 err_msg += ': ' + repr(orig_executable)
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001329 raise child_exception_type(errno_num, err_msg)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001330 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001331
1332
Brett Cannon84df1e62010-05-14 00:33:40 +00001333 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1334 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001335 _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
1336 _WSTOPSIG=os.WSTOPSIG):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001337 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001338 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001339 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001340 if _WIFSIGNALED(sts):
1341 self.returncode = -_WTERMSIG(sts)
1342 elif _WIFEXITED(sts):
1343 self.returncode = _WEXITSTATUS(sts)
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001344 elif _WIFSTOPPED(sts):
1345 self.returncode = -_WSTOPSIG(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001346 else:
1347 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001348 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001349
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001350
Brett Cannon84df1e62010-05-14 00:33:40 +00001351 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001352 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001353 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001354 attribute.
1355
1356 This method is called by __del__, so it cannot reference anything
1357 outside of the local scope (nor can any methods it calls).
1358
1359 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001360 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001361 if not self._waitpid_lock.acquire(False):
1362 # Something else is busy calling waitpid. Don't allow two
1363 # at once. We know nothing yet.
1364 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001365 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001366 if self.returncode is not None:
1367 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001368 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001369 if pid == self.pid:
1370 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001371 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001372 if _deadstate is not None:
1373 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001374 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001375 # This happens if SIGCLD is set to be ignored or
1376 # waiting for child processes has otherwise been
1377 # disabled for our process. This child is dead, we
1378 # can't get the status.
1379 # http://bugs.python.org/issue15756
1380 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001381 finally:
1382 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001383 return self.returncode
1384
1385
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001386 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001387 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001388 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001389 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001390 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001391 # This happens if SIGCLD is set to be ignored or waiting
1392 # for child processes has otherwise been disabled for our
1393 # process. This child is dead, we can't get the status.
1394 pid = self.pid
1395 sts = 0
1396 return (pid, sts)
1397
1398
1399 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001400 """Wait for child process to terminate. Returns returncode
1401 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001402 if self.returncode is not None:
1403 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001404
Gregory P. Smithf0e98c52016-11-20 16:25:14 -08001405 if endtime is not None:
1406 warnings.warn(
1407 "'endtime' argument is deprecated; use 'timeout'.",
1408 DeprecationWarning,
1409 stacklevel=2)
Reid Kleckner2b228f02011-03-16 16:57:54 -04001410 if endtime is not None or timeout is not None:
1411 if endtime is None:
Victor Stinner949d8c92012-05-30 13:30:32 +02001412 endtime = _time() + timeout
Reid Kleckner2b228f02011-03-16 16:57:54 -04001413 elif timeout is None:
1414 timeout = self._remaining_time(endtime)
1415
1416 if endtime is not None:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001417 # Enter a busy loop if we have a timeout. This busy loop was
1418 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1419 delay = 0.0005 # 500 us -> initial delay of 1 ms
1420 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001421 if self._waitpid_lock.acquire(False):
1422 try:
1423 if self.returncode is not None:
1424 break # Another thread waited.
1425 (pid, sts) = self._try_wait(os.WNOHANG)
1426 assert pid == self.pid or pid == 0
1427 if pid == self.pid:
1428 self._handle_exitstatus(sts)
1429 break
1430 finally:
1431 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001432 remaining = self._remaining_time(endtime)
1433 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001434 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001435 delay = min(delay * 2, remaining, .05)
1436 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001437 else:
1438 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001439 with self._waitpid_lock:
1440 if self.returncode is not None:
1441 break # Another thread waited.
1442 (pid, sts) = self._try_wait(0)
1443 # Check the pid and loop as waitpid has been known to
1444 # return 0 even without WNOHANG in odd situations.
1445 # http://bugs.python.org/issue14396.
1446 if pid == self.pid:
1447 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001448 return self.returncode
1449
1450
Reid Kleckner2b228f02011-03-16 16:57:54 -04001451 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001452 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001453 # Flush stdio buffer. This might block, if the user has
1454 # been writing to .stdin in an uncontrolled fashion.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001455 try:
1456 self.stdin.flush()
1457 except BrokenPipeError:
1458 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001459 if not input:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001460 try:
1461 self.stdin.close()
1462 except BrokenPipeError:
1463 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001464
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001465 stdout = None
1466 stderr = None
1467
1468 # Only create this mapping if we haven't already.
1469 if not self._communication_started:
1470 self._fileobj2output = {}
1471 if self.stdout:
1472 self._fileobj2output[self.stdout] = []
1473 if self.stderr:
1474 self._fileobj2output[self.stderr] = []
1475
1476 if self.stdout:
1477 stdout = self._fileobj2output[self.stdout]
1478 if self.stderr:
1479 stderr = self._fileobj2output[self.stderr]
1480
1481 self._save_input(input)
1482
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001483 if self._input:
1484 input_view = memoryview(self._input)
1485
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001486 with _PopenSelector() as selector:
1487 if self.stdin and input:
1488 selector.register(self.stdin, selectors.EVENT_WRITE)
1489 if self.stdout:
1490 selector.register(self.stdout, selectors.EVENT_READ)
1491 if self.stderr:
1492 selector.register(self.stderr, selectors.EVENT_READ)
1493
1494 while selector.get_map():
1495 timeout = self._remaining_time(endtime)
1496 if timeout is not None and timeout < 0:
1497 raise TimeoutExpired(self.args, orig_timeout)
1498
1499 ready = selector.select(timeout)
1500 self._check_timeout(endtime, orig_timeout)
1501
1502 # XXX Rewrite these to use non-blocking I/O on the file
1503 # objects; they are no longer using C stdio!
1504
1505 for key, events in ready:
1506 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001507 chunk = input_view[self._input_offset :
1508 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001509 try:
1510 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001511 except BrokenPipeError:
1512 selector.unregister(key.fileobj)
1513 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001514 else:
1515 if self._input_offset >= len(self._input):
1516 selector.unregister(key.fileobj)
1517 key.fileobj.close()
1518 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001519 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001520 if not data:
1521 selector.unregister(key.fileobj)
1522 key.fileobj.close()
1523 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001524
1525 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001526
1527 # All data exchanged. Translate lists into strings.
1528 if stdout is not None:
1529 stdout = b''.join(stdout)
1530 if stderr is not None:
1531 stderr = b''.join(stderr)
1532
1533 # Translate newlines, if requested.
1534 # This also turns bytes into strings.
Steve Dower050acae2016-09-06 20:16:17 -07001535 if self.encoding or self.errors or self.universal_newlines:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001536 if stdout is not None:
1537 stdout = self._translate_newlines(stdout,
Steve Dower050acae2016-09-06 20:16:17 -07001538 self.stdout.encoding,
1539 self.stdout.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001540 if stderr is not None:
1541 stderr = self._translate_newlines(stderr,
Steve Dower050acae2016-09-06 20:16:17 -07001542 self.stderr.encoding,
1543 self.stderr.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001544
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001545 return (stdout, stderr)
1546
1547
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001548 def _save_input(self, input):
1549 # This method is called from the _communicate_with_*() methods
1550 # so that if we time out while communicating, we can continue
1551 # sending input if we retry.
1552 if self.stdin and self._input is None:
1553 self._input_offset = 0
1554 self._input = input
Steve Dower050acae2016-09-06 20:16:17 -07001555 if input is not None and (
1556 self.encoding or self.errors or self.universal_newlines):
1557 self._input = self._input.encode(self.stdin.encoding,
1558 self.stdin.errors)
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001559
1560
Christian Heimesa342c012008-04-20 21:01:16 +00001561 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001562 """Send a signal to the process."""
1563 # Skip signalling a process that we know has already died.
1564 if self.returncode is None:
1565 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00001566
1567 def terminate(self):
1568 """Terminate the process with SIGTERM
1569 """
1570 self.send_signal(signal.SIGTERM)
1571
1572 def kill(self):
1573 """Kill the process with SIGKILL
1574 """
1575 self.send_signal(signal.SIGKILL)