blob: 3c1abb74c26da77404bcb68dcd35690ae24cb962 [file] [log] [blame]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001# subprocess - Subprocesses with accessible I/O streams
2#
Tim Peterse718f612004-10-12 21:51:32 +00003# For more information about this module, see PEP 324.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00004#
Peter Astrand3a708df2005-09-23 17:37:29 +00005# Copyright (c) 2003-2005 by Peter Astrand <astrand@lysator.liu.se>
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00006#
Peter Astrand69bf13f2005-02-14 08:56:32 +00007# Licensed to PSF under a Contributor Agreement.
Peter Astrand3a708df2005-09-23 17:37:29 +00008# See http://www.python.org/2.4/license for licensing details.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00009
Martin Panter4afdca02016-10-25 22:20:48 +000010r"""Subprocesses with accessible I/O streams
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000011
Fredrik Lundh15aaacc2004-10-17 14:47:05 +000012This module allows you to spawn processes, connect to their
Martin Panter4afdca02016-10-25 22:20:48 +000013input/output/error pipes, and obtain their return codes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000014
Martin Panter4afdca02016-10-25 22:20:48 +000015For a complete description of this module see the Python documentation.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000016
Martin Panter4afdca02016-10-25 22:20:48 +000017Main API
18========
19run(...): Runs a command, waits for it to complete, then returns a
20 CompletedProcess instance.
21Popen(...): A class for flexibly executing a command in a new process
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000022
Martin Panter4afdca02016-10-25 22:20:48 +000023Constants
24---------
25DEVNULL: Special value that indicates that os.devnull should be used
26PIPE: Special value that indicates a pipe should be created
27STDOUT: Special value that indicates that stderr should go to stdout
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000028
29
Martin Panter4afdca02016-10-25 22:20:48 +000030Older API
31=========
32call(...): Runs a command, waits for it to complete, then returns
33 the return code.
34check_call(...): Same as call() but raises CalledProcessError()
35 if return code is not 0
36check_output(...): Same as check_call() but returns the contents of
37 stdout instead of a return code
38getoutput(...): Runs a command in the shell, waits for it to complete,
39 then returns the output
40getstatusoutput(...): Runs a command in the shell, waits for it to complete,
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -070041 then returns a (exitcode, output) tuple
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000042"""
43
44import sys
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -070045_mswindows = (sys.platform == "win32")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000046
Guido van Rossumfa0054a2007-05-24 04:05:35 +000047import io
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000048import os
Reid Kleckner31aa7dd2011-03-14 12:02:10 -040049import time
Christian Heimesa342c012008-04-20 21:01:16 +000050import signal
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +000051import builtins
Gregory P. Smithd23047b2010-12-04 09:10:44 +000052import warnings
Ross Lagerwall4f61b022011-04-05 15:34:00 +020053import errno
Victor Stinnerae586492014-09-02 23:18:25 +020054from time import monotonic as _time
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000055
Peter Astrand454f7672005-01-01 09:36:35 +000056# Exception classes used by this module.
Gregory P. Smith54d412e2011-03-14 14:08:43 -040057class SubprocessError(Exception): pass
58
59
60class CalledProcessError(SubprocessError):
Martin Panter4afdca02016-10-25 22:20:48 +000061 """Raised when run() is called with check=True and the process
62 returns a non-zero exit status.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)d6da7602016-06-03 06:14:06 +000063
Martin Panter4afdca02016-10-25 22:20:48 +000064 Attributes:
65 cmd, returncode, stdout, stderr, output
Georg Brandlf9734072008-12-07 15:30:06 +000066 """
Gregory P. Smith6e730002015-04-14 16:14:25 -070067 def __init__(self, returncode, cmd, output=None, stderr=None):
Thomas Wouters0e3f5912006-08-11 14:57:12 +000068 self.returncode = returncode
69 self.cmd = cmd
Georg Brandlf9734072008-12-07 15:30:06 +000070 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -070071 self.stderr = stderr
72
Thomas Wouters0e3f5912006-08-11 14:57:12 +000073 def __str__(self):
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)d6da7602016-06-03 06:14:06 +000074 if self.returncode and self.returncode < 0:
75 try:
76 return "Command '%s' died with %r." % (
77 self.cmd, signal.Signals(-self.returncode))
78 except ValueError:
79 return "Command '%s' died with unknown signal %d." % (
80 self.cmd, -self.returncode)
81 else:
82 return "Command '%s' returned non-zero exit status %d." % (
83 self.cmd, self.returncode)
Thomas Wouters0e3f5912006-08-11 14:57:12 +000084
Gregory P. Smith6e730002015-04-14 16:14:25 -070085 @property
86 def stdout(self):
87 """Alias for output attribute, to match stderr"""
88 return self.output
89
90 @stdout.setter
91 def stdout(self, value):
92 # There's no obvious reason to set this, but allow it anyway so
93 # .stdout is a transparent alias for .output
94 self.output = value
95
Peter Astrand454f7672005-01-01 09:36:35 +000096
Gregory P. Smith54d412e2011-03-14 14:08:43 -040097class TimeoutExpired(SubprocessError):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -040098 """This exception is raised when the timeout expires while waiting for a
99 child process.
Martin Panter4afdca02016-10-25 22:20:48 +0000100
101 Attributes:
102 cmd, output, stdout, stderr, timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400103 """
Gregory P. Smith6e730002015-04-14 16:14:25 -0700104 def __init__(self, cmd, timeout, output=None, stderr=None):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400105 self.cmd = cmd
Reid Kleckner2b228f02011-03-16 16:57:54 -0400106 self.timeout = timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400107 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -0700108 self.stderr = stderr
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400109
110 def __str__(self):
111 return ("Command '%s' timed out after %s seconds" %
112 (self.cmd, self.timeout))
113
Gregory P. Smith6e730002015-04-14 16:14:25 -0700114 @property
115 def stdout(self):
116 return self.output
117
118 @stdout.setter
119 def stdout(self, value):
120 # There's no obvious reason to set this, but allow it anyway so
121 # .stdout is a transparent alias for .output
122 self.output = value
123
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400124
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700125if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000126 import threading
127 import msvcrt
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200128 import _winapi
Brian Curtin1ce6b582010-04-24 16:19:22 +0000129 class STARTUPINFO:
Subhendu Ghoshae160bb2017-02-25 20:29:05 +0530130 def __init__(self, *, dwFlags=0, hStdInput=None, hStdOutput=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200131 hStdError=None, wShowWindow=0, lpAttributeList=None):
Subhendu Ghoshae160bb2017-02-25 20:29:05 +0530132 self.dwFlags = dwFlags
133 self.hStdInput = hStdInput
134 self.hStdOutput = hStdOutput
135 self.hStdError = hStdError
136 self.wShowWindow = wShowWindow
Segev Finerb2a60832017-12-18 11:28:19 +0200137 self.lpAttributeList = lpAttributeList or {"handle_list": []}
Victor Stinner29be3bd2018-07-05 23:15:28 +0200138
139 def _copy(self):
140 attr_list = self.lpAttributeList.copy()
141 if 'handle_list' in attr_list:
142 attr_list['handle_list'] = list(attr_list['handle_list'])
143
144 return STARTUPINFO(dwFlags=self.dwFlags,
145 hStdInput=self.hStdInput,
146 hStdOutput=self.hStdOutput,
147 hStdError=self.hStdError,
148 wShowWindow=self.wShowWindow,
149 lpAttributeList=attr_list)
150
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000151else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -0700152 import _posixsubprocess
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100153 import select
154 import selectors
Antoine Pitroua6a4dc82017-09-07 18:56:24 +0200155 import threading
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000156
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000157 # When select or poll has indicated that the file is writable,
158 # we can write up to _PIPE_BUF bytes without risk of blocking.
159 # POSIX defines PIPE_BUF as >= 512.
160 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
161
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100162 # poll/select have the advantage of not requiring any extra file
163 # descriptor, contrarily to epoll/kqueue (also, they require a single
164 # syscall).
165 if hasattr(selectors, 'PollSelector'):
166 _PopenSelector = selectors.PollSelector
167 else:
168 _PopenSelector = selectors.SelectSelector
169
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000170
Brett Cannona23810f2008-05-26 19:04:21 +0000171__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
Gregory P. Smith6e730002015-04-14 16:14:25 -0700172 "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL",
173 "SubprocessError", "TimeoutExpired", "CompletedProcess"]
Gregory P. Smithace55862015-04-07 15:57:54 -0700174 # NOTE: We intentionally exclude list2cmdline as it is
175 # considered an internal implementation detail. issue10838.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000176
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700177if _mswindows:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200178 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
179 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
180 STD_ERROR_HANDLE, SW_HIDE,
Jamesb5d9e082017-11-08 14:18:59 +0000181 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW,
182 ABOVE_NORMAL_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS,
183 HIGH_PRIORITY_CLASS, IDLE_PRIORITY_CLASS,
184 NORMAL_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS,
185 CREATE_NO_WINDOW, DETACHED_PROCESS,
186 CREATE_DEFAULT_ERROR_MODE, CREATE_BREAKAWAY_FROM_JOB)
Brian Curtin5d9deaa2011-04-29 16:24:07 -0500187
Brian Curtin08fd8d92011-04-29 16:11:30 -0500188 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
Brian Curtin8b8e7f42011-04-29 15:48:13 -0500189 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
190 "STD_ERROR_HANDLE", "SW_HIDE",
Martin Panter528619b2016-04-16 23:42:37 +0000191 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW",
Jamesb5d9e082017-11-08 14:18:59 +0000192 "STARTUPINFO",
193 "ABOVE_NORMAL_PRIORITY_CLASS", "BELOW_NORMAL_PRIORITY_CLASS",
194 "HIGH_PRIORITY_CLASS", "IDLE_PRIORITY_CLASS",
195 "NORMAL_PRIORITY_CLASS", "REALTIME_PRIORITY_CLASS",
196 "CREATE_NO_WINDOW", "DETACHED_PROCESS",
197 "CREATE_DEFAULT_ERROR_MODE", "CREATE_BREAKAWAY_FROM_JOB"])
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200198
199 class Handle(int):
200 closed = False
201
202 def Close(self, CloseHandle=_winapi.CloseHandle):
203 if not self.closed:
204 self.closed = True
205 CloseHandle(self)
206
207 def Detach(self):
208 if not self.closed:
209 self.closed = True
210 return int(self)
211 raise ValueError("already closed")
212
213 def __repr__(self):
Serhiy Storchaka465e60e2014-07-25 23:36:00 +0300214 return "%s(%d)" % (self.__class__.__name__, int(self))
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200215
216 __del__ = Close
217 __str__ = __repr__
218
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000219
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200220# This lists holds Popen instances for which the underlying process had not
221# exited at the time its __del__ method got called: those processes are wait()ed
222# for synchronously from _cleanup() when a new Popen object is created, to avoid
223# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000224_active = []
225
226def _cleanup():
227 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000228 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200229 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000230 try:
231 _active.remove(inst)
232 except ValueError:
233 # This can happen if two threads create a new Popen instance.
234 # It's harmless that it was already removed, so ignore.
235 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000236
237PIPE = -1
238STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200239DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000240
241
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200242# XXX This function is only used by multiprocessing and the test suite,
243# but it's here so that it can be imported when Python is compiled without
244# threads.
245
Victor Stinner9def2842016-01-18 12:15:08 +0100246def _optim_args_from_interpreter_flags():
247 """Return a list of command-line arguments reproducing the current
248 optimization settings in sys.flags."""
249 args = []
250 value = sys.flags.optimize
251 if value > 0:
252 args.append('-' + 'O' * value)
253 return args
254
255
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200256def _args_from_interpreter_flags():
257 """Return a list of command-line arguments reproducing the current
Victor Stinner747f48e2017-12-12 22:59:48 +0100258 settings in sys.flags, sys.warnoptions and sys._xoptions."""
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200259 flag_opt_map = {
260 'debug': 'd',
261 # 'inspect': 'i',
262 # 'interactive': 'i',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200263 'dont_write_bytecode': 'B',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200264 'no_site': 'S',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200265 'verbose': 'v',
266 'bytes_warning': 'b',
267 'quiet': 'q',
Victor Stinner9def2842016-01-18 12:15:08 +0100268 # -O is handled in _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200269 }
Victor Stinner9def2842016-01-18 12:15:08 +0100270 args = _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200271 for flag, opt in flag_opt_map.items():
272 v = getattr(sys.flags, flag)
273 if v > 0:
274 args.append('-' + opt * v)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800275
Miss Islington (bot)01e57992018-11-23 09:13:32 -0800276 if sys.flags.isolated:
277 args.append('-I')
278 else:
279 if sys.flags.ignore_environment:
280 args.append('-E')
281 if sys.flags.no_user_site:
282 args.append('-s')
283
Victor Stinnerf39b6742017-11-20 15:24:56 -0800284 # -W options
Victor Stinner747f48e2017-12-12 22:59:48 +0100285 warnopts = sys.warnoptions[:]
286 bytes_warning = sys.flags.bytes_warning
287 xoptions = getattr(sys, '_xoptions', {})
288 dev_mode = ('dev' in xoptions)
289
290 if bytes_warning > 1:
291 warnopts.remove("error::BytesWarning")
292 elif bytes_warning:
293 warnopts.remove("default::BytesWarning")
294 if dev_mode:
295 warnopts.remove('default')
296 for opt in warnopts:
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200297 args.append('-W' + opt)
Victor Stinnerf39b6742017-11-20 15:24:56 -0800298
299 # -X options
Victor Stinner747f48e2017-12-12 22:59:48 +0100300 if dev_mode:
Victor Stinnerf39b6742017-11-20 15:24:56 -0800301 args.extend(('-X', 'dev'))
302 for opt in ('faulthandler', 'tracemalloc', 'importtime',
Victor Stinner91106cd2017-12-13 12:29:09 +0100303 'showalloccount', 'showrefcount', 'utf8'):
Victor Stinnerf39b6742017-11-20 15:24:56 -0800304 if opt in xoptions:
305 value = xoptions[opt]
306 if value is True:
307 arg = opt
308 else:
309 arg = '%s=%s' % (opt, value)
310 args.extend(('-X', arg))
311
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200312 return args
313
314
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400315def call(*popenargs, timeout=None, **kwargs):
316 """Run command with arguments. Wait for command to complete or
317 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000318
319 The arguments are the same as for the Popen constructor. Example:
320
321 retcode = call(["ls", "-l"])
322 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200323 with Popen(*popenargs, **kwargs) as p:
324 try:
325 return p.wait(timeout=timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800326 except: # Including KeyboardInterrupt, wait handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200327 p.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800328 # We don't call p.wait() again as p.__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200329 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000330
331
Peter Astrand454f7672005-01-01 09:36:35 +0000332def check_call(*popenargs, **kwargs):
333 """Run command with arguments. Wait for command to complete. If
334 the exit code was zero then return, otherwise raise
335 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000336 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000337
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400338 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000339
340 check_call(["ls", "-l"])
341 """
342 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000343 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000344 cmd = kwargs.get("args")
345 if cmd is None:
346 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000347 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000348 return 0
349
350
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400351def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700352 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000353
354 If the exit code was non-zero it raises a CalledProcessError. The
355 CalledProcessError object will have the return code in the returncode
356 attribute and output in the output attribute.
357
358 The arguments are the same as for the Popen constructor. Example:
359
360 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000361 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000362
363 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000364 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000365
366 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000367 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000368 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000369 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700370
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300371 There is an additional optional argument, "input", allowing you to
372 pass a string to the subprocess's stdin. If you use this argument
373 you may not also use the Popen constructor's "stdin" argument, as
374 it too will be used internally. Example:
375
376 >>> check_output(["sed", "-e", "s/foo/bar/"],
377 ... input=b"when in the course of fooman events\n")
378 b'when in the course of barman events\n'
379
andyclegg7fed7bd2017-10-23 03:01:19 +0100380 By default, all communication is in bytes, and therefore any "input"
381 should be bytes, and the return value wil be bytes. If in text mode,
382 any "input" should be a string, and the return value will be a string
383 decoded according to locale encoding, or by "encoding" if set. Text mode
384 is triggered by setting any of text, encoding, errors or universal_newlines.
Georg Brandlf9734072008-12-07 15:30:06 +0000385 """
386 if 'stdout' in kwargs:
387 raise ValueError('stdout argument not allowed, it will be overridden.')
Gregory P. Smith6e730002015-04-14 16:14:25 -0700388
389 if 'input' in kwargs and kwargs['input'] is None:
390 # Explicitly passing input=None was previously equivalent to passing an
391 # empty string. That is maintained here for backwards compatibility.
392 kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
393
394 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
395 **kwargs).stdout
396
397
398class CompletedProcess(object):
399 """A process that has finished running.
400
401 This is returned by run().
402
403 Attributes:
404 args: The list or str args passed to run().
405 returncode: The exit code of the process, negative for signals.
406 stdout: The standard output (None if not captured).
407 stderr: The standard error (None if not captured).
408 """
409 def __init__(self, args, returncode, stdout=None, stderr=None):
410 self.args = args
411 self.returncode = returncode
412 self.stdout = stdout
413 self.stderr = stderr
414
415 def __repr__(self):
416 args = ['args={!r}'.format(self.args),
417 'returncode={!r}'.format(self.returncode)]
418 if self.stdout is not None:
419 args.append('stdout={!r}'.format(self.stdout))
420 if self.stderr is not None:
421 args.append('stderr={!r}'.format(self.stderr))
422 return "{}({})".format(type(self).__name__, ', '.join(args))
423
424 def check_returncode(self):
425 """Raise CalledProcessError if the exit code is non-zero."""
426 if self.returncode:
427 raise CalledProcessError(self.returncode, self.args, self.stdout,
428 self.stderr)
429
430
Bo Baylesce0f33d2018-01-30 00:40:39 -0600431def run(*popenargs,
432 input=None, capture_output=False, timeout=None, check=False, **kwargs):
Gregory P. Smith6e730002015-04-14 16:14:25 -0700433 """Run command with arguments and return a CompletedProcess instance.
434
435 The returned instance will have attributes args, returncode, stdout and
436 stderr. By default, stdout and stderr are not captured, and those attributes
437 will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.
438
439 If check is True and the exit code was non-zero, it raises a
440 CalledProcessError. The CalledProcessError object will have the return code
441 in the returncode attribute, and output & stderr attributes if those streams
442 were captured.
443
444 If timeout is given, and the process takes too long, a TimeoutExpired
445 exception will be raised.
446
447 There is an optional argument "input", allowing you to
andyclegg7fed7bd2017-10-23 03:01:19 +0100448 pass bytes or a string to the subprocess's stdin. If you use this argument
Gregory P. Smith6e730002015-04-14 16:14:25 -0700449 you may not also use the Popen constructor's "stdin" argument, as
450 it will be used internally.
451
andyclegg7fed7bd2017-10-23 03:01:19 +0100452 By default, all communication is in bytes, and therefore any "input" should
453 be bytes, and the stdout and stderr will be bytes. If in text mode, any
454 "input" should be a string, and stdout and stderr will be strings decoded
455 according to locale encoding, or by "encoding" if set. Text mode is
456 triggered by setting any of text, encoding, errors or universal_newlines.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700457
andyclegg7fed7bd2017-10-23 03:01:19 +0100458 The other arguments are the same as for the Popen constructor.
Gregory P. Smith6e730002015-04-14 16:14:25 -0700459 """
460 if input is not None:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300461 if 'stdin' in kwargs:
462 raise ValueError('stdin and input arguments may not both be used.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300463 kwargs['stdin'] = PIPE
Gregory P. Smith6e730002015-04-14 16:14:25 -0700464
Bo Baylesce0f33d2018-01-30 00:40:39 -0600465 if capture_output:
466 if ('stdout' in kwargs) or ('stderr' in kwargs):
467 raise ValueError('stdout and stderr arguments may not be used '
468 'with capture_output.')
469 kwargs['stdout'] = PIPE
470 kwargs['stderr'] = PIPE
471
Gregory P. Smith6e730002015-04-14 16:14:25 -0700472 with Popen(*popenargs, **kwargs) as process:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200473 try:
Gregory P. Smith6e730002015-04-14 16:14:25 -0700474 stdout, stderr = process.communicate(input, timeout=timeout)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200475 except TimeoutExpired:
476 process.kill()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700477 stdout, stderr = process.communicate()
478 raise TimeoutExpired(process.args, timeout, output=stdout,
479 stderr=stderr)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800480 except: # Including KeyboardInterrupt, communicate handled that.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200481 process.kill()
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800482 # We don't call process.wait() as .__exit__ does that for us.
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200483 raise
484 retcode = process.poll()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700485 if check and retcode:
486 raise CalledProcessError(retcode, process.args,
487 output=stdout, stderr=stderr)
488 return CompletedProcess(process.args, retcode, stdout, stderr)
Peter Astrand454f7672005-01-01 09:36:35 +0000489
490
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000491def list2cmdline(seq):
492 """
493 Translate a sequence of arguments into a command line
494 string, using the same rules as the MS C runtime:
495
496 1) Arguments are delimited by white space, which is either a
497 space or a tab.
498
499 2) A string surrounded by double quotation marks is
500 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000501 contained within. A quoted string can be embedded in an
502 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000503
504 3) A double quotation mark preceded by a backslash is
505 interpreted as a literal double quotation mark.
506
507 4) Backslashes are interpreted literally, unless they
508 immediately precede a double quotation mark.
509
510 5) If backslashes immediately precede a double quotation mark,
511 every pair of backslashes is interpreted as a literal
512 backslash. If the number of backslashes is odd, the last
513 backslash escapes the next double quotation mark as
514 described in rule 3.
515 """
516
517 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000518 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
519 # or search http://msdn.microsoft.com for
520 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000521 result = []
522 needquote = False
523 for arg in seq:
524 bs_buf = []
525
526 # Add a space to separate this argument from the others
527 if result:
528 result.append(' ')
529
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000530 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000531 if needquote:
532 result.append('"')
533
534 for c in arg:
535 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000536 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000537 bs_buf.append(c)
538 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000539 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000540 result.append('\\' * len(bs_buf)*2)
541 bs_buf = []
542 result.append('\\"')
543 else:
544 # Normal char
545 if bs_buf:
546 result.extend(bs_buf)
547 bs_buf = []
548 result.append(c)
549
Christian Heimesfdab48e2008-01-20 09:06:41 +0000550 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000551 if bs_buf:
552 result.extend(bs_buf)
553
554 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000555 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000556 result.append('"')
557
558 return ''.join(result)
559
560
Brett Cannona23810f2008-05-26 19:04:21 +0000561# Various tools for executing commands and looking at their output and status.
562#
Brett Cannona23810f2008-05-26 19:04:21 +0000563
564def getstatusoutput(cmd):
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700565 """Return (exitcode, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000566
Tim Golden60798142013-11-05 12:57:25 +0000567 Execute the string 'cmd' in a shell with 'check_output' and
Steve Dower050acae2016-09-06 20:16:17 -0700568 return a 2-tuple (status, output). The locale encoding is used
569 to decode the output and process newlines.
Tim Golden60798142013-11-05 12:57:25 +0000570
571 A trailing newline is stripped from the output.
572 The exit status for the command can be interpreted
573 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000574
575 >>> import subprocess
576 >>> subprocess.getstatusoutput('ls /bin/ls')
577 (0, '/bin/ls')
578 >>> subprocess.getstatusoutput('cat /bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700579 (1, 'cat: /bin/junk: No such file or directory')
Brett Cannona23810f2008-05-26 19:04:21 +0000580 >>> subprocess.getstatusoutput('/bin/junk')
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700581 (127, 'sh: /bin/junk: not found')
582 >>> subprocess.getstatusoutput('/bin/kill $$')
583 (-15, '')
Brett Cannona23810f2008-05-26 19:04:21 +0000584 """
Tim Goldene0041752013-11-03 12:53:17 +0000585 try:
andyclegg7fed7bd2017-10-23 03:01:19 +0100586 data = check_output(cmd, shell=True, text=True, stderr=STDOUT)
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700587 exitcode = 0
Tim Goldene0041752013-11-03 12:53:17 +0000588 except CalledProcessError as ex:
589 data = ex.output
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700590 exitcode = ex.returncode
Tim Goldene0041752013-11-03 12:53:17 +0000591 if data[-1:] == '\n':
592 data = data[:-1]
Gregory P. Smith2eb0cb42017-09-07 16:11:02 -0700593 return exitcode, data
Brett Cannona23810f2008-05-26 19:04:21 +0000594
595def getoutput(cmd):
596 """Return output (stdout or stderr) of executing cmd in a shell.
597
598 Like getstatusoutput(), except the exit status is ignored and the return
599 value is a string containing the command's output. Example:
600
601 >>> import subprocess
602 >>> subprocess.getoutput('ls /bin/ls')
603 '/bin/ls'
604 """
605 return getstatusoutput(cmd)[1]
606
607
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000608class Popen(object):
Martin Panter4afdca02016-10-25 22:20:48 +0000609 """ Execute a child program in a new process.
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200610
Martin Panter4afdca02016-10-25 22:20:48 +0000611 For a complete description of the arguments see the Python documentation.
612
613 Arguments:
614 args: A string, or a sequence of program arguments.
615
616 bufsize: supplied as the buffering argument to the open() function when
617 creating the stdin/stdout/stderr pipe file objects
618
619 executable: A replacement program to execute.
620
621 stdin, stdout and stderr: These specify the executed programs' standard
622 input, standard output and standard error file handles, respectively.
623
624 preexec_fn: (POSIX only) An object to be called in the child process
625 just before the child is executed.
626
627 close_fds: Controls closing or inheriting of file descriptors.
628
629 shell: If true, the command will be executed through the shell.
630
631 cwd: Sets the current directory before the child is executed.
632
633 env: Defines the environment variables for the new process.
634
andyclegg7fed7bd2017-10-23 03:01:19 +0100635 text: If true, decode stdin, stdout and stderr using the given encoding
636 (if set) or the system default otherwise.
637
638 universal_newlines: Alias of text, provided for backwards compatibility.
Martin Panter4afdca02016-10-25 22:20:48 +0000639
640 startupinfo and creationflags (Windows only)
641
642 restore_signals (POSIX only)
643
644 start_new_session (POSIX only)
645
646 pass_fds (POSIX only)
647
Martin Panter3dca6242016-10-25 23:41:42 +0000648 encoding and errors: Text mode encoding and error handling to use for
649 file objects stdin, stdout and stderr.
650
Martin Panter4afdca02016-10-25 22:20:48 +0000651 Attributes:
652 stdin, stdout, stderr, pid, returncode
653 """
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200654 _child_created = False # Set here since __del__ checks it
655
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700656 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000657 stdin=None, stdout=None, stderr=None,
Segev Finerb2a60832017-12-18 11:28:19 +0200658 preexec_fn=None, close_fds=True,
andyclegg7fed7bd2017-10-23 03:01:19 +0100659 shell=False, cwd=None, env=None, universal_newlines=None,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000660 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000661 restore_signals=True, start_new_session=False,
andyclegg7fed7bd2017-10-23 03:01:19 +0100662 pass_fds=(), *, encoding=None, errors=None, text=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000663 """Create new Popen instance."""
664 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700665 # Held while anything is calling waitpid before returncode has been
666 # updated to prevent clobbering returncode if wait() or poll() are
667 # called from multiple threads at once. After acquiring the lock,
668 # code must re-check self.returncode to see if another thread just
669 # finished a waitpid() call.
670 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000671
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400672 self._input = None
673 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000674 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700675 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000676 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000677 raise TypeError("bufsize must be an integer")
678
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700679 if _mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000680 if preexec_fn is not None:
681 raise ValueError("preexec_fn is not supported on Windows "
682 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000683 else:
684 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000685 if pass_fds and not close_fds:
686 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
687 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000688 if startupinfo is not None:
689 raise ValueError("startupinfo is only supported on Windows "
690 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000691 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000692 raise ValueError("creationflags is only supported on Windows "
693 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000694
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400695 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000696 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000697 self.stdout = None
698 self.stderr = None
699 self.pid = None
700 self.returncode = None
Steve Dower050acae2016-09-06 20:16:17 -0700701 self.encoding = encoding
702 self.errors = errors
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000703
andyclegg7fed7bd2017-10-23 03:01:19 +0100704 # Validate the combinations of text and universal_newlines
705 if (text is not None and universal_newlines is not None
706 and bool(universal_newlines) != bool(text)):
707 raise SubprocessError('Cannot disambiguate when both text '
708 'and universal_newlines are supplied but '
709 'different. Pass one or the other.')
710
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000711 # Input and output objects. The general principle is like
712 # this:
713 #
714 # Parent Child
715 # ------ -----
716 # p2cwrite ---stdin---> p2cread
717 # c2pread <--stdout--- c2pwrite
718 # errread <--stderr--- errwrite
719 #
720 # On POSIX, the child objects are file descriptors. On
721 # Windows, these are Windows file handles. The parent objects
722 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000723 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000724 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000725
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000726 (p2cread, p2cwrite,
727 c2pread, c2pwrite,
728 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
729
Antoine Pitrouc9982322011-01-04 19:07:07 +0000730 # We wrap OS handles *before* launching the child, otherwise a
731 # quickly terminating child could make our fds unwrappable
732 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000733
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700734 if _mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000735 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000736 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000737 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000738 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000739 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000740 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000741
andyclegg7fed7bd2017-10-23 03:01:19 +0100742 self.text_mode = encoding or errors or text or universal_newlines
Tim Peterse718f612004-10-12 21:51:32 +0000743
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800744 # How long to resume waiting on a child after the first ^C.
745 # There is no right value for this. The purpose is to be polite
746 # yet remain good for interactive users trying to exit a tool.
747 self._sigint_wait_secs = 0.25 # 1/xkcd221.getRandomNumber()
748
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700749 self._closed_child_pipe_fds = False
Steve Dower050acae2016-09-06 20:16:17 -0700750
Antoine Pitrouc9982322011-01-04 19:07:07 +0000751 try:
Steve Dower050acae2016-09-06 20:16:17 -0700752 if p2cwrite != -1:
753 self.stdin = io.open(p2cwrite, 'wb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100754 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700755 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
756 line_buffering=(bufsize == 1),
757 encoding=encoding, errors=errors)
758 if c2pread != -1:
759 self.stdout = io.open(c2pread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100760 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700761 self.stdout = io.TextIOWrapper(self.stdout,
762 encoding=encoding, errors=errors)
763 if errread != -1:
764 self.stderr = io.open(errread, 'rb', bufsize)
andyclegg7fed7bd2017-10-23 03:01:19 +0100765 if self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -0700766 self.stderr = io.TextIOWrapper(self.stderr,
767 encoding=encoding, errors=errors)
768
Antoine Pitrouc9982322011-01-04 19:07:07 +0000769 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300770 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000771 startupinfo, creationflags, shell,
772 p2cread, p2cwrite,
773 c2pread, c2pwrite,
774 errread, errwrite,
775 restore_signals, start_new_session)
776 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800777 # Cleanup if the child failed starting.
778 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000779 try:
780 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200781 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800782 pass # Ignore EBADF or other errors.
783
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700784 if not self._closed_child_pipe_fds:
785 to_close = []
786 if stdin == PIPE:
787 to_close.append(p2cread)
788 if stdout == PIPE:
789 to_close.append(c2pwrite)
790 if stderr == PIPE:
791 to_close.append(errwrite)
792 if hasattr(self, '_devnull'):
793 to_close.append(self._devnull)
794 for fd in to_close:
795 try:
Segev Finer4d385172017-08-18 16:18:13 +0300796 if _mswindows and isinstance(fd, Handle):
797 fd.Close()
798 else:
799 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700800 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700801 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800802
Antoine Pitrouc9982322011-01-04 19:07:07 +0000803 raise
804
andyclegg7fed7bd2017-10-23 03:01:19 +0100805 @property
806 def universal_newlines(self):
807 # universal_newlines as retained as an alias of text_mode for API
luzpaza5293b42017-11-05 07:37:50 -0600808 # compatibility. bpo-31756
andyclegg7fed7bd2017-10-23 03:01:19 +0100809 return self.text_mode
810
811 @universal_newlines.setter
812 def universal_newlines(self, universal_newlines):
813 self.text_mode = bool(universal_newlines)
814
Steve Dower050acae2016-09-06 20:16:17 -0700815 def _translate_newlines(self, data, encoding, errors):
816 data = data.decode(encoding, errors)
Andrew Svetlov82860712012-08-19 22:13:41 +0300817 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000818
Brian Curtin79cdb662010-12-03 02:46:02 +0000819 def __enter__(self):
820 return self
821
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800822 def __exit__(self, exc_type, value, traceback):
Brian Curtin79cdb662010-12-03 02:46:02 +0000823 if self.stdout:
824 self.stdout.close()
825 if self.stderr:
826 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200827 try: # Flushing a BufferedWriter may raise an error
828 if self.stdin:
829 self.stdin.close()
830 finally:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800831 if exc_type == KeyboardInterrupt:
832 # https://bugs.python.org/issue25942
833 # In the case of a KeyboardInterrupt we assume the SIGINT
834 # was also already sent to our child processes. We can't
835 # block indefinitely as that is not user friendly.
836 # If we have not already waited a brief amount of time in
837 # an interrupted .wait() or .communicate() call, do so here
838 # for consistency.
839 if self._sigint_wait_secs > 0:
840 try:
841 self._wait(timeout=self._sigint_wait_secs)
842 except TimeoutExpired:
843 pass
844 self._sigint_wait_secs = 0 # Note that this has been done.
845 return # resume the KeyboardInterrupt
846
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200847 # Wait for the process to terminate, to avoid zombies.
848 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000849
Victor Stinner9505b032017-01-06 10:44:44 +0100850 def __del__(self, _maxsize=sys.maxsize, _warn=warnings.warn):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200851 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000852 # We didn't get to successfully create a child process.
853 return
Victor Stinner5a48e212016-05-20 12:11:15 +0200854 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800855 # Not reading subprocess exit status creates a zombie process which
Victor Stinnerc206f1e2016-06-14 16:42:59 +0200856 # is only destroyed at the parent python process exit
Victor Stinner9505b032017-01-06 10:44:44 +0100857 _warn("subprocess %s is still running" % self.pid,
858 ResourceWarning, source=self)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000859 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000860 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000861 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000862 # Child is still running, keep us alive until we can wait on it.
863 _active.append(self)
864
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200865 def _get_devnull(self):
866 if not hasattr(self, '_devnull'):
867 self._devnull = os.open(os.devnull, os.O_RDWR)
868 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000869
Victor Stinnera5e881d2015-01-14 17:07:59 +0100870 def _stdin_write(self, input):
871 if input:
872 try:
873 self.stdin.write(input)
874 except BrokenPipeError:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000875 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200876 except OSError as exc:
877 if exc.errno == errno.EINVAL:
878 # bpo-19612, bpo-30418: On Windows, stdin.write() fails
879 # with EINVAL if the child process exited or if the child
880 # process is still running but closed the pipe.
Victor Stinnera5e881d2015-01-14 17:07:59 +0100881 pass
882 else:
883 raise
Victor Stinnerd52aa312017-06-08 17:30:39 +0200884
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000885 try:
886 self.stdin.close()
887 except BrokenPipeError:
888 pass # communicate() must ignore broken pipe errors.
Victor Stinnerd52aa312017-06-08 17:30:39 +0200889 except OSError as exc:
890 if exc.errno == errno.EINVAL:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +0000891 pass
892 else:
893 raise
Victor Stinnera5e881d2015-01-14 17:07:59 +0100894
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400895 def communicate(self, input=None, timeout=None):
Joel Schaerer88031a92017-09-13 21:11:20 +0200896 """Interact with process: Send data to stdin and close it.
897 Read data from stdout and stderr, until end-of-file is
898 reached. Wait for process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +0000899
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400900 The optional "input" argument should be data to be sent to the
andyclegg7fed7bd2017-10-23 03:01:19 +0100901 child process, or None, if no data should be sent to the child.
902 communicate() returns a tuple (stdout, stderr).
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400903
andyclegg7fed7bd2017-10-23 03:01:19 +0100904 By default, all communication is in bytes, and therefore any
905 "input" should be bytes, and the (stdout, stderr) will be bytes.
906 If in text mode (indicated by self.text_mode), any "input" should
907 be a string, and (stdout, stderr) will be strings decoded
908 according to locale encoding, or by "encoding" if set. Text mode
909 is triggered by setting any of text, encoding, errors or
910 universal_newlines.
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400911 """
Peter Astrand23109f02005-03-03 20:28:59 +0000912
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400913 if self._communication_started and input:
914 raise ValueError("Cannot send input after starting communication")
915
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400916 # Optimization: If we are not worried about timeouts, we haven't
917 # started communicating, and we have one or zero pipes, using select()
918 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200919 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400920 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000921 stdout = None
922 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000923 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +0100924 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +0000925 elif self.stdout:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000926 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000927 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000928 elif self.stderr:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +0000929 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000930 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000931 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200932 else:
933 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +0200934 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +0200935 else:
936 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000937
Victor Stinner7a8d0812011-04-05 13:13:08 +0200938 try:
939 stdout, stderr = self._communicate(input, endtime, timeout)
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800940 except KeyboardInterrupt:
941 # https://bugs.python.org/issue25942
942 # See the detailed comment in .wait().
943 if timeout is not None:
944 sigint_timeout = min(self._sigint_wait_secs,
945 self._remaining_time(endtime))
946 else:
947 sigint_timeout = self._sigint_wait_secs
948 self._sigint_wait_secs = 0 # nothing else should wait.
949 try:
950 self._wait(timeout=sigint_timeout)
951 except TimeoutExpired:
952 pass
953 raise # resume the KeyboardInterrupt
954
Victor Stinner7a8d0812011-04-05 13:13:08 +0200955 finally:
956 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400957
Victor Stinner7a8d0812011-04-05 13:13:08 +0200958 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400959
960 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +0000961
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000962
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000963 def poll(self):
Martin Panter4afdca02016-10-25 22:20:48 +0000964 """Check if child process has terminated. Set and return returncode
965 attribute."""
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000966 return self._internal_poll()
967
968
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400969 def _remaining_time(self, endtime):
970 """Convenience for _communicate when computing timeouts."""
971 if endtime is None:
972 return None
973 else:
Victor Stinner949d8c92012-05-30 13:30:32 +0200974 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400975
976
Reid Kleckner2b228f02011-03-16 16:57:54 -0400977 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400978 """Convenience for checking if a timeout has expired."""
979 if endtime is None:
980 return
Victor Stinner949d8c92012-05-30 13:30:32 +0200981 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -0400982 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400983
984
Gregory P. Smithf4d644f2018-01-29 21:27:39 -0800985 def wait(self, timeout=None):
986 """Wait for child process to terminate; returns self.returncode."""
987 if timeout is not None:
988 endtime = _time() + timeout
989 try:
990 return self._wait(timeout=timeout)
991 except KeyboardInterrupt:
992 # https://bugs.python.org/issue25942
993 # The first keyboard interrupt waits briefly for the child to
994 # exit under the common assumption that it also received the ^C
995 # generated SIGINT and will exit rapidly.
996 if timeout is not None:
997 sigint_timeout = min(self._sigint_wait_secs,
998 self._remaining_time(endtime))
999 else:
1000 sigint_timeout = self._sigint_wait_secs
1001 self._sigint_wait_secs = 0 # nothing else should wait.
1002 try:
1003 self._wait(timeout=sigint_timeout)
1004 except TimeoutExpired:
1005 pass
1006 raise # resume the KeyboardInterrupt
1007
1008
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -07001009 if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001010 #
1011 # Windows methods
1012 #
1013 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001014 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001015 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1016 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001017 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001018 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +00001019
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001020 p2cread, p2cwrite = -1, -1
1021 c2pread, c2pwrite = -1, -1
1022 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001023
Peter Astrandd38ddf42005-02-10 08:32:50 +00001024 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001025 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001026 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001027 p2cread, _ = _winapi.CreatePipe(None, 0)
1028 p2cread = Handle(p2cread)
1029 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001030 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001031 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
1032 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001033 elif stdin == DEVNULL:
1034 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001035 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001036 p2cread = msvcrt.get_osfhandle(stdin)
1037 else:
1038 # Assuming file-like object
1039 p2cread = msvcrt.get_osfhandle(stdin.fileno())
1040 p2cread = self._make_inheritable(p2cread)
1041
Peter Astrandd38ddf42005-02-10 08:32:50 +00001042 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001043 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001044 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001045 _, c2pwrite = _winapi.CreatePipe(None, 0)
1046 c2pwrite = Handle(c2pwrite)
1047 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001048 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001049 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
1050 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001051 elif stdout == DEVNULL:
1052 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001053 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001054 c2pwrite = msvcrt.get_osfhandle(stdout)
1055 else:
1056 # Assuming file-like object
1057 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1058 c2pwrite = self._make_inheritable(c2pwrite)
1059
Peter Astrandd38ddf42005-02-10 08:32:50 +00001060 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001061 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001062 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001063 _, errwrite = _winapi.CreatePipe(None, 0)
1064 errwrite = Handle(errwrite)
1065 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001066 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001067 errread, errwrite = _winapi.CreatePipe(None, 0)
1068 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001069 elif stderr == STDOUT:
1070 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001071 elif stderr == DEVNULL:
1072 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001073 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001074 errwrite = msvcrt.get_osfhandle(stderr)
1075 else:
1076 # Assuming file-like object
1077 errwrite = msvcrt.get_osfhandle(stderr.fileno())
1078 errwrite = self._make_inheritable(errwrite)
1079
1080 return (p2cread, p2cwrite,
1081 c2pread, c2pwrite,
1082 errread, errwrite)
1083
1084
1085 def _make_inheritable(self, handle):
1086 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001087 h = _winapi.DuplicateHandle(
1088 _winapi.GetCurrentProcess(), handle,
1089 _winapi.GetCurrentProcess(), 0, 1,
1090 _winapi.DUPLICATE_SAME_ACCESS)
1091 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001092
1093
Segev Finerb2a60832017-12-18 11:28:19 +02001094 def _filter_handle_list(self, handle_list):
1095 """Filter out console handles that can't be used
1096 in lpAttributeList["handle_list"] and make sure the list
1097 isn't empty. This also removes duplicate handles."""
1098 # An handle with it's lowest two bits set might be a special console
1099 # handle that if passed in lpAttributeList["handle_list"], will
1100 # cause it to fail.
1101 return list({handle for handle in handle_list
1102 if handle & 0x3 != 0x3
1103 or _winapi.GetFileType(handle) !=
1104 _winapi.FILE_TYPE_CHAR})
1105
1106
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001107 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001108 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001109 startupinfo, creationflags, shell,
1110 p2cread, p2cwrite,
1111 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001112 errread, errwrite,
1113 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001114 """Execute program (MS Windows version)"""
1115
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001116 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001117
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001118 if not isinstance(args, str):
Miss Islington (bot)b7dcae32018-02-27 15:30:30 -08001119 args = list2cmdline(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001120
Peter Astrandc1d65362004-11-07 14:30:34 +00001121 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001122 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001123 startupinfo = STARTUPINFO()
Victor Stinner29be3bd2018-07-05 23:15:28 +02001124 else:
1125 # bpo-34044: Copy STARTUPINFO since it is modified above,
1126 # so the caller can reuse it multiple times.
1127 startupinfo = startupinfo._copy()
Segev Finerb2a60832017-12-18 11:28:19 +02001128
1129 use_std_handles = -1 not in (p2cread, c2pwrite, errwrite)
1130 if use_std_handles:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001131 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001132 startupinfo.hStdInput = p2cread
1133 startupinfo.hStdOutput = c2pwrite
1134 startupinfo.hStdError = errwrite
1135
Segev Finerb2a60832017-12-18 11:28:19 +02001136 attribute_list = startupinfo.lpAttributeList
1137 have_handle_list = bool(attribute_list and
1138 "handle_list" in attribute_list and
1139 attribute_list["handle_list"])
1140
1141 # If we were given an handle_list or need to create one
1142 if have_handle_list or (use_std_handles and close_fds):
1143 if attribute_list is None:
1144 attribute_list = startupinfo.lpAttributeList = {}
1145 handle_list = attribute_list["handle_list"] = \
1146 list(attribute_list.get("handle_list", []))
1147
1148 if use_std_handles:
1149 handle_list += [int(p2cread), int(c2pwrite), int(errwrite)]
1150
1151 handle_list[:] = self._filter_handle_list(handle_list)
1152
1153 if handle_list:
1154 if not close_fds:
1155 warnings.warn("startupinfo.lpAttributeList['handle_list'] "
1156 "overriding close_fds", RuntimeWarning)
1157
1158 # When using the handle_list we always request to inherit
1159 # handles but the only handles that will be inherited are
1160 # the ones in the handle_list
1161 close_fds = False
1162
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001163 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001164 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1165 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001166 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001167 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001168
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001169 # Start the process
1170 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001171 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001172 # no special security
1173 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001174 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001175 creationflags,
1176 env,
Benjamin Petersoncb90f262017-03-02 00:03:41 -08001177 os.fspath(cwd) if cwd is not None else None,
Tim Peterse8374a52004-10-13 03:15:00 +00001178 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001179 finally:
1180 # Child is launched. Close the parent's copy of those pipe
1181 # handles that only the child should have open. You need
1182 # to make sure that no handles to the write end of the
1183 # output pipe are maintained in this process or else the
1184 # pipe will not close when the child process exits and the
1185 # ReadFile will hang.
1186 if p2cread != -1:
1187 p2cread.Close()
1188 if c2pwrite != -1:
1189 c2pwrite.Close()
1190 if errwrite != -1:
1191 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001192 if hasattr(self, '_devnull'):
1193 os.close(self._devnull)
Segev Finer4d385172017-08-18 16:18:13 +03001194 # Prevent a double close of these handles/fds from __init__
1195 # on error.
1196 self._closed_child_pipe_fds = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001197
1198 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001199 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001200 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001201 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001202 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001203
Brett Cannon84df1e62010-05-14 00:33:40 +00001204 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001205 _WaitForSingleObject=_winapi.WaitForSingleObject,
1206 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1207 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001208 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001209 attribute.
1210
1211 This method is called by __del__, so it can only refer to objects
1212 in its local scope.
1213
1214 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001215 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001216 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1217 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001218 return self.returncode
1219
1220
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001221 def _wait(self, timeout):
1222 """Internal implementation of wait() on Windows."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001223 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001224 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001225 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001226 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001227 if self.returncode is None:
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001228 # API note: Returns immediately if timeout_millis == 0.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001229 result = _winapi.WaitForSingleObject(self._handle,
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001230 timeout_millis)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001231 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001232 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001233 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001234 return self.returncode
1235
1236
1237 def _readerthread(self, fh, buffer):
1238 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001239 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001240
1241
Reid Kleckner2b228f02011-03-16 16:57:54 -04001242 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001243 # Start reader threads feeding into a list hanging off of this
1244 # object, unless they've already been started.
1245 if self.stdout and not hasattr(self, "_stdout_buff"):
1246 self._stdout_buff = []
1247 self.stdout_thread = \
1248 threading.Thread(target=self._readerthread,
1249 args=(self.stdout, self._stdout_buff))
1250 self.stdout_thread.daemon = True
1251 self.stdout_thread.start()
1252 if self.stderr and not hasattr(self, "_stderr_buff"):
1253 self._stderr_buff = []
1254 self.stderr_thread = \
1255 threading.Thread(target=self._readerthread,
1256 args=(self.stderr, self._stderr_buff))
1257 self.stderr_thread.daemon = True
1258 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001259
1260 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001261 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001262
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001263 # Wait for the reader threads, or time out. If we time out, the
1264 # threads remain reading and the fds left open in case the user
1265 # calls communicate again.
1266 if self.stdout is not None:
1267 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001268 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001269 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001270 if self.stderr is not None:
1271 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001272 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001273 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001274
1275 # Collect the output from and close both pipes, now that we know
1276 # both have been read successfully.
1277 stdout = None
1278 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001279 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001280 stdout = self._stdout_buff
1281 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001282 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001283 stderr = self._stderr_buff
1284 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001285
1286 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001287 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001288 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001289 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001290 stderr = stderr[0]
1291
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001292 return (stdout, stderr)
1293
Christian Heimesa342c012008-04-20 21:01:16 +00001294 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001295 """Send a signal to the process."""
1296 # Don't signal a process that we know has already died.
1297 if self.returncode is not None:
1298 return
Christian Heimesa342c012008-04-20 21:01:16 +00001299 if sig == signal.SIGTERM:
1300 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001301 elif sig == signal.CTRL_C_EVENT:
1302 os.kill(self.pid, signal.CTRL_C_EVENT)
1303 elif sig == signal.CTRL_BREAK_EVENT:
1304 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001305 else:
Brian Curtin19651362010-09-07 13:24:38 +00001306 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001307
1308 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001309 """Terminates the process."""
1310 # Don't terminate a process that we know has already died.
1311 if self.returncode is not None:
1312 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001313 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001314 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001315 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001316 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1317 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001318 rc = _winapi.GetExitCodeProcess(self._handle)
1319 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001320 raise
1321 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001322
1323 kill = terminate
1324
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001325 else:
1326 #
1327 # POSIX methods
1328 #
1329 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001330 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001331 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1332 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001333 p2cread, p2cwrite = -1, -1
1334 c2pread, c2pwrite = -1, -1
1335 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001336
Peter Astrandd38ddf42005-02-10 08:32:50 +00001337 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001338 pass
1339 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001340 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001341 elif stdin == DEVNULL:
1342 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001343 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001344 p2cread = stdin
1345 else:
1346 # Assuming file-like object
1347 p2cread = stdin.fileno()
1348
Peter Astrandd38ddf42005-02-10 08:32:50 +00001349 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001350 pass
1351 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001352 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001353 elif stdout == DEVNULL:
1354 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001355 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001356 c2pwrite = stdout
1357 else:
1358 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001359 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001360
Peter Astrandd38ddf42005-02-10 08:32:50 +00001361 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001362 pass
1363 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001364 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001365 elif stderr == STDOUT:
Martin Panterc7635892016-05-13 01:54:44 +00001366 if c2pwrite != -1:
1367 errwrite = c2pwrite
1368 else: # child's stdout is not set, use parent's stdout
1369 errwrite = sys.__stdout__.fileno()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001370 elif stderr == DEVNULL:
1371 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001372 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001373 errwrite = stderr
1374 else:
1375 # Assuming file-like object
1376 errwrite = stderr.fileno()
1377
1378 return (p2cread, p2cwrite,
1379 c2pread, c2pwrite,
1380 errread, errwrite)
1381
1382
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001383 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001384 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001385 startupinfo, creationflags, shell,
1386 p2cread, p2cwrite,
1387 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001388 errread, errwrite,
1389 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001390 """Execute program (POSIX version)"""
1391
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001392 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001393 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001394 else:
Miss Islington (bot)b7dcae32018-02-27 15:30:30 -08001395 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001396
1397 if shell:
Xavier de Gayeb35fc622016-12-13 16:32:21 +01001398 # On Android the default shell is at '/system/bin/sh'.
1399 unix_shell = ('/system/bin/sh' if
1400 hasattr(sys, 'getandroidapilevel') else '/bin/sh')
1401 args = [unix_shell, "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001402 if executable:
1403 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001404
Peter Astrandd38ddf42005-02-10 08:32:50 +00001405 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001406 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001407 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001408
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001409 # For transferring possible exec failure from child to parent.
1410 # Data format: "exception name:hex errno:description"
1411 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001412 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001413 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1414 low_fds_to_close = []
1415 while errpipe_write < 3:
1416 low_fds_to_close.append(errpipe_write)
1417 errpipe_write = os.dup(errpipe_write)
1418 for low_fd in low_fds_to_close:
1419 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001420 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001421 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001422 # We must avoid complex work that could involve
1423 # malloc or free in the child process to avoid
1424 # potential deadlocks, thus we do all this here.
1425 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001426
Victor Stinner372b8382011-06-21 17:24:21 +02001427 if env is not None:
Serhiy Storchakad174d242017-06-23 19:39:27 +03001428 env_list = []
1429 for k, v in env.items():
1430 k = os.fsencode(k)
1431 if b'=' in k:
1432 raise ValueError("illegal environment variable name")
1433 env_list.append(k + b'=' + os.fsencode(v))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001434 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001435 env_list = None # Use execv instead of execve.
1436 executable = os.fsencode(executable)
1437 if os.path.dirname(executable):
1438 executable_list = (executable,)
1439 else:
1440 # This matches the behavior of os._execvpe().
1441 executable_list = tuple(
1442 os.path.join(os.fsencode(dir), executable)
1443 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001444 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001445 fds_to_keep.add(errpipe_write)
1446 self.pid = _posixsubprocess.fork_exec(
1447 args, executable_list,
Serhiy Storchaka66bffd12017-04-19 21:12:46 +03001448 close_fds, tuple(sorted(map(int, fds_to_keep))),
1449 cwd, env_list,
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001450 p2cread, p2cwrite, c2pread, c2pwrite,
1451 errread, errwrite,
1452 errpipe_read, errpipe_write,
1453 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001454 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001455 finally:
1456 # be sure the FD is closed no matter what
1457 os.close(errpipe_write)
1458
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001459 # self._devnull is not always defined.
1460 devnull_fd = getattr(self, '_devnull', None)
1461 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001462 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001463 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001464 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001465 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001466 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001467 if devnull_fd is not None:
1468 os.close(devnull_fd)
1469 # Prevent a double close of these fds from __init__ on error.
1470 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001471
1472 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001473 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001474 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001475 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001476 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001477 errpipe_data += part
1478 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001479 break
Facundo Batista10706e22009-06-19 20:34:30 +00001480 finally:
1481 # be sure the FD is closed no matter what
1482 os.close(errpipe_read)
1483
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001484 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001485 try:
Victor Stinnera58e2c52016-05-20 12:08:12 +02001486 pid, sts = os.waitpid(self.pid, 0)
1487 if pid == self.pid:
1488 self._handle_exitstatus(sts)
1489 else:
1490 self.returncode = sys.maxsize
Victor Stinnera5e881d2015-01-14 17:07:59 +01001491 except ChildProcessError:
1492 pass
Victor Stinnera58e2c52016-05-20 12:08:12 +02001493
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001494 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001495 exception_name, hex_errno, err_msg = (
1496 errpipe_data.split(b':', 2))
Ammar Askar3fc499b2017-09-06 02:41:30 -04001497 # The encoding here should match the encoding
1498 # written in by the subprocess implementations
1499 # like _posixsubprocess
1500 err_msg = err_msg.decode()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001501 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001502 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001503 hex_errno = b'0'
Ammar Askar3fc499b2017-09-06 02:41:30 -04001504 err_msg = 'Bad exception data from child: {!r}'.format(
1505 bytes(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001506 child_exception_type = getattr(
1507 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001508 SubprocessError)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001509 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001510 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001511 child_exec_never_called = (err_msg == "noexec")
1512 if child_exec_never_called:
1513 err_msg = ""
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001514 # The error must be from chdir(cwd).
1515 err_filename = cwd
1516 else:
1517 err_filename = orig_executable
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001518 if errno_num != 0:
1519 err_msg = os.strerror(errno_num)
1520 if errno_num == errno.ENOENT:
Gregory P. Smith8621bb52017-08-24 14:58:25 -07001521 err_msg += ': ' + repr(err_filename)
1522 raise child_exception_type(errno_num, err_msg, err_filename)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001523 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001524
1525
Brett Cannon84df1e62010-05-14 00:33:40 +00001526 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1527 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001528 _WEXITSTATUS=os.WEXITSTATUS, _WIFSTOPPED=os.WIFSTOPPED,
1529 _WSTOPSIG=os.WSTOPSIG):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001530 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001531 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001532 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001533 if _WIFSIGNALED(sts):
1534 self.returncode = -_WTERMSIG(sts)
1535 elif _WIFEXITED(sts):
1536 self.returncode = _WEXITSTATUS(sts)
Gregory P. Smith50e16e32017-01-22 17:28:38 -08001537 elif _WIFSTOPPED(sts):
1538 self.returncode = -_WSTOPSIG(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001539 else:
1540 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001541 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001542
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001543
Brett Cannon84df1e62010-05-14 00:33:40 +00001544 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001545 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001546 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001547 attribute.
1548
1549 This method is called by __del__, so it cannot reference anything
1550 outside of the local scope (nor can any methods it calls).
1551
1552 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001553 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001554 if not self._waitpid_lock.acquire(False):
1555 # Something else is busy calling waitpid. Don't allow two
1556 # at once. We know nothing yet.
1557 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001558 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001559 if self.returncode is not None:
1560 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001561 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001562 if pid == self.pid:
1563 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001564 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001565 if _deadstate is not None:
1566 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001567 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001568 # This happens if SIGCLD is set to be ignored or
1569 # waiting for child processes has otherwise been
1570 # disabled for our process. This child is dead, we
1571 # can't get the status.
1572 # http://bugs.python.org/issue15756
1573 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001574 finally:
1575 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001576 return self.returncode
1577
1578
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001579 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001580 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001581 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001582 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001583 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001584 # This happens if SIGCLD is set to be ignored or waiting
1585 # for child processes has otherwise been disabled for our
1586 # process. This child is dead, we can't get the status.
1587 pid = self.pid
1588 sts = 0
1589 return (pid, sts)
1590
1591
Gregory P. Smithf4d644f2018-01-29 21:27:39 -08001592 def _wait(self, timeout):
1593 """Internal implementation of wait() on POSIX."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001594 if self.returncode is not None:
1595 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001596
Gregory P. Smith82604e02016-11-20 16:31:07 -08001597 if timeout is not None:
1598 endtime = _time() + timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001599 # Enter a busy loop if we have a timeout. This busy loop was
1600 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1601 delay = 0.0005 # 500 us -> initial delay of 1 ms
1602 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001603 if self._waitpid_lock.acquire(False):
1604 try:
1605 if self.returncode is not None:
1606 break # Another thread waited.
1607 (pid, sts) = self._try_wait(os.WNOHANG)
1608 assert pid == self.pid or pid == 0
1609 if pid == self.pid:
1610 self._handle_exitstatus(sts)
1611 break
1612 finally:
1613 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001614 remaining = self._remaining_time(endtime)
1615 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001616 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001617 delay = min(delay * 2, remaining, .05)
1618 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001619 else:
1620 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001621 with self._waitpid_lock:
1622 if self.returncode is not None:
1623 break # Another thread waited.
1624 (pid, sts) = self._try_wait(0)
1625 # Check the pid and loop as waitpid has been known to
1626 # return 0 even without WNOHANG in odd situations.
1627 # http://bugs.python.org/issue14396.
1628 if pid == self.pid:
1629 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001630 return self.returncode
1631
1632
Reid Kleckner2b228f02011-03-16 16:57:54 -04001633 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001634 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001635 # Flush stdio buffer. This might block, if the user has
1636 # been writing to .stdin in an uncontrolled fashion.
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001637 try:
1638 self.stdin.flush()
1639 except BrokenPipeError:
1640 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001641 if not input:
Gregory P. Smith ext:(%20%5BGoogle%20Inc.%5D)1ef8c7e2016-06-04 00:22:17 +00001642 try:
1643 self.stdin.close()
1644 except BrokenPipeError:
1645 pass # communicate() must ignore BrokenPipeError.
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001646
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001647 stdout = None
1648 stderr = None
1649
1650 # Only create this mapping if we haven't already.
1651 if not self._communication_started:
1652 self._fileobj2output = {}
1653 if self.stdout:
1654 self._fileobj2output[self.stdout] = []
1655 if self.stderr:
1656 self._fileobj2output[self.stderr] = []
1657
1658 if self.stdout:
1659 stdout = self._fileobj2output[self.stdout]
1660 if self.stderr:
1661 stderr = self._fileobj2output[self.stderr]
1662
1663 self._save_input(input)
1664
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001665 if self._input:
1666 input_view = memoryview(self._input)
1667
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001668 with _PopenSelector() as selector:
1669 if self.stdin and input:
1670 selector.register(self.stdin, selectors.EVENT_WRITE)
1671 if self.stdout:
1672 selector.register(self.stdout, selectors.EVENT_READ)
1673 if self.stderr:
1674 selector.register(self.stderr, selectors.EVENT_READ)
1675
1676 while selector.get_map():
1677 timeout = self._remaining_time(endtime)
1678 if timeout is not None and timeout < 0:
1679 raise TimeoutExpired(self.args, orig_timeout)
1680
1681 ready = selector.select(timeout)
1682 self._check_timeout(endtime, orig_timeout)
1683
1684 # XXX Rewrite these to use non-blocking I/O on the file
1685 # objects; they are no longer using C stdio!
1686
1687 for key, events in ready:
1688 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001689 chunk = input_view[self._input_offset :
1690 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001691 try:
1692 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001693 except BrokenPipeError:
1694 selector.unregister(key.fileobj)
1695 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001696 else:
1697 if self._input_offset >= len(self._input):
1698 selector.unregister(key.fileobj)
1699 key.fileobj.close()
1700 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001701 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001702 if not data:
1703 selector.unregister(key.fileobj)
1704 key.fileobj.close()
1705 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001706
1707 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001708
1709 # All data exchanged. Translate lists into strings.
1710 if stdout is not None:
1711 stdout = b''.join(stdout)
1712 if stderr is not None:
1713 stderr = b''.join(stderr)
1714
1715 # Translate newlines, if requested.
1716 # This also turns bytes into strings.
andyclegg7fed7bd2017-10-23 03:01:19 +01001717 if self.text_mode:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001718 if stdout is not None:
1719 stdout = self._translate_newlines(stdout,
Steve Dower050acae2016-09-06 20:16:17 -07001720 self.stdout.encoding,
1721 self.stdout.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001722 if stderr is not None:
1723 stderr = self._translate_newlines(stderr,
Steve Dower050acae2016-09-06 20:16:17 -07001724 self.stderr.encoding,
1725 self.stderr.errors)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001726
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001727 return (stdout, stderr)
1728
1729
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001730 def _save_input(self, input):
1731 # This method is called from the _communicate_with_*() methods
1732 # so that if we time out while communicating, we can continue
1733 # sending input if we retry.
1734 if self.stdin and self._input is None:
1735 self._input_offset = 0
1736 self._input = input
andyclegg7fed7bd2017-10-23 03:01:19 +01001737 if input is not None and self.text_mode:
Steve Dower050acae2016-09-06 20:16:17 -07001738 self._input = self._input.encode(self.stdin.encoding,
1739 self.stdin.errors)
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001740
1741
Christian Heimesa342c012008-04-20 21:01:16 +00001742 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001743 """Send a signal to the process."""
1744 # Skip signalling a process that we know has already died.
1745 if self.returncode is None:
1746 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00001747
1748 def terminate(self):
1749 """Terminate the process with SIGTERM
1750 """
1751 self.send_signal(signal.SIGTERM)
1752
1753 def kill(self):
1754 """Kill the process with SIGKILL
1755 """
1756 self.send_signal(signal.SIGKILL)