blob: 0496b447e8ea035759674509ffdfc393d1ca15fc [file] [log] [blame]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001# subprocess - Subprocesses with accessible I/O streams
2#
Tim Peterse718f612004-10-12 21:51:32 +00003# For more information about this module, see PEP 324.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00004#
Peter Astrand3a708df2005-09-23 17:37:29 +00005# Copyright (c) 2003-2005 by Peter Astrand <astrand@lysator.liu.se>
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00006#
Peter Astrand69bf13f2005-02-14 08:56:32 +00007# Licensed to PSF under a Contributor Agreement.
Peter Astrand3a708df2005-09-23 17:37:29 +00008# See http://www.python.org/2.4/license for licensing details.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00009
Martin Panter4afdca02016-10-25 22:20:48 +000010r"""Subprocesses with accessible I/O streams
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000011
Fredrik Lundh15aaacc2004-10-17 14:47:05 +000012This module allows you to spawn processes, connect to their
Martin Panter4afdca02016-10-25 22:20:48 +000013input/output/error pipes, and obtain their return codes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000014
Martin Panter4afdca02016-10-25 22:20:48 +000015For a complete description of this module see the Python documentation.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000016
Martin Panter4afdca02016-10-25 22:20:48 +000017Main API
18========
19run(...): Runs a command, waits for it to complete, then returns a
20 CompletedProcess instance.
21Popen(...): A class for flexibly executing a command in a new process
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000022
Martin Panter4afdca02016-10-25 22:20:48 +000023Constants
24---------
25DEVNULL: Special value that indicates that os.devnull should be used
26PIPE: Special value that indicates a pipe should be created
27STDOUT: Special value that indicates that stderr should go to stdout
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000028
29
Martin Panter4afdca02016-10-25 22:20:48 +000030Older API
31=========
32call(...): Runs a command, waits for it to complete, then returns
33 the return code.
34check_call(...): Same as call() but raises CalledProcessError()
35 if return code is not 0
36check_output(...): Same as check_call() but returns the contents of
37 stdout instead of a return code
38getoutput(...): Runs a command in the shell, waits for it to complete,
39 then returns the output
40getstatusoutput(...): Runs a command in the shell, waits for it to complete,
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -070041 then returns a (exitcode, output) tuple
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000042"""
43
Zachary Ware880d42a2018-09-10 16:16:08 -070044import builtins
45import errno
Guido van Rossumfa0054a2007-05-24 04:05:35 +000046import io
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000047import os
Reid Kleckner31aa7dd2011-03-14 12:02:10 -040048import time
Christian Heimesa342c012008-04-20 21:01:16 +000049import signal
Zachary Ware880d42a2018-09-10 16:16:08 -070050import sys
51import threading
Gregory P. Smithd23047b2010-12-04 09:10:44 +000052import warnings
Giampaolo Rodolabafa8482019-01-29 22:14:24 +010053import contextlib
Victor Stinnerae586492014-09-02 23:18:25 +020054from time import monotonic as _time
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000055
Zachary Ware880d42a2018-09-10 16:16:08 -070056
57__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
58 "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL",
59 "SubprocessError", "TimeoutExpired", "CompletedProcess"]
60 # NOTE: We intentionally exclude list2cmdline as it is
61 # considered an internal implementation detail. issue10838.
62
63try:
64 import msvcrt
65 import _winapi
66 _mswindows = True
67except ModuleNotFoundError:
68 _mswindows = False
69 import _posixsubprocess
70 import select
71 import selectors
72else:
73 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
74 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
75 STD_ERROR_HANDLE, SW_HIDE,
76 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW,
77 ABOVE_NORMAL_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS,
78 HIGH_PRIORITY_CLASS, IDLE_PRIORITY_CLASS,
79 NORMAL_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS,
80 CREATE_NO_WINDOW, DETACHED_PROCESS,
81 CREATE_DEFAULT_ERROR_MODE, CREATE_BREAKAWAY_FROM_JOB)
82
83 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
84 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
85 "STD_ERROR_HANDLE", "SW_HIDE",
86 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW",
87 "STARTUPINFO",
88 "ABOVE_NORMAL_PRIORITY_CLASS", "BELOW_NORMAL_PRIORITY_CLASS",
89 "HIGH_PRIORITY_CLASS", "IDLE_PRIORITY_CLASS",
90 "NORMAL_PRIORITY_CLASS", "REALTIME_PRIORITY_CLASS",
91 "CREATE_NO_WINDOW", "DETACHED_PROCESS",
92 "CREATE_DEFAULT_ERROR_MODE", "CREATE_BREAKAWAY_FROM_JOB"])
93
94
Peter Astrand454f7672005-01-01 09:36:35 +000095# Exception classes used by this module.
Gregory P. Smith54d412e2011-03-14 14:08:43 -040096class SubprocessError(Exception): pass
97
98
99class CalledProcessError(SubprocessError):
Martin Panter4afdca02016-10-25 22:20:48 +0000100 """Raised when run() is called with check=True and the process
101 returns a non-zero exit status.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)d6da7602016-06-03 06:14:06 +0000102
Martin Panter4afdca02016-10-25 22:20:48 +0000103 Attributes:
104 cmd, returncode, stdout, stderr, output
Georg Brandlf9734072008-12-07 15:30:06 +0000105 """
Gregory P. Smith6e730002015-04-14 16:14:25 -0700106 def __init__(self, returncode, cmd, output=None, stderr=None):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000107 self.returncode = returncode
108 self.cmd = cmd
Georg Brandlf9734072008-12-07 15:30:06 +0000109 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -0700110 self.stderr = stderr
111
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000112 def __str__(self):
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)d6da7602016-06-03 06:14:06 +0000113 if self.returncode and self.returncode < 0:
114 try:
115 return "Command '%s' died with %r." % (
116 self.cmd, signal.Signals(-self.returncode))
117 except ValueError:
118 return "Command '%s' died with unknown signal %d." % (
119 self.cmd, -self.returncode)
120 else:
121 return "Command '%s' returned non-zero exit status %d." % (
122 self.cmd, self.returncode)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000123
Gregory P. Smith6e730002015-04-14 16:14:25 -0700124 @property
125 def stdout(self):
126 """Alias for output attribute, to match stderr"""
127 return self.output
128
129 @stdout.setter
130 def stdout(self, value):
131 # There's no obvious reason to set this, but allow it anyway so
132 # .stdout is a transparent alias for .output
133 self.output = value
134
Peter Astrand454f7672005-01-01 09:36:35 +0000135
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400136class TimeoutExpired(SubprocessError):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400137 """This exception is raised when the timeout expires while waiting for a
138 child process.
Martin Panter4afdca02016-10-25 22:20:48 +0000139
140 Attributes:
141 cmd, output, stdout, stderr, timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400142 """
Gregory P. Smith6e730002015-04-14 16:14:25 -0700143 def __init__(self, cmd, timeout, output=None, stderr=None):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400144 self.cmd = cmd
Reid Kleckner2b228f02011-03-16 16:57:54 -0400145 self.timeout = timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400146 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -0700147 self.stderr = stderr
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400148
149 def __str__(self):
150 return ("Command '%s' timed out after %s seconds" %
151 (self.cmd, self.timeout))
152
Gregory P. Smith6e730002015-04-14 16:14:25 -0700153 @property
154 def stdout(self):
155 return self.output
156
157 @stdout.setter
158 def stdout(self, value):
159 # There's no obvious reason to set this, but allow it anyway so
160 # .stdout is a transparent alias for .output
161 self.output = value
162
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400163
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700164if _mswindows:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000165 class STARTUPINFO:
Subhendu Ghoshae160bb2017-02-25 20:29:05 +0530166 def __init__(self, *, dwFlags=0, hStdInput=None, hStdOutput=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200167 hStdError=None, wShowWindow=0, lpAttributeList=None):
Subhendu Ghoshae160bb2017-02-25 20:29:05 +0530168 self.dwFlags = dwFlags
169 self.hStdInput = hStdInput
170 self.hStdOutput = hStdOutput
171 self.hStdError = hStdError
172 self.wShowWindow = wShowWindow
Segev Finerb2a60832017-12-18 11:28:19 +0200173 self.lpAttributeList = lpAttributeList or {"handle_list": []}
Victor Stinner483422f2018-07-05 22:54:17 +0200174
175 def copy(self):
176 attr_list = self.lpAttributeList.copy()
177 if 'handle_list' in attr_list:
178 attr_list['handle_list'] = list(attr_list['handle_list'])
179
180 return STARTUPINFO(dwFlags=self.dwFlags,
181 hStdInput=self.hStdInput,
182 hStdOutput=self.hStdOutput,
183 hStdError=self.hStdError,
184 wShowWindow=self.wShowWindow,
185 lpAttributeList=attr_list)
186
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200187
188 class Handle(int):
189 closed = False
190
191 def Close(self, CloseHandle=_winapi.CloseHandle):
192 if not self.closed:
193 self.closed = True
194 CloseHandle(self)
195
196 def Detach(self):
197 if not self.closed:
198 self.closed = True
199 return int(self)
200 raise ValueError("already closed")
201
202 def __repr__(self):
Serhiy Storchaka465e60e2014-07-25 23:36:00 +0300203 return "%s(%d)" % (self.__class__.__name__, int(self))
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200204
205 __del__ = Close
206 __str__ = __repr__
Zachary Ware880d42a2018-09-10 16:16:08 -0700207else:
208 # When select or poll has indicated that the file is writable,
209 # we can write up to _PIPE_BUF bytes without risk of blocking.
210 # POSIX defines PIPE_BUF as >= 512.
211 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
212
213 # poll/select have the advantage of not requiring any extra file
214 # descriptor, contrarily to epoll/kqueue (also, they require a single
215 # syscall).
216 if hasattr(selectors, 'PollSelector'):
217 _PopenSelector = selectors.PollSelector
218 else:
219 _PopenSelector = selectors.SelectSelector
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200220
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000221
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200222# This lists holds Popen instances for which the underlying process had not
223# exited at the time its __del__ method got called: those processes are wait()ed
224# for synchronously from _cleanup() when a new Popen object is created, to avoid
225# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000226_active = []
227
228def _cleanup():
229 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000230 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200231 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000232 try:
233 _active.remove(inst)
234 except ValueError:
235 # This can happen if two threads create a new Popen instance.
236 # It's harmless that it was already removed, so ignore.
237 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000238
239PIPE = -1
240STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200241DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000242
243
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200244# XXX This function is only used by multiprocessing and the test suite,
245# but it's here so that it can be imported when Python is compiled without
246# threads.
247
Victor Stinner9def2842016-01-18 12:15:08 +0100248def _optim_args_from_interpreter_flags():
249 """Return a list of command-line arguments reproducing the current
250 optimization settings in sys.flags."""
251 args = []
252 value = sys.flags.optimize
253 if value > 0:
254 args.append('-' + 'O' * value)
255 return args
256
257
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200258def _args_from_interpreter_flags():
259 """Return a list of command-line arguments reproducing the current
Victor Stinner747f48e2017-12-12 22:59:48 +0100260 settings in sys.flags, sys.warnoptions and sys._xoptions."""
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200261 flag_opt_map = {
262 'debug': 'd',
263 # 'inspect': 'i',
264 # 'interactive': 'i',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200265 'dont_write_bytecode': 'B',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200266 'no_site': 'S',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200267 'verbose': 'v',
268 'bytes_warning': 'b',
269 'quiet': 'q',
Victor Stinner9def2842016-01-18 12:15:08 +0100270 # -O is handled in _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200271 }
Victor Stinner9def2842016-01-18 12:15:08 +0100272 args = _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200273 for flag, opt in flag_opt_map.items():
274 v = getattr(sys.flags, flag)
275 if v > 0:
276 args.append('-' + opt * v)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800277
Victor Stinner9de36322018-11-23 17:54:20 +0100278 if sys.flags.isolated:
279 args.append('-I')
280 else:
281 if sys.flags.ignore_environment:
282 args.append('-E')
283 if sys.flags.no_user_site:
284 args.append('-s')
285
Victor Stinnerf39b6742017-11-20 15:24:56 -0800286 # -W options
Victor Stinner747f48e2017-12-12 22:59:48 +0100287 warnopts = sys.warnoptions[:]
288 bytes_warning = sys.flags.bytes_warning
289 xoptions = getattr(sys, '_xoptions', {})
290 dev_mode = ('dev' in xoptions)
291
292 if bytes_warning > 1:
293 warnopts.remove("error::BytesWarning")
294 elif bytes_warning:
295 warnopts.remove("default::BytesWarning")
296 if dev_mode:
297 warnopts.remove('default')
298 for opt in warnopts:
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200299 args.append('-W' + opt)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800300
301 # -X options
Victor Stinner747f48e2017-12-12 22:59:48 +0100302 if dev_mode:
Victor Stinnerf39b6742017-11-20 15:24:56 -0800303 args.extend(('-X', 'dev'))
304 for opt in ('faulthandler', 'tracemalloc', 'importtime',
Victor Stinner91106cd2017-12-13 12:29:09 +0100305 'showalloccount', 'showrefcount', 'utf8'):
Victor Stinnerf39b6742017-11-20 15:24:56 -0800306 if opt in xoptions:
307 value = xoptions[opt]
308 if value is True:
309 arg = opt
310 else:
311 arg = '%s=%s' % (opt, value)
312 args.extend(('-X', arg))
313
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200314 return args
315
316
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400317def call(*popenargs, timeout=None, **kwargs):
318 """Run command with arguments. Wait for command to complete or
319 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000320
321 The arguments are the same as for the Popen constructor. Example:
322
323 retcode = call(["ls", "-l"])
324 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200325 with Popen(*popenargs, **kwargs) as p:
326 try:
327 return p.wait(timeout=timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800328 except: # Including KeyboardInterrupt, wait handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200329 p.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800330 # We don't call p.wait() again as p.__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200331 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000332
333
Peter Astrand454f7672005-01-01 09:36:35 +0000334def check_call(*popenargs, **kwargs):
335 """Run command with arguments. Wait for command to complete. If
336 the exit code was zero then return, otherwise raise
337 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000338 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000339
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400340 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000341
342 check_call(["ls", "-l"])
343 """
344 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000345 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000346 cmd = kwargs.get("args")
347 if cmd is None:
348 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000349 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000350 return 0
351
352
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400353def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700354 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000355
356 If the exit code was non-zero it raises a CalledProcessError. The
357 CalledProcessError object will have the return code in the returncode
358 attribute and output in the output attribute.
359
360 The arguments are the same as for the Popen constructor. Example:
361
362 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000363 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000364
365 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000366 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000367
368 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000369 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000370 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000371 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700372
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300373 There is an additional optional argument, "input", allowing you to
374 pass a string to the subprocess's stdin. If you use this argument
375 you may not also use the Popen constructor's "stdin" argument, as
376 it too will be used internally. Example:
377
378 >>> check_output(["sed", "-e", "s/foo/bar/"],
379 ... input=b"when in the course of fooman events\n")
380 b'when in the course of barman events\n'
381
andyclegg7fed7bd2017-10-23 03:01:19 +0100382 By default, all communication is in bytes, and therefore any "input"
383 should be bytes, and the return value wil be bytes. If in text mode,
384 any "input" should be a string, and the return value will be a string
385 decoded according to locale encoding, or by "encoding" if set. Text mode
386 is triggered by setting any of text, encoding, errors or universal_newlines.
Georg Brandlf9734072008-12-07 15:30:06 +0000387 """
388 if 'stdout' in kwargs:
389 raise ValueError('stdout argument not allowed, it will be overridden.')
Gregory P. Smith6e730002015-04-14 16:14:25 -0700390
391 if 'input' in kwargs and kwargs['input'] is None:
392 # Explicitly passing input=None was previously equivalent to passing an
393 # empty string. That is maintained here for backwards compatibility.
394 kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
395
396 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
397 **kwargs).stdout
398
399
400class CompletedProcess(object):
401 """A process that has finished running.
402
403 This is returned by run().
404
405 Attributes:
406 args: The list or str args passed to run().
407 returncode: The exit code of the process, negative for signals.
408 stdout: The standard output (None if not captured).
409 stderr: The standard error (None if not captured).
410 """
411 def __init__(self, args, returncode, stdout=None, stderr=None):
412 self.args = args
413 self.returncode = returncode
414 self.stdout = stdout
415 self.stderr = stderr
416
417 def __repr__(self):
418 args = ['args={!r}'.format(self.args),
419 'returncode={!r}'.format(self.returncode)]
420 if self.stdout is not None:
421 args.append('stdout={!r}'.format(self.stdout))
422 if self.stderr is not None:
423 args.append('stderr={!r}'.format(self.stderr))
424 return "{}({})".format(type(self).__name__, ', '.join(args))
425
426 def check_returncode(self):
427 """Raise CalledProcessError if the exit code is non-zero."""
428 if self.returncode:
429 raise CalledProcessError(self.returncode, self.args, self.stdout,
430 self.stderr)
431
432
Bo Baylesce0f33d2018-01-30 00:40:39 -0600433def run(*popenargs,
434 input=None, capture_output=False, timeout=None, check=False, **kwargs):
Gregory P. Smith6e730002015-04-14 16:14:25 -0700435 """Run command with arguments and return a CompletedProcess instance.
436
437 The returned instance will have attributes args, returncode, stdout and
438 stderr. By default, stdout and stderr are not captured, and those attributes
439 will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.
440
441 If check is True and the exit code was non-zero, it raises a
442 CalledProcessError. The CalledProcessError object will have the return code
443 in the returncode attribute, and output & stderr attributes if those streams
444 were captured.
445
446 If timeout is given, and the process takes too long, a TimeoutExpired
447 exception will be raised.
448
449 There is an optional argument "input", allowing you to
andyclegg7fed7bd2017-10-23 03:01:19 +0100450 pass bytes or a string to the subprocess's stdin. If you use this argument
Gregory P. Smith6e730002015-04-14 16:14:25 -0700451 you may not also use the Popen constructor's "stdin" argument, as
452 it will be used internally.
453
andyclegg7fed7bd2017-10-23 03:01:19 +0100454 By default, all communication is in bytes, and therefore any "input" should
455 be bytes, and the stdout and stderr will be bytes. If in text mode, any
456 "input" should be a string, and stdout and stderr will be strings decoded
457 according to locale encoding, or by "encoding" if set. Text mode is
458 triggered by setting any of text, encoding, errors or universal_newlines.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700459
andyclegg7fed7bd2017-10-23 03:01:19 +0100460 The other arguments are the same as for the Popen constructor.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700461 """
462 if input is not None:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300463 if 'stdin' in kwargs:
464 raise ValueError('stdin and input arguments may not both be used.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300465 kwargs['stdin'] = PIPE
Gregory P. Smith6e730002015-04-14 16:14:25 -0700466
Bo Baylesce0f33d2018-01-30 00:40:39 -0600467 if capture_output:
468 if ('stdout' in kwargs) or ('stderr' in kwargs):
469 raise ValueError('stdout and stderr arguments may not be used '
470 'with capture_output.')
471 kwargs['stdout'] = PIPE
472 kwargs['stderr'] = PIPE
473
Gregory P. Smith6e730002015-04-14 16:14:25 -0700474 with Popen(*popenargs, **kwargs) as process:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200475 try:
Gregory P. Smith6e730002015-04-14 16:14:25 -0700476 stdout, stderr = process.communicate(input, timeout=timeout)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200477 except TimeoutExpired:
478 process.kill()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700479 stdout, stderr = process.communicate()
480 raise TimeoutExpired(process.args, timeout, output=stdout,
481 stderr=stderr)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800482 except: # Including KeyboardInterrupt, communicate handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200483 process.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800484 # We don't call process.wait() as .__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200485 raise
486 retcode = process.poll()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700487 if check and retcode:
488 raise CalledProcessError(retcode, process.args,
489 output=stdout, stderr=stderr)
490 return CompletedProcess(process.args, retcode, stdout, stderr)
Peter Astrand454f7672005-01-01 09:36:35 +0000491
492
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000493def list2cmdline(seq):
494 """
495 Translate a sequence of arguments into a command line
496 string, using the same rules as the MS C runtime:
497
498 1) Arguments are delimited by white space, which is either a
499 space or a tab.
500
501 2) A string surrounded by double quotation marks is
502 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000503 contained within. A quoted string can be embedded in an
504 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000505
506 3) A double quotation mark preceded by a backslash is
507 interpreted as a literal double quotation mark.
508
509 4) Backslashes are interpreted literally, unless they
510 immediately precede a double quotation mark.
511
512 5) If backslashes immediately precede a double quotation mark,
513 every pair of backslashes is interpreted as a literal
514 backslash. If the number of backslashes is odd, the last
515 backslash escapes the next double quotation mark as
516 described in rule 3.
517 """
518
519 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000520 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
521 # or search http://msdn.microsoft.com for
522 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000523 result = []
524 needquote = False
525 for arg in seq:
526 bs_buf = []
527
528 # Add a space to separate this argument from the others
529 if result:
530 result.append(' ')
531
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000532 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000533 if needquote:
534 result.append('"')
535
536 for c in arg:
537 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000538 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000539 bs_buf.append(c)
540 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000541 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000542 result.append('\\' * len(bs_buf)*2)
543 bs_buf = []
544 result.append('\\"')
545 else:
546 # Normal char
547 if bs_buf:
548 result.extend(bs_buf)
549 bs_buf = []
550 result.append(c)
551
Christian Heimesfdab48e2008-01-20 09:06:41 +0000552 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000553 if bs_buf:
554 result.extend(bs_buf)
555
556 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000557 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000558 result.append('"')
559
560 return ''.join(result)
561
562
Brett Cannona23810f2008-05-26 19:04:21 +0000563# Various tools for executing commands and looking at their output and status.
564#
Brett Cannona23810f2008-05-26 19:04:21 +0000565
566def getstatusoutput(cmd):
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700567 """Return (exitcode, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000568
Tim Golden60798142013-11-05 12:57:25 +0000569 Execute the string 'cmd' in a shell with 'check_output' and
Steve Dower050acae2016-09-06 20:16:17 -0700570 return a 2-tuple (status, output). The locale encoding is used
571 to decode the output and process newlines.
Tim Golden60798142013-11-05 12:57:25 +0000572
573 A trailing newline is stripped from the output.
574 The exit status for the command can be interpreted
575 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000576
577 >>> import subprocess
578 >>> subprocess.getstatusoutput('ls /bin/ls')
579 (0, '/bin/ls')
580 >>> subprocess.getstatusoutput('cat /bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700581 (1, 'cat: /bin/junk: No such file or directory')
Brett Cannona23810f2008-05-26 19:04:21 +0000582 >>> subprocess.getstatusoutput('/bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700583 (127, 'sh: /bin/junk: not found')
584 >>> subprocess.getstatusoutput('/bin/kill $$')
585 (-15, '')
Brett Cannona23810f2008-05-26 19:04:21 +0000586 """
Tim Goldene0041752013-11-03 12:53:17 +0000587 try:
andyclegg7fed7bd2017-10-23 03:01:19 +0100588 data = check_output(cmd, shell=True, text=True, stderr=STDOUT)
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700589 exitcode = 0
Tim Goldene0041752013-11-03 12:53:17 +0000590 except CalledProcessError as ex:
591 data = ex.output
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700592 exitcode = ex.returncode
Tim Goldene0041752013-11-03 12:53:17 +0000593 if data[-1:] == '\n':
594 data = data[:-1]
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700595 return exitcode, data
Brett Cannona23810f2008-05-26 19:04:21 +0000596
597def getoutput(cmd):
598 """Return output (stdout or stderr) of executing cmd in a shell.
599
600 Like getstatusoutput(), except the exit status is ignored and the return
601 value is a string containing the command's output. Example:
602
603 >>> import subprocess
604 >>> subprocess.getoutput('ls /bin/ls')
605 '/bin/ls'
606 """
607 return getstatusoutput(cmd)[1]
608
609
Victor Stinner9daecf32019-01-16 00:02:35 +0100610def _use_posix_spawn():
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800611 """Check if posix_spawn() can be used for subprocess.
Victor Stinner9daecf32019-01-16 00:02:35 +0100612
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800613 subprocess requires a posix_spawn() implementation that properly reports
614 errors to the parent process, & sets errno on the following failures:
Victor Stinner9daecf32019-01-16 00:02:35 +0100615
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800616 * Process attribute actions failed.
617 * File actions failed.
618 * exec() failed.
Victor Stinner9daecf32019-01-16 00:02:35 +0100619
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800620 Prefer an implementation which can use vfork() in some cases for best
621 performance.
Victor Stinner9daecf32019-01-16 00:02:35 +0100622 """
623 if _mswindows or not hasattr(os, 'posix_spawn'):
624 # os.posix_spawn() is not available
625 return False
626
627 if sys.platform == 'darwin':
628 # posix_spawn() is a syscall on macOS and properly reports errors
629 return True
630
631 # Check libc name and runtime libc version
632 try:
633 ver = os.confstr('CS_GNU_LIBC_VERSION')
634 # parse 'glibc 2.28' as ('glibc', (2, 28))
635 parts = ver.split(maxsplit=1)
636 if len(parts) != 2:
637 # reject unknown format
638 raise ValueError
639 libc = parts[0]
640 version = tuple(map(int, parts[1].split('.')))
641
642 if sys.platform == 'linux' and libc == 'glibc' and version >= (2, 24):
643 # glibc 2.24 has a new Linux posix_spawn implementation using vfork
644 # which properly reports errors to the parent process.
645 return True
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800646 # Note: Don't use the implementation in earlier glibc because it doesn't
Victor Stinner9daecf32019-01-16 00:02:35 +0100647 # use vfork (even if glibc 2.26 added a pipe to properly report errors
648 # to the parent process).
649 except (AttributeError, ValueError, OSError):
650 # os.confstr() or CS_GNU_LIBC_VERSION value not available
651 pass
652
Gregory P. Smith81d04bc2019-01-26 15:19:11 -0800653 # By default, assume that posix_spawn() does not properly report errors.
Victor Stinner9daecf32019-01-16 00:02:35 +0100654 return False
655
656
657_USE_POSIX_SPAWN = _use_posix_spawn()
658
659
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000660class Popen(object):
Martin Panter4afdca02016-10-25 22:20:48 +0000661 """ Execute a child program in a new process.
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200662
Martin Panter4afdca02016-10-25 22:20:48 +0000663 For a complete description of the arguments see the Python documentation.
664
665 Arguments:
666 args: A string, or a sequence of program arguments.
667
668 bufsize: supplied as the buffering argument to the open() function when
669 creating the stdin/stdout/stderr pipe file objects
670
671 executable: A replacement program to execute.
672
673 stdin, stdout and stderr: These specify the executed programs' standard
674 input, standard output and standard error file handles, respectively.
675
676 preexec_fn: (POSIX only) An object to be called in the child process
677 just before the child is executed.
678
679 close_fds: Controls closing or inheriting of file descriptors.
680
681 shell: If true, the command will be executed through the shell.
682
683 cwd: Sets the current directory before the child is executed.
684
685 env: Defines the environment variables for the new process.
686
andyclegg7fed7bd2017-10-23 03:01:19 +0100687 text: If true, decode stdin, stdout and stderr using the given encoding
688 (if set) or the system default otherwise.
689
690 universal_newlines: Alias of text, provided for backwards compatibility.
Martin Panter4afdca02016-10-25 22:20:48 +0000691
692 startupinfo and creationflags (Windows only)
693
694 restore_signals (POSIX only)
695
696 start_new_session (POSIX only)
697
698 pass_fds (POSIX only)
699
Martin Panter3dca6242016-10-25 23:41:42 +0000700 encoding and errors: Text mode encoding and error handling to use for
701 file objects stdin, stdout and stderr.
702
Martin Panter4afdca02016-10-25 22:20:48 +0000703 Attributes:
704 stdin, stdout, stderr, pid, returncode
705 """
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200706 _child_created = False # Set here since __del__ checks it
707
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700708 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000709 stdin=None, stdout=None, stderr=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200710 preexec_fn=None, close_fds=True,
andyclegg7fed7bd2017-10-23 03:01:19 +0100711 shell=False, cwd=None, env=None, universal_newlines=None,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000712 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000713 restore_signals=True, start_new_session=False,
andyclegg7fed7bd2017-10-23 03:01:19 +0100714 pass_fds=(), *, encoding=None, errors=None, text=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000715 """Create new Popen instance."""
716 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700717 # Held while anything is calling waitpid before returncode has been
718 # updated to prevent clobbering returncode if wait() or poll() are
719 # called from multiple threads at once. After acquiring the lock,
720 # code must re-check self.returncode to see if another thread just
721 # finished a waitpid() call.
722 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000723
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400724 self._input = None
725 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000726 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700727 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000728 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000729 raise TypeError("bufsize must be an integer")
730
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700731 if _mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000732 if preexec_fn is not None:
733 raise ValueError("preexec_fn is not supported on Windows "
734 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000735 else:
736 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000737 if pass_fds and not close_fds:
738 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
739 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000740 if startupinfo is not None:
741 raise ValueError("startupinfo is only supported on Windows "
742 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000743 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000744 raise ValueError("creationflags is only supported on Windows "
745 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000746
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400747 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000748 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000749 self.stdout = None
750 self.stderr = None
751 self.pid = None
752 self.returncode = None
Steve Dower050acae2016-09-06 20:16:17 -0700753 self.encoding = encoding
754 self.errors = errors
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000755
andyclegg7fed7bd2017-10-23 03:01:19 +0100756 # Validate the combinations of text and universal_newlines
757 if (text is not None and universal_newlines is not None
758 and bool(universal_newlines) != bool(text)):
759 raise SubprocessError('Cannot disambiguate when both text '
760 'and universal_newlines are supplied but '
761 'different. Pass one or the other.')
762
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000763 # Input and output objects. The general principle is like
764 # this:
765 #
766 # Parent Child
767 # ------ -----
768 # p2cwrite ---stdin---> p2cread
769 # c2pread <--stdout--- c2pwrite
770 # errread <--stderr--- errwrite
771 #
772 # On POSIX, the child objects are file descriptors. On
773 # Windows, these are Windows file handles. The parent objects
774 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000775 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000776 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000777
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000778 (p2cread, p2cwrite,
779 c2pread, c2pwrite,
780 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
781
Antoine Pitrouc9982322011-01-04 19:07:07 +0000782 # We wrap OS handles *before* launching the child, otherwise a
783 # quickly terminating child could make our fds unwrappable
784 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000785
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700786 if _mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000787 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000788 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000789 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000790 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000791 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000792 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000793
andyclegg7fed7bd2017-10-23 03:01:19 +0100794 self.text_mode = encoding or errors or text or universal_newlines
Tim Peterse718f612004-10-12 21:51:32 +0000795
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800796 # How long to resume waiting on a child after the first ^C.
797 # There is no right value for this. The purpose is to be polite
798 # yet remain good for interactive users trying to exit a tool.
799 self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber()
800
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700801 self._closed_child_pipe_fds = False
Steve Dower050acae2016-09-06 20:16:17 -0700802
Alexey Izbysheva2670562018-10-20 03:22:31 +0300803 if self.text_mode:
804 if bufsize == 1:
805 line_buffering = True
806 # Use the default buffer size for the underlying binary streams
807 # since they don't support line buffering.
808 bufsize = -1
809 else:
810 line_buffering = False
811
Antoine Pitrouc9982322011-01-04 19:07:07 +0000812 try:
Steve Dower050acae2016-09-06 20:16:17 -0700813 if p2cwrite != -1:
814 self.stdin = io.open(p2cwrite, 'wb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100815 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700816 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
Alexey Izbysheva2670562018-10-20 03:22:31 +0300817 line_buffering=line_buffering,
Steve Dower050acae2016-09-06 20:16:17 -0700818 encoding=encoding, errors=errors)
819 if c2pread != -1:
820 self.stdout = io.open(c2pread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100821 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700822 self.stdout = io.TextIOWrapper(self.stdout,
823 encoding=encoding, errors=errors)
824 if errread != -1:
825 self.stderr = io.open(errread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100826 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700827 self.stderr = io.TextIOWrapper(self.stderr,
828 encoding=encoding, errors=errors)
829
Antoine Pitrouc9982322011-01-04 19:07:07 +0000830 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300831 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000832 startupinfo, creationflags, shell,
833 p2cread, p2cwrite,
834 c2pread, c2pwrite,
835 errread, errwrite,
836 restore_signals, start_new_session)
837 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800838 # Cleanup if the child failed starting.
839 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000840 try:
841 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200842 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800843 pass # Ignore EBADF or other errors.
844
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700845 if not self._closed_child_pipe_fds:
846 to_close = []
847 if stdin == PIPE:
848 to_close.append(p2cread)
849 if stdout == PIPE:
850 to_close.append(c2pwrite)
851 if stderr == PIPE:
852 to_close.append(errwrite)
853 if hasattr(self, '_devnull'):
854 to_close.append(self._devnull)
855 for fd in to_close:
856 try:
Segev Finer4d385172017-08-18 16:18:13 +0300857 if _mswindows and isinstance(fd, Handle):
858 fd.Close()
859 else:
860 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700861 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700862 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800863
Antoine Pitrouc9982322011-01-04 19:07:07 +0000864 raise
865
andyclegg7fed7bd2017-10-23 03:01:19 +0100866 @property
867 def universal_newlines(self):
868 # universal_newlines as retained as an alias of text_mode for API
luzpaza5293b42017-11-05 07:37:50 -0600869 # compatibility. bpo-31756
andyclegg7fed7bd2017-10-23 03:01:19 +0100870 return self.text_mode
871
872 @universal_newlines.setter
873 def universal_newlines(self, universal_newlines):
874 self.text_mode = bool(universal_newlines)
875
Steve Dower050acae2016-09-06 20:16:17 -0700876 def _translate_newlines(self, data, encoding, errors):
877 data = data.decode(encoding, errors)
Andrew Svetlov82860712012-08-19 22:13:41 +0300878 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000879
Brian Curtin79cdb662010-12-03 02:46:02 +0000880 def __enter__(self):
881 return self
882
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800883 def __exit__(self, exc_type, value, traceback):
Brian Curtin79cdb662010-12-03 02:46:02 +0000884 if self.stdout:
885 self.stdout.close()
886 if self.stderr:
887 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200888 try: # Flushing a BufferedWriter may raise an error
889 if self.stdin:
890 self.stdin.close()
891 finally:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800892 if exc_type == KeyboardInterrupt:
893 # https://bugs.python.org/issue25942
894 # In the case of a KeyboardInterrupt we assume the SIGINT
895 # was also already sent to our child processes. We can't
896 # block indefinitely as that is not user friendly.
897 # If we have not already waited a brief amount of time in
898 # an interrupted .wait() or .communicate() call, do so here
899 # for consistency.
900 if self._sigint_wait_secs > 0:
901 try:
902 self._wait(timeout=self._sigint_wait_secs)
903 except TimeoutExpired:
904 pass
905 self._sigint_wait_secs = 0 # Note that this has been done.
906 return # resume the KeyboardInterrupt
907
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200908 # Wait for the process to terminate, to avoid zombies.
909 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000910
Victor Stinner9505b032017-01-06 10:44:44 +0100911 def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200912 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000913 # We didn't get to successfully create a child process.
914 return
Victor Stinner5a48e212016-05-20 12:11:15 +0200915 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800916 # Not reading subprocess exit status creates a zombie process which
Victor Stinnerc206f1e2016-06-14 16:42:59 +0200917 # is only destroyed at the parent python process exit
Victor Stinner9505b032017-01-06 10:44:44 +0100918 _warn("subprocess %s is still running" % self.pid,
919 ResourceWarning, source=self)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000920 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000921 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000922 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000923 # Child is still running, keep us alive until we can wait on it.
924 _active.append(self)
925
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200926 def _get_devnull(self):
927 if not hasattr(self, '_devnull'):
928 self._devnull = os.open(os.devnull, os.O_RDWR)
929 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000930
Victor Stinnera5e881d2015-01-14 17:07:59 +0100931 def _stdin_write(self, input):
932 if input:
933 try:
934 self.stdin.write(input)
935 except BrokenPipeError:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000936 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200937 except OSError as exc:
938 if exc.errno == errno.EINVAL:
939 # bpo-19612, bpo-30418: On Windows, stdin.write() fails
940 # with EINVAL if the child process exited or if the child
941 # process is still running but closed the pipe.
Victor Stinnera5e881d2015-01-14 17:07:59 +0100942 pass
943 else:
944 raise
Victor Stinnerd52aa312017-06-08 17:30:39 +0200945
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000946 try:
947 self.stdin.close()
948 except BrokenPipeError:
949 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200950 except OSError as exc:
951 if exc.errno == errno.EINVAL:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000952 pass
953 else:
954 raise
Victor Stinnera5e881d2015-01-14 17:07:59 +0100955
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400956 def communicate(self, input=None, timeout=None):
Joel Schaerer88031a92017-09-13 21:11:20 +0200957 """Interact with process: Send data to stdin and close it.
958 Read data from stdout and stderr, until end-of-file is
959 reached. Wait for process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +0000960
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400961 The optional "input" argument should be data to be sent to the
andyclegg7fed7bd2017-10-23 03:01:19 +0100962 child process, or None, if no data should be sent to the child.
963 communicate() returns a tuple (stdout, stderr).
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400964
andyclegg7fed7bd2017-10-23 03:01:19 +0100965 By default, all communication is in bytes, and therefore any
966 "input" should be bytes, and the (stdout, stderr) will be bytes.
967 If in text mode (indicated by self.text_mode), any "input" should
968 be a string, and (stdout, stderr) will be strings decoded
969 according to locale encoding, or by "encoding" if set. Text mode
970 is triggered by setting any of text, encoding, errors or
971 universal_newlines.
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400972 """
Peter Astrand23109f02005-03-03 20:28:59 +0000973
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400974 if self._communication_started and input:
975 raise ValueError("Cannot send input after starting communication")
976
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400977 # Optimization: If we are not worried about timeouts, we haven't
978 # started communicating, and we have one or zero pipes, using select()
979 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200980 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400981 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000982 stdout = None
983 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000984 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +0100985 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +0000986 elif self.stdout:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000987 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000988 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000989 elif self.stderr:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000990 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000991 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000992 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200993 else:
994 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +0200995 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +0200996 else:
997 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000998
Victor Stinner7a8d0812011-04-05 13:13:08 +0200999 try:
1000 stdout, stderr = self._communicate(input, endtime, timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001001 except KeyboardInterrupt:
1002 # https://bugs.python.org/issue25942
1003 # See the detailed comment in .wait().
1004 if timeout is not None:
1005 sigint_timeout = min(self._sigint_wait_secs,
1006 self._remaining_time(endtime))
1007 else:
1008 sigint_timeout = self._sigint_wait_secs
1009 self._sigint_wait_secs = 0 # nothing else should wait.
1010 try:
1011 self._wait(timeout=sigint_timeout)
1012 except TimeoutExpired:
1013 pass
1014 raise # resume the KeyboardInterrupt
1015
Victor Stinner7a8d0812011-04-05 13:13:08 +02001016 finally:
1017 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001018
Victor Stinner7a8d0812011-04-05 13:13:08 +02001019 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001020
1021 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +00001022
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001023
Georg Brandl6aa2d1f2008-08-12 08:35:52 +00001024 def poll(self):
Martin Panter4afdca02016-10-25 22:20:48 +00001025 """Check if child process has terminated. Set and return returncode
1026 attribute."""
Georg Brandl6aa2d1f2008-08-12 08:35:52 +00001027 return self._internal_poll()
1028
1029
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001030 def _remaining_time(self, endtime):
1031 """Convenience for _communicate when computing timeouts."""
1032 if endtime is None:
1033 return None
1034 else:
Victor Stinner949d8c92012-05-30 13:30:32 +02001035 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001036
1037
Reid Kleckner2b228f02011-03-16 16:57:54 -04001038 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001039 """Convenience for checking if a timeout has expired."""
1040 if endtime is None:
1041 return
Victor Stinner949d8c92012-05-30 13:30:32 +02001042 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001043 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001044
1045
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001046 def wait(self, timeout=None):
1047 """Wait for child process to terminate; returns self.returncode."""
1048 if timeout is not None:
1049 endtime = _time() + timeout
1050 try:
1051 return self._wait(timeout=timeout)
1052 except KeyboardInterrupt:
1053 # https://bugs.python.org/issue25942
1054 # The first keyboard interrupt waits briefly for the child to
1055 # exit under the common assumption that it also received the ^C
1056 # generated SIGINT and will exit rapidly.
1057 if timeout is not None:
1058 sigint_timeout = min(self._sigint_wait_secs,
1059 self._remaining_time(endtime))
1060 else:
1061 sigint_timeout = self._sigint_wait_secs
1062 self._sigint_wait_secs = 0 # nothing else should wait.
1063 try:
1064 self._wait(timeout=sigint_timeout)
1065 except TimeoutExpired:
1066 pass
1067 raise # resume the KeyboardInterrupt
1068
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001069 def _close_pipe_fds(self,
1070 p2cread, p2cwrite,
1071 c2pread, c2pwrite,
1072 errread, errwrite):
1073 # self._devnull is not always defined.
1074 devnull_fd = getattr(self, '_devnull', None)
1075
Giampaolo Rodolabafa8482019-01-29 22:14:24 +01001076 with contextlib.ExitStack() as stack:
1077 if _mswindows:
1078 if p2cread != -1:
1079 stack.callback(p2cread.Close)
1080 if c2pwrite != -1:
1081 stack.callback(c2pwrite.Close)
1082 if errwrite != -1:
1083 stack.callback(errwrite.Close)
1084 else:
1085 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
1086 stack.callback(os.close, p2cread)
1087 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
1088 stack.callback(os.close, c2pwrite)
1089 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
1090 stack.callback(os.close, errwrite)
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001091
Giampaolo Rodolabafa8482019-01-29 22:14:24 +01001092 if devnull_fd is not None:
1093 stack.callback(os.close, devnull_fd)
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001094
1095 # Prevent a double close of these handles/fds from __init__ on error.
1096 self._closed_child_pipe_fds = True
1097
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -07001098 if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001099 #
1100 # Windows methods
1101 #
1102 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001103 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001104 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1105 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001106 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001107 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +00001108
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001109 p2cread, p2cwrite = -1, -1
1110 c2pread, c2pwrite = -1, -1
1111 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001112
Peter Astrandd38ddf42005-02-10 08:32:50 +00001113 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001114 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001115 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001116 p2cread, _ = _winapi.CreatePipe(None, 0)
1117 p2cread = Handle(p2cread)
1118 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001119 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001120 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
1121 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001122 elif stdin == DEVNULL:
1123 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001124 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001125 p2cread = msvcrt.get_osfhandle(stdin)
1126 else:
1127 # Assuming file-like object
1128 p2cread = msvcrt.get_osfhandle(stdin.fileno())
1129 p2cread = self._make_inheritable(p2cread)
1130
Peter Astrandd38ddf42005-02-10 08:32:50 +00001131 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001132 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001133 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001134 _, c2pwrite = _winapi.CreatePipe(None, 0)
1135 c2pwrite = Handle(c2pwrite)
1136 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001137 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001138 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
1139 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001140 elif stdout == DEVNULL:
1141 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001142 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001143 c2pwrite = msvcrt.get_osfhandle(stdout)
1144 else:
1145 # Assuming file-like object
1146 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1147 c2pwrite = self._make_inheritable(c2pwrite)
1148
Peter Astrandd38ddf42005-02-10 08:32:50 +00001149 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001150 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001151 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001152 _, errwrite = _winapi.CreatePipe(None, 0)
1153 errwrite = Handle(errwrite)
1154 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001155 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001156 errread, errwrite = _winapi.CreatePipe(None, 0)
1157 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001158 elif stderr == STDOUT:
1159 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001160 elif stderr == DEVNULL:
1161 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001162 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001163 errwrite = msvcrt.get_osfhandle(stderr)
1164 else:
1165 # Assuming file-like object
1166 errwrite = msvcrt.get_osfhandle(stderr.fileno())
1167 errwrite = self._make_inheritable(errwrite)
1168
1169 return (p2cread, p2cwrite,
1170 c2pread, c2pwrite,
1171 errread, errwrite)
1172
1173
1174 def _make_inheritable(self, handle):
1175 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001176 h = _winapi.DuplicateHandle(
1177 _winapi.GetCurrentProcess(), handle,
1178 _winapi.GetCurrentProcess(), 0, 1,
1179 _winapi.DUPLICATE_SAME_ACCESS)
1180 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001181
1182
Segev Finerb2a60832017-12-18 11:28:19 +02001183 def _filter_handle_list(self, handle_list):
1184 """Filter out console handles that can't be used
1185 in lpAttributeList["handle_list"] and make sure the list
1186 isn't empty. This also removes duplicate handles."""
1187 # An handle with it's lowest two bits set might be a special console
1188 # handle that if passed in lpAttributeList["handle_list"], will
1189 # cause it to fail.
1190 return list({handle for handle in handle_list
1191 if handle & 0x3 != 0x3
1192 or _winapi.GetFileType(handle) !=
1193 _winapi.FILE_TYPE_CHAR})
1194
1195
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001196 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001197 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001198 startupinfo, creationflags, shell,
1199 p2cread, p2cwrite,
1200 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001201 errread, errwrite,
1202 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001203 """Execute program (MS Windows version)"""
1204
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001205 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001206
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001207 if not isinstance(args, str):
Serhiy Storchakabe50a7b2018-02-28 01:03:46 +02001208 args = list2cmdline(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001209
Peter Astrandc1d65362004-11-07 14:30:34 +00001210 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001211 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001212 startupinfo = STARTUPINFO()
Victor Stinner483422f2018-07-05 22:54:17 +02001213 else:
1214 # bpo-34044: Copy STARTUPINFO since it is modified above,
1215 # so the caller can reuse it multiple times.
1216 startupinfo = startupinfo.copy()
Segev Finerb2a60832017-12-18 11:28:19 +02001217
1218 use_std_handles = -1 not in (p2cread, c2pwrite, errwrite)
1219 if use_std_handles:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001220 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001221 startupinfo.hStdInput = p2cread
1222 startupinfo.hStdOutput = c2pwrite
1223 startupinfo.hStdError = errwrite
1224
Segev Finerb2a60832017-12-18 11:28:19 +02001225 attribute_list = startupinfo.lpAttributeList
1226 have_handle_list = bool(attribute_list and
1227 "handle_list" in attribute_list and
1228 attribute_list["handle_list"])
1229
1230 # If we were given an handle_list or need to create one
1231 if have_handle_list or (use_std_handles and close_fds):
1232 if attribute_list is None:
1233 attribute_list = startupinfo.lpAttributeList = {}
1234 handle_list = attribute_list["handle_list"] = \
1235 list(attribute_list.get("handle_list", []))
1236
1237 if use_std_handles:
1238 handle_list += [int(p2cread), int(c2pwrite), int(errwrite)]
1239
1240 handle_list[:] = self._filter_handle_list(handle_list)
1241
1242 if handle_list:
1243 if not close_fds:
1244 warnings.warn("startupinfo.lpAttributeList['handle_list'] "
1245 "overriding close_fds", RuntimeWarning)
1246
1247 # When using the handle_list we always request to inherit
1248 # handles but the only handles that will be inherited are
1249 # the ones in the handle_list
1250 close_fds = False
1251
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001252 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001253 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1254 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001255 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001256 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001257
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001258 # Start the process
1259 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001260 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001261 # no special security
1262 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001263 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001264 creationflags,
1265 env,
Benjamin Petersoncb90f262017-03-02 00:03:41 -08001266 os.fspath(cwd) if cwd is not None else None,
Tim Peterse8374a52004-10-13 03:15:00 +00001267 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001268 finally:
1269 # Child is launched. Close the parent's copy of those pipe
1270 # handles that only the child should have open. You need
1271 # to make sure that no handles to the write end of the
1272 # output pipe are maintained in this process or else the
1273 # pipe will not close when the child process exits and the
1274 # ReadFile will hang.
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001275 self._close_pipe_fds(p2cread, p2cwrite,
1276 c2pread, c2pwrite,
1277 errread, errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001278
1279 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001280 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001281 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001282 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001283 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001284
Brett Cannon84df1e62010-05-14 00:33:40 +00001285 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001286 _WaitForSingleObject=_winapi.WaitForSingleObject,
1287 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1288 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001289 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001290 attribute.
1291
1292 This method is called by __del__, so it can only refer to objects
1293 in its local scope.
1294
1295 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001296 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001297 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1298 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001299 return self.returncode
1300
1301
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001302 def _wait(self, timeout):
1303 """Internal implementation of wait() on Windows."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001304 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001305 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001306 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001307 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001308 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001309 # API note: Returns immediately if timeout_millis == 0.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001310 result = _winapi.WaitForSingleObject(self._handle,
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001311 timeout_millis)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001312 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001313 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001314 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001315 return self.returncode
1316
1317
1318 def _readerthread(self, fh, buffer):
1319 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001320 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001321
1322
Reid Kleckner2b228f02011-03-16 16:57:54 -04001323 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001324 # Start reader threads feeding into a list hanging off of this
1325 # object, unless they've already been started.
1326 if self.stdout and not hasattr(self, "_stdout_buff"):
1327 self._stdout_buff = []
1328 self.stdout_thread = \
1329 threading.Thread(target=self._readerthread,
1330 args=(self.stdout, self._stdout_buff))
1331 self.stdout_thread.daemon = True
1332 self.stdout_thread.start()
1333 if self.stderr and not hasattr(self, "_stderr_buff"):
1334 self._stderr_buff = []
1335 self.stderr_thread = \
1336 threading.Thread(target=self._readerthread,
1337 args=(self.stderr, self._stderr_buff))
1338 self.stderr_thread.daemon = True
1339 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001340
1341 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001342 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001343
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001344 # Wait for the reader threads, or time out. If we time out, the
1345 # threads remain reading and the fds left open in case the user
1346 # calls communicate again.
1347 if self.stdout is not None:
1348 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001349 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001350 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001351 if self.stderr is not None:
1352 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001353 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001354 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001355
1356 # Collect the output from and close both pipes, now that we know
1357 # both have been read successfully.
1358 stdout = None
1359 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001360 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001361 stdout = self._stdout_buff
1362 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001363 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001364 stderr = self._stderr_buff
1365 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001366
1367 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001368 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001369 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001370 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001371 stderr = stderr[0]
1372
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001373 return (stdout, stderr)
1374
Christian Heimesa342c012008-04-20 21:01:16 +00001375 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001376 """Send a signal to the process."""
1377 # Don't signal a process that we know has already died.
1378 if self.returncode is not None:
1379 return
Christian Heimesa342c012008-04-20 21:01:16 +00001380 if sig == signal.SIGTERM:
1381 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001382 elif sig == signal.CTRL_C_EVENT:
1383 os.kill(self.pid, signal.CTRL_C_EVENT)
1384 elif sig == signal.CTRL_BREAK_EVENT:
1385 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001386 else:
Brian Curtin19651362010-09-07 13:24:38 +00001387 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001388
1389 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001390 """Terminates the process."""
1391 # Don't terminate a process that we know has already died.
1392 if self.returncode is not None:
1393 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001394 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001395 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001396 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001397 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1398 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001399 rc = _winapi.GetExitCodeProcess(self._handle)
1400 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001401 raise
1402 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001403
1404 kill = terminate
1405
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001406 else:
1407 #
1408 # POSIX methods
1409 #
1410 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001411 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001412 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1413 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001414 p2cread, p2cwrite = -1, -1
1415 c2pread, c2pwrite = -1, -1
1416 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001417
Peter Astrandd38ddf42005-02-10 08:32:50 +00001418 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001419 pass
1420 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001421 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001422 elif stdin == DEVNULL:
1423 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001424 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001425 p2cread = stdin
1426 else:
1427 # Assuming file-like object
1428 p2cread = stdin.fileno()
1429
Peter Astrandd38ddf42005-02-10 08:32:50 +00001430 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001431 pass
1432 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001433 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001434 elif stdout == DEVNULL:
1435 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001436 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001437 c2pwrite = stdout
1438 else:
1439 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001440 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001441
Peter Astrandd38ddf42005-02-10 08:32:50 +00001442 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001443 pass
1444 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001445 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001446 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001447 if c2pwrite != -1:
1448 errwrite = c2pwrite
1449 else: # child's stdout is not set, use parent's stdout
1450 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001451 elif stderr == DEVNULL:
1452 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001453 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001454 errwrite = stderr
1455 else:
1456 # Assuming file-like object
1457 errwrite = stderr.fileno()
1458
1459 return (p2cread, p2cwrite,
1460 c2pread, c2pwrite,
1461 errread, errwrite)
1462
1463
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001464 def _posix_spawn(self, args, executable, env, restore_signals,
1465 p2cread, p2cwrite,
1466 c2pread, c2pwrite,
1467 errread, errwrite):
Victor Stinner8c349562019-01-16 23:38:06 +01001468 """Execute program using os.posix_spawn()."""
Victor Stinner9daecf32019-01-16 00:02:35 +01001469 if env is None:
1470 env = os.environ
1471
1472 kwargs = {}
1473 if restore_signals:
1474 # See _Py_RestoreSignals() in Python/pylifecycle.c
1475 sigset = []
1476 for signame in ('SIGPIPE', 'SIGXFZ', 'SIGXFSZ'):
1477 signum = getattr(signal, signame, None)
1478 if signum is not None:
1479 sigset.append(signum)
1480 kwargs['setsigdef'] = sigset
1481
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001482 file_actions = []
1483 for fd in (p2cwrite, c2pread, errread):
1484 if fd != -1:
1485 file_actions.append((os.POSIX_SPAWN_CLOSE, fd))
1486 for fd, fd2 in (
1487 (p2cread, 0),
1488 (c2pwrite, 1),
1489 (errwrite, 2),
1490 ):
1491 if fd != -1:
1492 file_actions.append((os.POSIX_SPAWN_DUP2, fd, fd2))
1493 if file_actions:
1494 kwargs['file_actions'] = file_actions
1495
Victor Stinner8c349562019-01-16 23:38:06 +01001496 self.pid = os.posix_spawn(executable, args, env, **kwargs)
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001497 self._child_created = True
1498
1499 self._close_pipe_fds(p2cread, p2cwrite,
1500 c2pread, c2pwrite,
1501 errread, errwrite)
Victor Stinner9daecf32019-01-16 00:02:35 +01001502
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001503 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001504 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001505 startupinfo, creationflags, shell,
1506 p2cread, p2cwrite,
1507 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001508 errread, errwrite,
1509 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001510 """Execute program (POSIX version)"""
1511
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001512 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001513 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001514 else:
Serhiy Storchakabe50a7b2018-02-28 01:03:46 +02001515 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001516
1517 if shell:
Xavier de Gayeb35fc622016-12-13 16:32:21 +01001518 # On Android the default shell is at '/system/bin/sh'.
1519 unix_shell = ('/system/bin/sh' if
1520 hasattr(sys, 'getandroidapilevel') else '/bin/sh')
1521 args = [unix_shell, "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001522 if executable:
1523 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001524
Peter Astrandd38ddf42005-02-10 08:32:50 +00001525 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001526 executable = args[0]
Victor Stinner9daecf32019-01-16 00:02:35 +01001527
1528 if (_USE_POSIX_SPAWN
Victor Stinner8c349562019-01-16 23:38:06 +01001529 and os.path.dirname(executable)
Victor Stinner9daecf32019-01-16 00:02:35 +01001530 and preexec_fn is None
1531 and not close_fds
1532 and not pass_fds
1533 and cwd is None
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001534 and (p2cread == -1 or p2cread > 2)
1535 and (c2pwrite == -1 or c2pwrite > 2)
1536 and (errwrite == -1 or errwrite > 2)
Victor Stinner9daecf32019-01-16 00:02:35 +01001537 and not start_new_session):
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001538 self._posix_spawn(args, executable, env, restore_signals,
1539 p2cread, p2cwrite,
1540 c2pread, c2pwrite,
1541 errread, errwrite)
Victor Stinner9daecf32019-01-16 00:02:35 +01001542 return
1543
Gregory P. Smith5591b022012-10-10 03:34:47 -07001544 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001545
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001546 # For transferring possible exec failure from child to parent.
1547 # Data format: "exception name:hex errno:description"
1548 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001549 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001550 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1551 low_fds_to_close = []
1552 while errpipe_write < 3:
1553 low_fds_to_close.append(errpipe_write)
1554 errpipe_write = os.dup(errpipe_write)
1555 for low_fd in low_fds_to_close:
1556 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001557 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001558 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001559 # We must avoid complex work that could involve
1560 # malloc or free in the child process to avoid
1561 # potential deadlocks, thus we do all this here.
1562 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001563
Victor Stinner372b8382011-06-21 17:24:21 +02001564 if env is not None:
Serhiy Storchakad174d242017-06-23 19:39:27 +03001565 env_list = []
1566 for k, v in env.items():
1567 k = os.fsencode(k)
1568 if b'=' in k:
1569 raise ValueError("illegal environment variable name")
1570 env_list.append(k + b'=' + os.fsencode(v))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001571 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001572 env_list = None # Use execv instead of execve.
1573 executable = os.fsencode(executable)
1574 if os.path.dirname(executable):
1575 executable_list = (executable,)
1576 else:
1577 # This matches the behavior of os._execvpe().
1578 executable_list = tuple(
1579 os.path.join(os.fsencode(dir), executable)
1580 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001581 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001582 fds_to_keep.add(errpipe_write)
1583 self.pid = _posixsubprocess.fork_exec(
1584 args, executable_list,
Serhiy Storchaka66bffd12017-04-19 21:12:46 +03001585 close_fds, tuple(sorted(map(int, fds_to_keep))),
1586 cwd, env_list,
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001587 p2cread, p2cwrite, c2pread, c2pwrite,
1588 errread, errwrite,
1589 errpipe_read, errpipe_write,
1590 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001591 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001592 finally:
1593 # be sure the FD is closed no matter what
1594 os.close(errpipe_write)
1595
Victor Stinnerf6243ac2019-01-23 19:00:39 +01001596 self._close_pipe_fds(p2cread, p2cwrite,
1597 c2pread, c2pwrite,
1598 errread, errwrite)
Facundo Batista10706e22009-06-19 20:34:30 +00001599
1600 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001601 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001602 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001603 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001604 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001605 errpipe_data += part
1606 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001607 break
Facundo Batista10706e22009-06-19 20:34:30 +00001608 finally:
1609 # be sure the FD is closed no matter what
1610 os.close(errpipe_read)
1611
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001612 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001613 try:
Victor Stinnera58e2c52016-05-20 12:08:12 +02001614 pid, sts = os.waitpid(self.pid, 0)
1615 if pid == self.pid:
1616 self._handle_exitstatus(sts)
1617 else:
1618 self.returncode = sys.maxsize
Victor Stinnera5e881d2015-01-14 17:07:59 +01001619 except ChildProcessError:
1620 pass
Victor Stinnera58e2c52016-05-20 12:08:12 +02001621
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001622 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001623 exception_name, hex_errno, err_msg = (
1624 errpipe_data.split(b':', 2))
Ammar Askar3fc499b2017-09-06 02:41:30 -04001625 # The encoding here should match the encoding
1626 # written in by the subprocess implementations
1627 # like _posixsubprocess
1628 err_msg = err_msg.decode()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001629 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001630 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001631 hex_errno = b'0'
Ammar Askar3fc499b2017-09-06 02:41:30 -04001632 err_msg = 'Bad exception data from child: {!r}'.format(
1633 bytes(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001634 child_exception_type = getattr(
1635 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001636 SubprocessError)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001637 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001638 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001639 child_exec_never_called = (err_msg == "noexec")
1640 if child_exec_never_called:
1641 err_msg = ""
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001642 # The error must be from chdir(cwd).
1643 err_filename = cwd
1644 else:
1645 err_filename = orig_executable
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001646 if errno_num != 0:
1647 err_msg = os.strerror(errno_num)
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001648 raise child_exception_type(errno_num, err_msg, err_filename)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001649 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001650
1651
Brett Cannon84df1e62010-05-14 00:33:40 +00001652 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1653 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001654 _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
1655 _WSTOPSIG=os.WSTOPSIG):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001656 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001657 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001658 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001659 if _WIFSIGNALED(sts):
1660 self.returncode = -_WTERMSIG(sts)
1661 elif _WIFEXITED(sts):
1662 self.returncode = _WEXITSTATUS(sts)
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001663 elif _WIFSTOPPED(sts):
1664 self.returncode = -_WSTOPSIG(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001665 else:
1666 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001667 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001668
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001669
Brett Cannon84df1e62010-05-14 00:33:40 +00001670 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001671 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001672 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001673 attribute.
1674
1675 This method is called by __del__, so it cannot reference anything
1676 outside of the local scope (nor can any methods it calls).
1677
1678 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001679 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001680 if not self._waitpid_lock.acquire(False):
1681 # Something else is busy calling waitpid. Don't allow two
1682 # at once. We know nothing yet.
1683 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001684 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001685 if self.returncode is not None:
1686 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001687 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001688 if pid == self.pid:
1689 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001690 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001691 if _deadstate is not None:
1692 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001693 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001694 # This happens if SIGCLD is set to be ignored or
1695 # waiting for child processes has otherwise been
1696 # disabled for our process. This child is dead, we
1697 # can't get the status.
1698 # http://bugs.python.org/issue15756
1699 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001700 finally:
1701 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001702 return self.returncode
1703
1704
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001705 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001706 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001707 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001708 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001709 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001710 # This happens if SIGCLD is set to be ignored or waiting
1711 # for child processes has otherwise been disabled for our
1712 # process. This child is dead, we can't get the status.
1713 pid = self.pid
1714 sts = 0
1715 return (pid, sts)
1716
1717
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001718 def _wait(self, timeout):
1719 """Internal implementation of wait() on POSIX."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001720 if self.returncode is not None:
1721 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001722
Gregory P. Smith82604e02016-11-20 16:31:07 -08001723 if timeout is not None:
1724 endtime = _time() + timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001725 # Enter a busy loop if we have a timeout. This busy loop was
1726 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1727 delay = 0.0005 # 500 us -> initial delay of 1 ms
1728 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001729 if self._waitpid_lock.acquire(False):
1730 try:
1731 if self.returncode is not None:
1732 break # Another thread waited.
1733 (pid, sts) = self._try_wait(os.WNOHANG)
1734 assert pid == self.pid or pid == 0
1735 if pid == self.pid:
1736 self._handle_exitstatus(sts)
1737 break
1738 finally:
1739 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001740 remaining = self._remaining_time(endtime)
1741 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001742 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001743 delay = min(delay * 2, remaining, .05)
1744 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001745 else:
1746 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001747 with self._waitpid_lock:
1748 if self.returncode is not None:
1749 break # Another thread waited.
1750 (pid, sts) = self._try_wait(0)
1751 # Check the pid and loop as waitpid has been known to
1752 # return 0 even without WNOHANG in odd situations.
1753 # http://bugs.python.org/issue14396.
1754 if pid == self.pid:
1755 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001756 return self.returncode
1757
1758
Reid Kleckner2b228f02011-03-16 16:57:54 -04001759 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001760 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001761 # Flush stdio buffer. This might block, if the user has
1762 # been writing to .stdin in an uncontrolled fashion.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001763 try:
1764 self.stdin.flush()
1765 except BrokenPipeError:
1766 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001767 if not input:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001768 try:
1769 self.stdin.close()
1770 except BrokenPipeError:
1771 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001772
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001773 stdout = None
1774 stderr = None
1775
1776 # Only create this mapping if we haven't already.
1777 if not self._communication_started:
1778 self._fileobj2output = {}
1779 if self.stdout:
1780 self._fileobj2output[self.stdout] = []
1781 if self.stderr:
1782 self._fileobj2output[self.stderr] = []
1783
1784 if self.stdout:
1785 stdout = self._fileobj2output[self.stdout]
1786 if self.stderr:
1787 stderr = self._fileobj2output[self.stderr]
1788
1789 self._save_input(input)
1790
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001791 if self._input:
1792 input_view = memoryview(self._input)
1793
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001794 with _PopenSelector() as selector:
1795 if self.stdin and input:
1796 selector.register(self.stdin, selectors.EVENT_WRITE)
1797 if self.stdout:
1798 selector.register(self.stdout, selectors.EVENT_READ)
1799 if self.stderr:
1800 selector.register(self.stderr, selectors.EVENT_READ)
1801
1802 while selector.get_map():
1803 timeout = self._remaining_time(endtime)
1804 if timeout is not None and timeout < 0:
1805 raise TimeoutExpired(self.args, orig_timeout)
1806
1807 ready = selector.select(timeout)
1808 self._check_timeout(endtime, orig_timeout)
1809
1810 # XXX Rewrite these to use non-blocking I/O on the file
1811 # objects; they are no longer using C stdio!
1812
1813 for key, events in ready:
1814 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001815 chunk = input_view[self._input_offset :
1816 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001817 try:
1818 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001819 except BrokenPipeError:
1820 selector.unregister(key.fileobj)
1821 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001822 else:
1823 if self._input_offset >= len(self._input):
1824 selector.unregister(key.fileobj)
1825 key.fileobj.close()
1826 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001827 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001828 if not data:
1829 selector.unregister(key.fileobj)
1830 key.fileobj.close()
1831 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001832
1833 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001834
1835 # All data exchanged. Translate lists into strings.
1836 if stdout is not None:
1837 stdout = b''.join(stdout)
1838 if stderr is not None:
1839 stderr = b''.join(stderr)
1840
1841 # Translate newlines, if requested.
1842 # This also turns bytes into strings.
andyclegg7fed7bd2017-10-23 03:01:19 +01001843 if self.text_mode:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001844 if stdout is not None:
1845 stdout = self._translate_newlines(stdout,
Steve Dower050acae2016-09-06 20:16:17 -07001846 self.stdout.encoding,
1847 self.stdout.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001848 if stderr is not None:
1849 stderr = self._translate_newlines(stderr,
Steve Dower050acae2016-09-06 20:16:17 -07001850 self.stderr.encoding,
1851 self.stderr.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001852
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001853 return (stdout, stderr)
1854
1855
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001856 def _save_input(self, input):
1857 # This method is called from the _communicate_with_*() methods
1858 # so that if we time out while communicating, we can continue
1859 # sending input if we retry.
1860 if self.stdin and self._input is None:
1861 self._input_offset = 0
1862 self._input = input
andyclegg7fed7bd2017-10-23 03:01:19 +01001863 if input is not None and self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -07001864 self._input = self._input.encode(self.stdin.encoding,
1865 self.stdin.errors)
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001866
1867
Christian Heimesa342c012008-04-20 21:01:16 +00001868 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001869 """Send a signal to the process."""
1870 # Skip signalling a process that we know has already died.
1871 if self.returncode is None:
1872 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00001873
1874 def terminate(self):
1875 """Terminate the process with SIGTERM
1876 """
1877 self.send_signal(signal.SIGTERM)
1878
1879 def kill(self):
1880 """Kill the process with SIGKILL
1881 """
1882 self.send_signal(signal.SIGKILL)