blob: 640519d8dbb29c8debdef08d762e5de6438113be [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
Raymond Hettinger837dd932004-10-17 16:36:53 +000010r"""subprocess - 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
13input/output/error pipes, and obtain their return codes. This module
Benjamin Peterson5eea8a72014-03-12 21:41:35 -050014intends to replace several older modules and functions:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000015
16os.system
17os.spawn*
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000018
19Information about how the subprocess module can be used to replace these
20modules and functions can be found below.
21
22
23
24Using the subprocess module
25===========================
26This module defines one class called Popen:
27
Gregory P. Smitha1ed5392013-03-23 11:44:25 -070028class Popen(args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000029 stdin=None, stdout=None, stderr=None,
Gregory P. Smith8edd99d2010-12-14 13:43:30 +000030 preexec_fn=None, close_fds=True, shell=False,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000031 cwd=None, env=None, universal_newlines=False,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +000032 startupinfo=None, creationflags=0,
Gregory P. Smith8edd99d2010-12-14 13:43:30 +000033 restore_signals=True, start_new_session=False, pass_fds=()):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000034
35
36Arguments are:
37
38args should be a string, or a sequence of program arguments. The
39program to execute is normally the first item in the args sequence or
40string, but can be explicitly set by using the executable argument.
41
Gregory P. Smithf5604852010-12-13 06:45:02 +000042On POSIX, with shell=False (default): In this case, the Popen class
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000043uses os.execvp() to execute the child program. args should normally
44be a sequence. A string will be treated as a sequence with the string
45as the only item (the program to execute).
46
Gregory P. Smithf5604852010-12-13 06:45:02 +000047On POSIX, with shell=True: If args is a string, it specifies the
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000048command string to execute through the shell. If args is a sequence,
49the first item specifies the command string, and any additional items
50will be treated as additional shell arguments.
51
52On Windows: the Popen class uses CreateProcess() to execute the child
53program, which operates on strings. If args is a sequence, it will be
54converted to a string using the list2cmdline method. Please note that
55not all MS Windows applications interpret the command line the same
56way: The list2cmdline is designed for applications using the same
57rules as the MS C runtime.
58
Gregory P. Smitha1ed5392013-03-23 11:44:25 -070059bufsize will be supplied as the corresponding argument to the io.open()
60function when creating the stdin/stdout/stderr pipe file objects:
610 means unbuffered (read & write are one system call and can return short),
621 means line buffered, any other positive value means use a buffer of
63approximately that size. A negative bufsize, the default, means the system
64default of io.DEFAULT_BUFFER_SIZE will be used.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000065
66stdin, stdout and stderr specify the executed programs' standard
67input, standard output and standard error file handles, respectively.
68Valid values are PIPE, an existing file descriptor (a positive
69integer), an existing file object, and None. PIPE indicates that a
70new pipe to the child should be created. With None, no redirection
71will occur; the child's file handles will be inherited from the
72parent. Additionally, stderr can be STDOUT, which indicates that the
73stderr data from the applications should be captured into the same
74file handle as for stdout.
75
Gregory P. Smithf5604852010-12-13 06:45:02 +000076On POSIX, if preexec_fn is set to a callable object, this object will be
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +000077called in the child process just before the child is executed. The use
78of preexec_fn is not thread safe, using it in the presence of threads
79could lead to a deadlock in the child process before the new executable
80is executed.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000081
82If close_fds is true, all file descriptors except 0, 1 and 2 will be
Gregory P. Smithf5604852010-12-13 06:45:02 +000083closed before the child process is executed. The default for close_fds
Gregory P. Smith8edd99d2010-12-14 13:43:30 +000084varies by platform: Always true on POSIX. True when stdin/stdout/stderr
85are None on Windows, false otherwise.
86
87pass_fds is an optional sequence of file descriptors to keep open between the
88parent and child. Providing any pass_fds implicitly sets close_fds to true.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000089
90if shell is true, the specified command will be executed through the
91shell.
92
93If cwd is not None, the current directory will be changed to cwd
94before the child is executed.
95
Gregory P. Smithf5604852010-12-13 06:45:02 +000096On POSIX, if restore_signals is True all signals that Python sets to
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +000097SIG_IGN are restored to SIG_DFL in the child process before the exec.
98Currently this includes the SIGPIPE, SIGXFZ and SIGXFSZ signals. This
99parameter does nothing on Windows.
100
Gregory P. Smithf5604852010-12-13 06:45:02 +0000101On POSIX, if start_new_session is True, the setsid() system call will be made
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000102in the child process prior to executing the command.
103
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000104If env is not None, it defines the environment variables for the new
105process.
106
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400107If universal_newlines is False, the file objects stdin, stdout and stderr
Ronald Oussoren385521c2013-07-07 09:26:45 +0200108are opened as binary files, and no line ending conversion is done.
109
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400110If universal_newlines is True, the file objects stdout and stderr are
111opened as a text file, but lines may be terminated by any of '\n',
Gregory P. Smithf5604852010-12-13 06:45:02 +0000112the Unix end-of-line convention, '\r', the old Macintosh convention or
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000113'\r\n', the Windows convention. All of these external representations
Gregory P. Smith1f8a40b2013-03-20 18:32:03 -0700114are seen as '\n' by the Python program. Also, the newlines attribute
115of the file objects stdout, stdin and stderr are not updated by the
116communicate() method.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000117
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400118In either case, the process being communicated with should start up
119expecting to receive bytes on its standard input and decode them with
120the same encoding they are sent in.
121
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000122The startupinfo and creationflags, if given, will be passed to the
123underlying CreateProcess() function. They can specify things such as
124appearance of the main window and priority for the new process.
125(Windows only)
126
127
Georg Brandlf9734072008-12-07 15:30:06 +0000128This module also defines some shortcut functions:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000129
Peter Astrand5f5e1412004-12-05 20:15:36 +0000130call(*popenargs, **kwargs):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000131 Run command with arguments. Wait for command to complete, then
132 return the returncode attribute.
133
134 The arguments are the same as for the Popen constructor. Example:
135
Florent Xicluna4886d242010-03-08 13:27:26 +0000136 >>> retcode = subprocess.call(["ls", "-l"])
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000137
Peter Astrand454f7672005-01-01 09:36:35 +0000138check_call(*popenargs, **kwargs):
139 Run command with arguments. Wait for command to complete. If the
140 exit code was zero then return, otherwise raise
141 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000142 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000143
144 The arguments are the same as for the Popen constructor. Example:
145
Florent Xicluna4886d242010-03-08 13:27:26 +0000146 >>> subprocess.check_call(["ls", "-l"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000147 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000148
Brett Cannona23810f2008-05-26 19:04:21 +0000149getstatusoutput(cmd):
150 Return (status, output) of executing cmd in a shell.
151
Tim Golden60798142013-11-05 12:57:25 +0000152 Execute the string 'cmd' in a shell with 'check_output' and
153 return a 2-tuple (status, output). Universal newlines mode is used,
154 meaning that the result with be decoded to a string.
155
156 A trailing newline is stripped from the output.
157 The exit status for the command can be interpreted
158 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000159
Brett Cannona23810f2008-05-26 19:04:21 +0000160 >>> subprocess.getstatusoutput('ls /bin/ls')
161 (0, '/bin/ls')
162 >>> subprocess.getstatusoutput('cat /bin/junk')
163 (256, 'cat: /bin/junk: No such file or directory')
164 >>> subprocess.getstatusoutput('/bin/junk')
165 (256, 'sh: /bin/junk: not found')
166
167getoutput(cmd):
168 Return output (stdout or stderr) of executing cmd in a shell.
169
170 Like getstatusoutput(), except the exit status is ignored and the return
171 value is a string containing the command's output. Example:
172
Brett Cannona23810f2008-05-26 19:04:21 +0000173 >>> subprocess.getoutput('ls /bin/ls')
174 '/bin/ls'
175
Georg Brandlf9734072008-12-07 15:30:06 +0000176check_output(*popenargs, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700177 Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000178
Georg Brandl2708f3a2009-12-20 14:38:23 +0000179 If the exit code was non-zero it raises a CalledProcessError. The
180 CalledProcessError object will have the return code in the returncode
181 attribute and output in the output attribute.
Georg Brandlf9734072008-12-07 15:30:06 +0000182
Georg Brandl2708f3a2009-12-20 14:38:23 +0000183 The arguments are the same as for the Popen constructor. Example:
Georg Brandlf9734072008-12-07 15:30:06 +0000184
Georg Brandl2708f3a2009-12-20 14:38:23 +0000185 >>> output = subprocess.check_output(["ls", "-l", "/dev/null"])
Georg Brandlf9734072008-12-07 15:30:06 +0000186
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300187 There is an additional optional argument, "input", allowing you to
188 pass a string to the subprocess's stdin. If you use this argument
189 you may not also use the Popen constructor's "stdin" argument.
Brett Cannona23810f2008-05-26 19:04:21 +0000190
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400191 If universal_newlines is set to True, the "input" argument must
192 be a string rather than bytes, and the return value will be a string.
193
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000194Exceptions
195----------
196Exceptions raised in the child process, before the new program has
197started to execute, will be re-raised in the parent. Additionally,
198the exception object will have one extra attribute called
199'child_traceback', which is a string containing traceback information
Ezio Melotti30b9d5d2013-08-17 15:50:46 +0300200from the child's point of view.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000201
202The most common exception raised is OSError. This occurs, for
203example, when trying to execute a non-existent file. Applications
204should prepare for OSErrors.
205
206A ValueError will be raised if Popen is called with invalid arguments.
207
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400208Exceptions defined within this module inherit from SubprocessError.
209check_call() and check_output() will raise CalledProcessError if the
Gregory P. Smithb4039aa2011-03-14 14:16:20 -0400210called process returns a non-zero return code. TimeoutExpired
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400211be raised if a timeout was specified and expired.
Peter Astrand454f7672005-01-01 09:36:35 +0000212
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000213
214Security
215--------
216Unlike some other popen functions, this implementation will never call
217/bin/sh implicitly. This means that all characters, including shell
218metacharacters, can safely be passed to child processes.
219
220
221Popen objects
222=============
223Instances of the Popen class have the following methods:
224
225poll()
226 Check if child process has terminated. Returns returncode
227 attribute.
228
229wait()
230 Wait for child process to terminate. Returns returncode attribute.
231
232communicate(input=None)
233 Interact with process: Send data to stdin. Read data from stdout
234 and stderr, until end-of-file is reached. Wait for process to
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400235 terminate. The optional input argument should be data to be
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000236 sent to the child process, or None, if no data should be sent to
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400237 the child. If the Popen instance was constructed with universal_newlines
238 set to True, the input argument should be a string and will be encoded
239 using the preferred system encoding (see locale.getpreferredencoding);
240 if universal_newlines is False, the input argument should be a
241 byte string.
Tim Peterse718f612004-10-12 21:51:32 +0000242
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000243 communicate() returns a tuple (stdout, stderr).
244
245 Note: The data read is buffered in memory, so do not use this
246 method if the data size is large or unlimited.
247
248The following attributes are also available:
249
250stdin
251 If the stdin argument is PIPE, this attribute is a file object
252 that provides input to the child process. Otherwise, it is None.
253
254stdout
255 If the stdout argument is PIPE, this attribute is a file object
256 that provides output from the child process. Otherwise, it is
257 None.
258
259stderr
260 If the stderr argument is PIPE, this attribute is file object that
261 provides error output from the child process. Otherwise, it is
262 None.
263
264pid
265 The process ID of the child process.
266
267returncode
268 The child return code. A None value indicates that the process
269 hasn't terminated yet. A negative value -N indicates that the
Gregory P. Smithf5604852010-12-13 06:45:02 +0000270 child was terminated by signal N (POSIX only).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000271
272
273Replacing older functions with the subprocess module
274====================================================
275In this section, "a ==> b" means that b can be used as a replacement
276for a.
277
278Note: All functions in this section fail (more or less) silently if
279the executed program cannot be found; this module raises an OSError
280exception.
281
282In the following examples, we assume that the subprocess module is
283imported with "from subprocess import *".
284
285
286Replacing /bin/sh shell backquote
287---------------------------------
288output=`mycmd myarg`
289==>
290output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
291
292
293Replacing shell pipe line
294-------------------------
295output=`dmesg | grep hda`
296==>
297p1 = Popen(["dmesg"], stdout=PIPE)
Peter Astrand6fdf3cb2004-11-30 18:06:42 +0000298p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000299output = p2.communicate()[0]
300
301
302Replacing os.system()
303---------------------
304sts = os.system("mycmd" + " myarg")
305==>
306p = Popen("mycmd" + " myarg", shell=True)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000307pid, sts = os.waitpid(p.pid, 0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000308
309Note:
310
311* Calling the program through the shell is usually not required.
312
313* It's easier to look at the returncode attribute than the
314 exitstatus.
315
316A more real-world example would look like this:
317
318try:
319 retcode = call("mycmd" + " myarg", shell=True)
320 if retcode < 0:
Guido van Rossumc2f93dc2007-05-24 00:50:02 +0000321 print("Child was terminated by signal", -retcode, file=sys.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000322 else:
Guido van Rossumc2f93dc2007-05-24 00:50:02 +0000323 print("Child returned", retcode, file=sys.stderr)
324except OSError as e:
325 print("Execution failed:", e, file=sys.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000326
327
328Replacing os.spawn*
329-------------------
Tim Peterse718f612004-10-12 21:51:32 +0000330P_NOWAIT example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000331
332pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")
333==>
334pid = Popen(["/bin/mycmd", "myarg"]).pid
335
336
337P_WAIT example:
338
339retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg")
340==>
341retcode = call(["/bin/mycmd", "myarg"])
342
343
Tim Peterse718f612004-10-12 21:51:32 +0000344Vector example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000345
346os.spawnvp(os.P_NOWAIT, path, args)
347==>
348Popen([path] + args[1:])
349
350
Tim Peterse718f612004-10-12 21:51:32 +0000351Environment example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000352
353os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env)
354==>
355Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000356"""
357
358import sys
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700359_mswindows = (sys.platform == "win32")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000360
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000361import io
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000362import os
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400363import time
Christian Heimesa342c012008-04-20 21:01:16 +0000364import signal
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000365import builtins
Gregory P. Smithd23047b2010-12-04 09:10:44 +0000366import warnings
Ross Lagerwall4f61b022011-04-05 15:34:00 +0200367import errno
Victor Stinnerae586492014-09-02 23:18:25 +0200368from time import monotonic as _time
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000369
Peter Astrand454f7672005-01-01 09:36:35 +0000370# Exception classes used by this module.
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400371class SubprocessError(Exception): pass
372
373
374class CalledProcessError(SubprocessError):
Georg Brandlf9734072008-12-07 15:30:06 +0000375 """This exception is raised when a process run by check_call() or
376 check_output() returns a non-zero exit status.
377 The exit status will be stored in the returncode attribute;
378 check_output() will also store the output in the output attribute.
379 """
Gregory P. Smith6e730002015-04-14 16:14:25 -0700380 def __init__(self, returncode, cmd, output=None, stderr=None):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000381 self.returncode = returncode
382 self.cmd = cmd
Georg Brandlf9734072008-12-07 15:30:06 +0000383 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -0700384 self.stderr = stderr
385
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000386 def __str__(self):
387 return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode)
388
Gregory P. Smith6e730002015-04-14 16:14:25 -0700389 @property
390 def stdout(self):
391 """Alias for output attribute, to match stderr"""
392 return self.output
393
394 @stdout.setter
395 def stdout(self, value):
396 # There's no obvious reason to set this, but allow it anyway so
397 # .stdout is a transparent alias for .output
398 self.output = value
399
Peter Astrand454f7672005-01-01 09:36:35 +0000400
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400401class TimeoutExpired(SubprocessError):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400402 """This exception is raised when the timeout expires while waiting for a
403 child process.
404 """
Gregory P. Smith6e730002015-04-14 16:14:25 -0700405 def __init__(self, cmd, timeout, output=None, stderr=None):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400406 self.cmd = cmd
Reid Kleckner2b228f02011-03-16 16:57:54 -0400407 self.timeout = timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400408 self.output = output
Gregory P. Smith6e730002015-04-14 16:14:25 -0700409 self.stderr = stderr
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400410
411 def __str__(self):
412 return ("Command '%s' timed out after %s seconds" %
413 (self.cmd, self.timeout))
414
Gregory P. Smith6e730002015-04-14 16:14:25 -0700415 @property
416 def stdout(self):
417 return self.output
418
419 @stdout.setter
420 def stdout(self, value):
421 # There's no obvious reason to set this, but allow it anyway so
422 # .stdout is a transparent alias for .output
423 self.output = value
424
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400425
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700426if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000427 import threading
428 import msvcrt
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200429 import _winapi
Brian Curtin1ce6b582010-04-24 16:19:22 +0000430 class STARTUPINFO:
431 dwFlags = 0
432 hStdInput = None
433 hStdOutput = None
434 hStdError = None
435 wShowWindow = 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000436else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -0700437 import _posixsubprocess
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100438 import select
439 import selectors
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700440 try:
441 import threading
442 except ImportError:
443 import dummy_threading as threading
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000444
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000445 # When select or poll has indicated that the file is writable,
446 # we can write up to _PIPE_BUF bytes without risk of blocking.
447 # POSIX defines PIPE_BUF as >= 512.
448 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
449
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100450 # poll/select have the advantage of not requiring any extra file
451 # descriptor, contrarily to epoll/kqueue (also, they require a single
452 # syscall).
453 if hasattr(selectors, 'PollSelector'):
454 _PopenSelector = selectors.PollSelector
455 else:
456 _PopenSelector = selectors.SelectSelector
457
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000458
Brett Cannona23810f2008-05-26 19:04:21 +0000459__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
Gregory P. Smith6e730002015-04-14 16:14:25 -0700460 "getoutput", "check_output", "run", "CalledProcessError", "DEVNULL",
461 "SubprocessError", "TimeoutExpired", "CompletedProcess"]
Gregory P. Smithace55862015-04-07 15:57:54 -0700462 # NOTE: We intentionally exclude list2cmdline as it is
463 # considered an internal implementation detail. issue10838.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000464
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700465if _mswindows:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200466 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
467 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
468 STD_ERROR_HANDLE, SW_HIDE,
469 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW)
Brian Curtin5d9deaa2011-04-29 16:24:07 -0500470
Brian Curtin08fd8d92011-04-29 16:11:30 -0500471 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
Brian Curtin8b8e7f42011-04-29 15:48:13 -0500472 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
473 "STD_ERROR_HANDLE", "SW_HIDE",
474 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW"])
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200475
476 class Handle(int):
477 closed = False
478
479 def Close(self, CloseHandle=_winapi.CloseHandle):
480 if not self.closed:
481 self.closed = True
482 CloseHandle(self)
483
484 def Detach(self):
485 if not self.closed:
486 self.closed = True
487 return int(self)
488 raise ValueError("already closed")
489
490 def __repr__(self):
Serhiy Storchaka465e60e2014-07-25 23:36:00 +0300491 return "%s(%d)" % (self.__class__.__name__, int(self))
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200492
493 __del__ = Close
494 __str__ = __repr__
495
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000496
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200497# This lists holds Popen instances for which the underlying process had not
498# exited at the time its __del__ method got called: those processes are wait()ed
499# for synchronously from _cleanup() when a new Popen object is created, to avoid
500# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000501_active = []
502
503def _cleanup():
504 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000505 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200506 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000507 try:
508 _active.remove(inst)
509 except ValueError:
510 # This can happen if two threads create a new Popen instance.
511 # It's harmless that it was already removed, so ignore.
512 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000513
514PIPE = -1
515STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200516DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000517
518
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200519# XXX This function is only used by multiprocessing and the test suite,
520# but it's here so that it can be imported when Python is compiled without
521# threads.
522
Victor Stinner9def2842016-01-18 12:15:08 +0100523def _optim_args_from_interpreter_flags():
524 """Return a list of command-line arguments reproducing the current
525 optimization settings in sys.flags."""
526 args = []
527 value = sys.flags.optimize
528 if value > 0:
529 args.append('-' + 'O' * value)
530 return args
531
532
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200533def _args_from_interpreter_flags():
534 """Return a list of command-line arguments reproducing the current
535 settings in sys.flags and sys.warnoptions."""
536 flag_opt_map = {
537 'debug': 'd',
538 # 'inspect': 'i',
539 # 'interactive': 'i',
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200540 'dont_write_bytecode': 'B',
541 'no_user_site': 's',
542 'no_site': 'S',
543 'ignore_environment': 'E',
544 'verbose': 'v',
545 'bytes_warning': 'b',
546 'quiet': 'q',
Victor Stinner9def2842016-01-18 12:15:08 +0100547 # -O is handled in _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200548 }
Victor Stinner9def2842016-01-18 12:15:08 +0100549 args = _optim_args_from_interpreter_flags()
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200550 for flag, opt in flag_opt_map.items():
551 v = getattr(sys.flags, flag)
552 if v > 0:
553 args.append('-' + opt * v)
554 for opt in sys.warnoptions:
555 args.append('-W' + opt)
556 return args
557
558
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400559def call(*popenargs, timeout=None, **kwargs):
560 """Run command with arguments. Wait for command to complete or
561 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000562
563 The arguments are the same as for the Popen constructor. Example:
564
565 retcode = call(["ls", "-l"])
566 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200567 with Popen(*popenargs, **kwargs) as p:
568 try:
569 return p.wait(timeout=timeout)
570 except:
571 p.kill()
572 p.wait()
573 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000574
575
Peter Astrand454f7672005-01-01 09:36:35 +0000576def check_call(*popenargs, **kwargs):
577 """Run command with arguments. Wait for command to complete. If
578 the exit code was zero then return, otherwise raise
579 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000580 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000581
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400582 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000583
584 check_call(["ls", "-l"])
585 """
586 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000587 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000588 cmd = kwargs.get("args")
589 if cmd is None:
590 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000591 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000592 return 0
593
594
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400595def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700596 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000597
598 If the exit code was non-zero it raises a CalledProcessError. The
599 CalledProcessError object will have the return code in the returncode
600 attribute and output in the output attribute.
601
602 The arguments are the same as for the Popen constructor. Example:
603
604 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000605 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000606
607 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000608 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000609
610 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000611 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000612 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000613 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700614
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300615 There is an additional optional argument, "input", allowing you to
616 pass a string to the subprocess's stdin. If you use this argument
617 you may not also use the Popen constructor's "stdin" argument, as
618 it too will be used internally. Example:
619
620 >>> check_output(["sed", "-e", "s/foo/bar/"],
621 ... input=b"when in the course of fooman events\n")
622 b'when in the course of barman events\n'
623
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400624 If universal_newlines=True is passed, the "input" argument must be a
625 string and the return value will be a string rather than bytes.
Georg Brandlf9734072008-12-07 15:30:06 +0000626 """
627 if 'stdout' in kwargs:
628 raise ValueError('stdout argument not allowed, it will be overridden.')
Gregory P. Smith6e730002015-04-14 16:14:25 -0700629
630 if 'input' in kwargs and kwargs['input'] is None:
631 # Explicitly passing input=None was previously equivalent to passing an
632 # empty string. That is maintained here for backwards compatibility.
633 kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b''
634
635 return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
636 **kwargs).stdout
637
638
639class CompletedProcess(object):
640 """A process that has finished running.
641
642 This is returned by run().
643
644 Attributes:
645 args: The list or str args passed to run().
646 returncode: The exit code of the process, negative for signals.
647 stdout: The standard output (None if not captured).
648 stderr: The standard error (None if not captured).
649 """
650 def __init__(self, args, returncode, stdout=None, stderr=None):
651 self.args = args
652 self.returncode = returncode
653 self.stdout = stdout
654 self.stderr = stderr
655
656 def __repr__(self):
657 args = ['args={!r}'.format(self.args),
658 'returncode={!r}'.format(self.returncode)]
659 if self.stdout is not None:
660 args.append('stdout={!r}'.format(self.stdout))
661 if self.stderr is not None:
662 args.append('stderr={!r}'.format(self.stderr))
663 return "{}({})".format(type(self).__name__, ', '.join(args))
664
665 def check_returncode(self):
666 """Raise CalledProcessError if the exit code is non-zero."""
667 if self.returncode:
668 raise CalledProcessError(self.returncode, self.args, self.stdout,
669 self.stderr)
670
671
672def run(*popenargs, input=None, timeout=None, check=False, **kwargs):
673 """Run command with arguments and return a CompletedProcess instance.
674
675 The returned instance will have attributes args, returncode, stdout and
676 stderr. By default, stdout and stderr are not captured, and those attributes
677 will be None. Pass stdout=PIPE and/or stderr=PIPE in order to capture them.
678
679 If check is True and the exit code was non-zero, it raises a
680 CalledProcessError. The CalledProcessError object will have the return code
681 in the returncode attribute, and output & stderr attributes if those streams
682 were captured.
683
684 If timeout is given, and the process takes too long, a TimeoutExpired
685 exception will be raised.
686
687 There is an optional argument "input", allowing you to
688 pass a string to the subprocess's stdin. If you use this argument
689 you may not also use the Popen constructor's "stdin" argument, as
690 it will be used internally.
691
692 The other arguments are the same as for the Popen constructor.
693
694 If universal_newlines=True is passed, the "input" argument must be a
695 string and stdout/stderr in the returned object will be strings rather than
696 bytes.
697 """
698 if input is not None:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300699 if 'stdin' in kwargs:
700 raise ValueError('stdin and input arguments may not both be used.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300701 kwargs['stdin'] = PIPE
Gregory P. Smith6e730002015-04-14 16:14:25 -0700702
703 with Popen(*popenargs, **kwargs) as process:
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200704 try:
Gregory P. Smith6e730002015-04-14 16:14:25 -0700705 stdout, stderr = process.communicate(input, timeout=timeout)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200706 except TimeoutExpired:
707 process.kill()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700708 stdout, stderr = process.communicate()
709 raise TimeoutExpired(process.args, timeout, output=stdout,
710 stderr=stderr)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200711 except:
712 process.kill()
713 process.wait()
714 raise
715 retcode = process.poll()
Gregory P. Smith6e730002015-04-14 16:14:25 -0700716 if check and retcode:
717 raise CalledProcessError(retcode, process.args,
718 output=stdout, stderr=stderr)
719 return CompletedProcess(process.args, retcode, stdout, stderr)
Peter Astrand454f7672005-01-01 09:36:35 +0000720
721
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000722def list2cmdline(seq):
723 """
724 Translate a sequence of arguments into a command line
725 string, using the same rules as the MS C runtime:
726
727 1) Arguments are delimited by white space, which is either a
728 space or a tab.
729
730 2) A string surrounded by double quotation marks is
731 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000732 contained within. A quoted string can be embedded in an
733 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000734
735 3) A double quotation mark preceded by a backslash is
736 interpreted as a literal double quotation mark.
737
738 4) Backslashes are interpreted literally, unless they
739 immediately precede a double quotation mark.
740
741 5) If backslashes immediately precede a double quotation mark,
742 every pair of backslashes is interpreted as a literal
743 backslash. If the number of backslashes is odd, the last
744 backslash escapes the next double quotation mark as
745 described in rule 3.
746 """
747
748 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000749 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
750 # or search http://msdn.microsoft.com for
751 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000752 result = []
753 needquote = False
754 for arg in seq:
755 bs_buf = []
756
757 # Add a space to separate this argument from the others
758 if result:
759 result.append(' ')
760
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000761 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000762 if needquote:
763 result.append('"')
764
765 for c in arg:
766 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000767 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000768 bs_buf.append(c)
769 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000770 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000771 result.append('\\' * len(bs_buf)*2)
772 bs_buf = []
773 result.append('\\"')
774 else:
775 # Normal char
776 if bs_buf:
777 result.extend(bs_buf)
778 bs_buf = []
779 result.append(c)
780
Christian Heimesfdab48e2008-01-20 09:06:41 +0000781 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000782 if bs_buf:
783 result.extend(bs_buf)
784
785 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000786 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000787 result.append('"')
788
789 return ''.join(result)
790
791
Brett Cannona23810f2008-05-26 19:04:21 +0000792# Various tools for executing commands and looking at their output and status.
793#
Brett Cannona23810f2008-05-26 19:04:21 +0000794
795def getstatusoutput(cmd):
Tim Golden60798142013-11-05 12:57:25 +0000796 """ Return (status, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000797
Tim Golden60798142013-11-05 12:57:25 +0000798 Execute the string 'cmd' in a shell with 'check_output' and
799 return a 2-tuple (status, output). Universal newlines mode is used,
800 meaning that the result with be decoded to a string.
801
802 A trailing newline is stripped from the output.
803 The exit status for the command can be interpreted
804 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000805
806 >>> import subprocess
807 >>> subprocess.getstatusoutput('ls /bin/ls')
808 (0, '/bin/ls')
809 >>> subprocess.getstatusoutput('cat /bin/junk')
810 (256, 'cat: /bin/junk: No such file or directory')
811 >>> subprocess.getstatusoutput('/bin/junk')
812 (256, 'sh: /bin/junk: not found')
813 """
Tim Goldene0041752013-11-03 12:53:17 +0000814 try:
815 data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT)
816 status = 0
817 except CalledProcessError as ex:
818 data = ex.output
819 status = ex.returncode
820 if data[-1:] == '\n':
821 data = data[:-1]
822 return status, data
Brett Cannona23810f2008-05-26 19:04:21 +0000823
824def getoutput(cmd):
825 """Return output (stdout or stderr) of executing cmd in a shell.
826
827 Like getstatusoutput(), except the exit status is ignored and the return
828 value is a string containing the command's output. Example:
829
830 >>> import subprocess
831 >>> subprocess.getoutput('ls /bin/ls')
832 '/bin/ls'
833 """
834 return getstatusoutput(cmd)[1]
835
836
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000837_PLATFORM_DEFAULT_CLOSE_FDS = object()
Gregory P. Smithf5604852010-12-13 06:45:02 +0000838
839
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000840class Popen(object):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200841
842 _child_created = False # Set here since __del__ checks it
843
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700844 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000845 stdin=None, stdout=None, stderr=None,
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000846 preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,
847 shell=False, cwd=None, env=None, universal_newlines=False,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000848 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000849 restore_signals=True, start_new_session=False,
850 pass_fds=()):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000851 """Create new Popen instance."""
852 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700853 # Held while anything is calling waitpid before returncode has been
854 # updated to prevent clobbering returncode if wait() or poll() are
855 # called from multiple threads at once. After acquiring the lock,
856 # code must re-check self.returncode to see if another thread just
857 # finished a waitpid() call.
858 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000859
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400860 self._input = None
861 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000862 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700863 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000864 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000865 raise TypeError("bufsize must be an integer")
866
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700867 if _mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000868 if preexec_fn is not None:
869 raise ValueError("preexec_fn is not supported on Windows "
870 "platforms")
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000871 any_stdio_set = (stdin is not None or stdout is not None or
872 stderr is not None)
873 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
874 if any_stdio_set:
875 close_fds = False
876 else:
877 close_fds = True
878 elif close_fds and any_stdio_set:
879 raise ValueError(
880 "close_fds is not supported on Windows platforms"
881 " if you redirect stdin/stdout/stderr")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000882 else:
883 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000884 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
885 close_fds = True
886 if pass_fds and not close_fds:
887 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
888 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000889 if startupinfo is not None:
890 raise ValueError("startupinfo is only supported on Windows "
891 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000892 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000893 raise ValueError("creationflags is only supported on Windows "
894 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000895
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400896 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000897 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000898 self.stdout = None
899 self.stderr = None
900 self.pid = None
901 self.returncode = None
902 self.universal_newlines = universal_newlines
903
904 # Input and output objects. The general principle is like
905 # this:
906 #
907 # Parent Child
908 # ------ -----
909 # p2cwrite ---stdin---> p2cread
910 # c2pread <--stdout--- c2pwrite
911 # errread <--stderr--- errwrite
912 #
913 # On POSIX, the child objects are file descriptors. On
914 # Windows, these are Windows file handles. The parent objects
915 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000916 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000917 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000918
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000919 (p2cread, p2cwrite,
920 c2pread, c2pwrite,
921 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
922
Antoine Pitrouc9982322011-01-04 19:07:07 +0000923 # We wrap OS handles *before* launching the child, otherwise a
924 # quickly terminating child could make our fds unwrappable
925 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000926
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -0700927 if _mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000928 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000929 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000930 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000931 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000932 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000933 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000934
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000935 if p2cwrite != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000936 self.stdin = io.open(p2cwrite, 'wb', bufsize)
Andrew Svetlov592df202012-08-15 17:36:15 +0300937 if universal_newlines:
Antoine Pitrouafe8d062014-09-21 21:10:56 +0200938 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
939 line_buffering=(bufsize == 1))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000940 if c2pread != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000941 self.stdout = io.open(c2pread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000942 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000943 self.stdout = io.TextIOWrapper(self.stdout)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000944 if errread != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000945 self.stderr = io.open(errread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000946 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000947 self.stderr = io.TextIOWrapper(self.stderr)
Tim Peterse718f612004-10-12 21:51:32 +0000948
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700949 self._closed_child_pipe_fds = False
Antoine Pitrouc9982322011-01-04 19:07:07 +0000950 try:
951 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300952 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000953 startupinfo, creationflags, shell,
954 p2cread, p2cwrite,
955 c2pread, c2pwrite,
956 errread, errwrite,
957 restore_signals, start_new_session)
958 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800959 # Cleanup if the child failed starting.
960 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000961 try:
962 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200963 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800964 pass # Ignore EBADF or other errors.
965
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700966 if not self._closed_child_pipe_fds:
967 to_close = []
968 if stdin == PIPE:
969 to_close.append(p2cread)
970 if stdout == PIPE:
971 to_close.append(c2pwrite)
972 if stderr == PIPE:
973 to_close.append(errwrite)
974 if hasattr(self, '_devnull'):
975 to_close.append(self._devnull)
976 for fd in to_close:
977 try:
978 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700979 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700980 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800981
Antoine Pitrouc9982322011-01-04 19:07:07 +0000982 raise
983
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000984
Guido van Rossum98297ee2007-11-06 21:34:58 +0000985 def _translate_newlines(self, data, encoding):
Andrew Svetlov82860712012-08-19 22:13:41 +0300986 data = data.decode(encoding)
987 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000988
Brian Curtin79cdb662010-12-03 02:46:02 +0000989 def __enter__(self):
990 return self
991
992 def __exit__(self, type, value, traceback):
993 if self.stdout:
994 self.stdout.close()
995 if self.stderr:
996 self.stderr.close()
Serhiy Storchakaab900c22015-02-28 12:43:08 +0200997 try: # Flushing a BufferedWriter may raise an error
998 if self.stdin:
999 self.stdin.close()
1000 finally:
1001 # Wait for the process to terminate, to avoid zombies.
1002 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001003
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001004 def __del__(self, _maxsize=sys.maxsize):
1005 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001006 # We didn't get to successfully create a child process.
1007 return
1008 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +00001009 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001010 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001011 # Child is still running, keep us alive until we can wait on it.
1012 _active.append(self)
1013
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001014 def _get_devnull(self):
1015 if not hasattr(self, '_devnull'):
1016 self._devnull = os.open(os.devnull, os.O_RDWR)
1017 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001018
Victor Stinnera5e881d2015-01-14 17:07:59 +01001019 def _stdin_write(self, input):
1020 if input:
1021 try:
1022 self.stdin.write(input)
1023 except BrokenPipeError:
1024 # communicate() must ignore broken pipe error
1025 pass
1026 except OSError as e:
1027 if e.errno == errno.EINVAL and self.poll() is not None:
1028 # Issue #19612: On Windows, stdin.write() fails with EINVAL
1029 # if the process already exited before the write
1030 pass
1031 else:
1032 raise
1033 self.stdin.close()
1034
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001035 def communicate(self, input=None, timeout=None):
Peter Astrand23109f02005-03-03 20:28:59 +00001036 """Interact with process: Send data to stdin. Read data from
1037 stdout and stderr, until end-of-file is reached. Wait for
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -04001038 process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +00001039
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -04001040 The optional "input" argument should be data to be sent to the
1041 child process (if self.universal_newlines is True, this should
1042 be a string; if it is False, "input" should be bytes), or
1043 None, if no data should be sent to the child.
1044
1045 communicate() returns a tuple (stdout, stderr). These will be
1046 bytes or, if self.universal_newlines was True, a string.
1047 """
Peter Astrand23109f02005-03-03 20:28:59 +00001048
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001049 if self._communication_started and input:
1050 raise ValueError("Cannot send input after starting communication")
1051
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001052 # Optimization: If we are not worried about timeouts, we haven't
1053 # started communicating, and we have one or zero pipes, using select()
1054 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +02001055 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001056 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +00001057 stdout = None
1058 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +00001059 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001060 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +00001061 elif self.stdout:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001062 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001063 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +00001064 elif self.stderr:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001065 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +00001066 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +00001067 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +02001068 else:
1069 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +02001070 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +02001071 else:
1072 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +00001073
Victor Stinner7a8d0812011-04-05 13:13:08 +02001074 try:
1075 stdout, stderr = self._communicate(input, endtime, timeout)
1076 finally:
1077 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001078
Victor Stinner7a8d0812011-04-05 13:13:08 +02001079 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001080
1081 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +00001082
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001083
Georg Brandl6aa2d1f2008-08-12 08:35:52 +00001084 def poll(self):
1085 return self._internal_poll()
1086
1087
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001088 def _remaining_time(self, endtime):
1089 """Convenience for _communicate when computing timeouts."""
1090 if endtime is None:
1091 return None
1092 else:
Victor Stinner949d8c92012-05-30 13:30:32 +02001093 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001094
1095
Reid Kleckner2b228f02011-03-16 16:57:54 -04001096 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001097 """Convenience for checking if a timeout has expired."""
1098 if endtime is None:
1099 return
Victor Stinner949d8c92012-05-30 13:30:32 +02001100 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001101 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001102
1103
Gregory P. Smithcb6fdf22015-04-07 16:11:33 -07001104 if _mswindows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001105 #
1106 # Windows methods
1107 #
1108 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001109 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001110 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1111 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001112 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001113 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +00001114
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001115 p2cread, p2cwrite = -1, -1
1116 c2pread, c2pwrite = -1, -1
1117 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001118
Peter Astrandd38ddf42005-02-10 08:32:50 +00001119 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001120 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001121 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001122 p2cread, _ = _winapi.CreatePipe(None, 0)
1123 p2cread = Handle(p2cread)
1124 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001125 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001126 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
1127 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001128 elif stdin == DEVNULL:
1129 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001130 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001131 p2cread = msvcrt.get_osfhandle(stdin)
1132 else:
1133 # Assuming file-like object
1134 p2cread = msvcrt.get_osfhandle(stdin.fileno())
1135 p2cread = self._make_inheritable(p2cread)
1136
Peter Astrandd38ddf42005-02-10 08:32:50 +00001137 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001138 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001139 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001140 _, c2pwrite = _winapi.CreatePipe(None, 0)
1141 c2pwrite = Handle(c2pwrite)
1142 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001143 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001144 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
1145 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001146 elif stdout == DEVNULL:
1147 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001148 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001149 c2pwrite = msvcrt.get_osfhandle(stdout)
1150 else:
1151 # Assuming file-like object
1152 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1153 c2pwrite = self._make_inheritable(c2pwrite)
1154
Peter Astrandd38ddf42005-02-10 08:32:50 +00001155 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001156 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001157 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001158 _, errwrite = _winapi.CreatePipe(None, 0)
1159 errwrite = Handle(errwrite)
1160 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001161 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001162 errread, errwrite = _winapi.CreatePipe(None, 0)
1163 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001164 elif stderr == STDOUT:
1165 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001166 elif stderr == DEVNULL:
1167 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001168 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001169 errwrite = msvcrt.get_osfhandle(stderr)
1170 else:
1171 # Assuming file-like object
1172 errwrite = msvcrt.get_osfhandle(stderr.fileno())
1173 errwrite = self._make_inheritable(errwrite)
1174
1175 return (p2cread, p2cwrite,
1176 c2pread, c2pwrite,
1177 errread, errwrite)
1178
1179
1180 def _make_inheritable(self, handle):
1181 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001182 h = _winapi.DuplicateHandle(
1183 _winapi.GetCurrentProcess(), handle,
1184 _winapi.GetCurrentProcess(), 0, 1,
1185 _winapi.DUPLICATE_SAME_ACCESS)
1186 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001187
1188
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001189 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001190 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001191 startupinfo, creationflags, shell,
1192 p2cread, p2cwrite,
1193 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001194 errread, errwrite,
1195 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001196 """Execute program (MS Windows version)"""
1197
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001198 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001199
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001200 if not isinstance(args, str):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001201 args = list2cmdline(args)
1202
Peter Astrandc1d65362004-11-07 14:30:34 +00001203 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001204 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001205 startupinfo = STARTUPINFO()
Victor Stinnerb3693582010-05-21 20:13:12 +00001206 if -1 not in (p2cread, c2pwrite, errwrite):
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001207 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001208 startupinfo.hStdInput = p2cread
1209 startupinfo.hStdOutput = c2pwrite
1210 startupinfo.hStdError = errwrite
1211
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001212 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001213 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1214 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001215 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001216 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001217
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001218 # Start the process
1219 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001220 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001221 # no special security
1222 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001223 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001224 creationflags,
1225 env,
1226 cwd,
1227 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001228 finally:
1229 # Child is launched. Close the parent's copy of those pipe
1230 # handles that only the child should have open. You need
1231 # to make sure that no handles to the write end of the
1232 # output pipe are maintained in this process or else the
1233 # pipe will not close when the child process exits and the
1234 # ReadFile will hang.
1235 if p2cread != -1:
1236 p2cread.Close()
1237 if c2pwrite != -1:
1238 c2pwrite.Close()
1239 if errwrite != -1:
1240 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001241 if hasattr(self, '_devnull'):
1242 os.close(self._devnull)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001243
1244 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001245 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001246 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001247 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001248 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001249
Brett Cannon84df1e62010-05-14 00:33:40 +00001250 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001251 _WaitForSingleObject=_winapi.WaitForSingleObject,
1252 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1253 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001254 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001255 attribute.
1256
1257 This method is called by __del__, so it can only refer to objects
1258 in its local scope.
1259
1260 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001261 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001262 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1263 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001264 return self.returncode
1265
1266
Reid Kleckner2b228f02011-03-16 16:57:54 -04001267 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001268 """Wait for child process to terminate. Returns returncode
1269 attribute."""
Reid Kleckner2b228f02011-03-16 16:57:54 -04001270 if endtime is not None:
1271 timeout = self._remaining_time(endtime)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001272 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001273 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001274 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001275 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001276 if self.returncode is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001277 result = _winapi.WaitForSingleObject(self._handle,
1278 timeout_millis)
1279 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001280 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001281 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001282 return self.returncode
1283
1284
1285 def _readerthread(self, fh, buffer):
1286 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001287 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001288
1289
Reid Kleckner2b228f02011-03-16 16:57:54 -04001290 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001291 # Start reader threads feeding into a list hanging off of this
1292 # object, unless they've already been started.
1293 if self.stdout and not hasattr(self, "_stdout_buff"):
1294 self._stdout_buff = []
1295 self.stdout_thread = \
1296 threading.Thread(target=self._readerthread,
1297 args=(self.stdout, self._stdout_buff))
1298 self.stdout_thread.daemon = True
1299 self.stdout_thread.start()
1300 if self.stderr and not hasattr(self, "_stderr_buff"):
1301 self._stderr_buff = []
1302 self.stderr_thread = \
1303 threading.Thread(target=self._readerthread,
1304 args=(self.stderr, self._stderr_buff))
1305 self.stderr_thread.daemon = True
1306 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001307
1308 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001309 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001310
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001311 # Wait for the reader threads, or time out. If we time out, the
1312 # threads remain reading and the fds left open in case the user
1313 # calls communicate again.
1314 if self.stdout is not None:
1315 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001316 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001317 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001318 if self.stderr is not None:
1319 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001320 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001321 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001322
1323 # Collect the output from and close both pipes, now that we know
1324 # both have been read successfully.
1325 stdout = None
1326 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001327 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001328 stdout = self._stdout_buff
1329 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001330 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001331 stderr = self._stderr_buff
1332 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001333
1334 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001335 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001336 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001337 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001338 stderr = stderr[0]
1339
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001340 return (stdout, stderr)
1341
Christian Heimesa342c012008-04-20 21:01:16 +00001342 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001343 """Send a signal to the process."""
1344 # Don't signal a process that we know has already died.
1345 if self.returncode is not None:
1346 return
Christian Heimesa342c012008-04-20 21:01:16 +00001347 if sig == signal.SIGTERM:
1348 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001349 elif sig == signal.CTRL_C_EVENT:
1350 os.kill(self.pid, signal.CTRL_C_EVENT)
1351 elif sig == signal.CTRL_BREAK_EVENT:
1352 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001353 else:
Brian Curtin19651362010-09-07 13:24:38 +00001354 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001355
1356 def terminate(self):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001357 """Terminates the process."""
1358 # Don't terminate a process that we know has already died.
1359 if self.returncode is not None:
1360 return
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001361 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001362 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001363 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001364 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1365 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001366 rc = _winapi.GetExitCodeProcess(self._handle)
1367 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001368 raise
1369 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001370
1371 kill = terminate
1372
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001373 else:
1374 #
1375 # POSIX methods
1376 #
1377 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001378 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001379 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1380 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001381 p2cread, p2cwrite = -1, -1
1382 c2pread, c2pwrite = -1, -1
1383 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001384
Peter Astrandd38ddf42005-02-10 08:32:50 +00001385 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001386 pass
1387 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001388 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001389 elif stdin == DEVNULL:
1390 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001391 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001392 p2cread = stdin
1393 else:
1394 # Assuming file-like object
1395 p2cread = stdin.fileno()
1396
Peter Astrandd38ddf42005-02-10 08:32:50 +00001397 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001398 pass
1399 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001400 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001401 elif stdout == DEVNULL:
1402 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001403 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001404 c2pwrite = stdout
1405 else:
1406 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001407 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001408
Peter Astrandd38ddf42005-02-10 08:32:50 +00001409 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001410 pass
1411 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001412 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001413 elif stderr == STDOUT:
1414 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001415 elif stderr == DEVNULL:
1416 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001417 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001418 errwrite = stderr
1419 else:
1420 # Assuming file-like object
1421 errwrite = stderr.fileno()
1422
1423 return (p2cread, p2cwrite,
1424 c2pread, c2pwrite,
1425 errread, errwrite)
1426
1427
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001428 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001429 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001430 startupinfo, creationflags, shell,
1431 p2cread, p2cwrite,
1432 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001433 errread, errwrite,
1434 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001435 """Execute program (POSIX version)"""
1436
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001437 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001438 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001439 else:
1440 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001441
1442 if shell:
1443 args = ["/bin/sh", "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001444 if executable:
1445 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001446
Peter Astrandd38ddf42005-02-10 08:32:50 +00001447 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001448 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001449 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001450
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001451 # For transferring possible exec failure from child to parent.
1452 # Data format: "exception name:hex errno:description"
1453 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001454 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001455 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1456 low_fds_to_close = []
1457 while errpipe_write < 3:
1458 low_fds_to_close.append(errpipe_write)
1459 errpipe_write = os.dup(errpipe_write)
1460 for low_fd in low_fds_to_close:
1461 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001462 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001463 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001464 # We must avoid complex work that could involve
1465 # malloc or free in the child process to avoid
1466 # potential deadlocks, thus we do all this here.
1467 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001468
Victor Stinner372b8382011-06-21 17:24:21 +02001469 if env is not None:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001470 env_list = [os.fsencode(k) + b'=' + os.fsencode(v)
1471 for k, v in env.items()]
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001472 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001473 env_list = None # Use execv instead of execve.
1474 executable = os.fsencode(executable)
1475 if os.path.dirname(executable):
1476 executable_list = (executable,)
1477 else:
1478 # This matches the behavior of os._execvpe().
1479 executable_list = tuple(
1480 os.path.join(os.fsencode(dir), executable)
1481 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001482 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001483 fds_to_keep.add(errpipe_write)
1484 self.pid = _posixsubprocess.fork_exec(
1485 args, executable_list,
1486 close_fds, sorted(fds_to_keep), cwd, env_list,
1487 p2cread, p2cwrite, c2pread, c2pwrite,
1488 errread, errwrite,
1489 errpipe_read, errpipe_write,
1490 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001491 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001492 finally:
1493 # be sure the FD is closed no matter what
1494 os.close(errpipe_write)
1495
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001496 # self._devnull is not always defined.
1497 devnull_fd = getattr(self, '_devnull', None)
1498 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001499 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001500 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001501 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001502 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001503 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001504 if devnull_fd is not None:
1505 os.close(devnull_fd)
1506 # Prevent a double close of these fds from __init__ on error.
1507 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001508
1509 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001510 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001511 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001512 while True:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001513 part = os.read(errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001514 errpipe_data += part
1515 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001516 break
Facundo Batista10706e22009-06-19 20:34:30 +00001517 finally:
1518 # be sure the FD is closed no matter what
1519 os.close(errpipe_read)
1520
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001521 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001522 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001523 os.waitpid(self.pid, 0)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001524 except ChildProcessError:
1525 pass
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001526 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001527 exception_name, hex_errno, err_msg = (
1528 errpipe_data.split(b':', 2))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001529 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001530 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001531 hex_errno = b'0'
Gregory P. Smith3aee2222012-11-11 00:04:13 -08001532 err_msg = (b'Bad exception data from child: ' +
1533 repr(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001534 child_exception_type = getattr(
1535 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001536 SubprocessError)
Victor Stinner4d078042010-04-23 19:28:32 +00001537 err_msg = err_msg.decode(errors="surrogatepass")
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001538 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001539 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001540 child_exec_never_called = (err_msg == "noexec")
1541 if child_exec_never_called:
1542 err_msg = ""
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001543 if errno_num != 0:
1544 err_msg = os.strerror(errno_num)
1545 if errno_num == errno.ENOENT:
Gregory P. Smith5591b022012-10-10 03:34:47 -07001546 if child_exec_never_called:
1547 # The error must be from chdir(cwd).
1548 err_msg += ': ' + repr(cwd)
1549 else:
1550 err_msg += ': ' + repr(orig_executable)
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001551 raise child_exception_type(errno_num, err_msg)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001552 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001553
1554
Brett Cannon84df1e62010-05-14 00:33:40 +00001555 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1556 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
1557 _WEXITSTATUS=os.WEXITSTATUS):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001558 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001559 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001560 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001561 if _WIFSIGNALED(sts):
1562 self.returncode = -_WTERMSIG(sts)
1563 elif _WIFEXITED(sts):
1564 self.returncode = _WEXITSTATUS(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001565 else:
1566 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001567 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001568
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001569
Brett Cannon84df1e62010-05-14 00:33:40 +00001570 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001571 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001572 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001573 attribute.
1574
1575 This method is called by __del__, so it cannot reference anything
1576 outside of the local scope (nor can any methods it calls).
1577
1578 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001579 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001580 if not self._waitpid_lock.acquire(False):
1581 # Something else is busy calling waitpid. Don't allow two
1582 # at once. We know nothing yet.
1583 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001584 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001585 if self.returncode is not None:
1586 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001587 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001588 if pid == self.pid:
1589 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001590 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001591 if _deadstate is not None:
1592 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001593 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001594 # This happens if SIGCLD is set to be ignored or
1595 # waiting for child processes has otherwise been
1596 # disabled for our process. This child is dead, we
1597 # can't get the status.
1598 # http://bugs.python.org/issue15756
1599 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001600 finally:
1601 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001602 return self.returncode
1603
1604
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001605 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001606 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001607 try:
Charles-François Natali6e6c59b2015-02-07 13:27:50 +00001608 (pid, sts) = os.waitpid(self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001609 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001610 # This happens if SIGCLD is set to be ignored or waiting
1611 # for child processes has otherwise been disabled for our
1612 # process. This child is dead, we can't get the status.
1613 pid = self.pid
1614 sts = 0
1615 return (pid, sts)
1616
1617
1618 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001619 """Wait for child process to terminate. Returns returncode
1620 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001621 if self.returncode is not None:
1622 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001623
1624 # endtime is preferred to timeout. timeout is only used for
1625 # printing.
1626 if endtime is not None or timeout is not None:
1627 if endtime is None:
Victor Stinner949d8c92012-05-30 13:30:32 +02001628 endtime = _time() + timeout
Reid Kleckner2b228f02011-03-16 16:57:54 -04001629 elif timeout is None:
1630 timeout = self._remaining_time(endtime)
1631
1632 if endtime is not None:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001633 # Enter a busy loop if we have a timeout. This busy loop was
1634 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1635 delay = 0.0005 # 500 us -> initial delay of 1 ms
1636 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001637 if self._waitpid_lock.acquire(False):
1638 try:
1639 if self.returncode is not None:
1640 break # Another thread waited.
1641 (pid, sts) = self._try_wait(os.WNOHANG)
1642 assert pid == self.pid or pid == 0
1643 if pid == self.pid:
1644 self._handle_exitstatus(sts)
1645 break
1646 finally:
1647 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001648 remaining = self._remaining_time(endtime)
1649 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001650 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001651 delay = min(delay * 2, remaining, .05)
1652 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001653 else:
1654 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001655 with self._waitpid_lock:
1656 if self.returncode is not None:
1657 break # Another thread waited.
1658 (pid, sts) = self._try_wait(0)
1659 # Check the pid and loop as waitpid has been known to
1660 # return 0 even without WNOHANG in odd situations.
1661 # http://bugs.python.org/issue14396.
1662 if pid == self.pid:
1663 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001664 return self.returncode
1665
1666
Reid Kleckner2b228f02011-03-16 16:57:54 -04001667 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001668 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001669 # Flush stdio buffer. This might block, if the user has
1670 # been writing to .stdin in an uncontrolled fashion.
1671 self.stdin.flush()
1672 if not input:
1673 self.stdin.close()
1674
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001675 stdout = None
1676 stderr = None
1677
1678 # Only create this mapping if we haven't already.
1679 if not self._communication_started:
1680 self._fileobj2output = {}
1681 if self.stdout:
1682 self._fileobj2output[self.stdout] = []
1683 if self.stderr:
1684 self._fileobj2output[self.stderr] = []
1685
1686 if self.stdout:
1687 stdout = self._fileobj2output[self.stdout]
1688 if self.stderr:
1689 stderr = self._fileobj2output[self.stderr]
1690
1691 self._save_input(input)
1692
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001693 if self._input:
1694 input_view = memoryview(self._input)
1695
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001696 with _PopenSelector() as selector:
1697 if self.stdin and input:
1698 selector.register(self.stdin, selectors.EVENT_WRITE)
1699 if self.stdout:
1700 selector.register(self.stdout, selectors.EVENT_READ)
1701 if self.stderr:
1702 selector.register(self.stderr, selectors.EVENT_READ)
1703
1704 while selector.get_map():
1705 timeout = self._remaining_time(endtime)
1706 if timeout is not None and timeout < 0:
1707 raise TimeoutExpired(self.args, orig_timeout)
1708
1709 ready = selector.select(timeout)
1710 self._check_timeout(endtime, orig_timeout)
1711
1712 # XXX Rewrite these to use non-blocking I/O on the file
1713 # objects; they are no longer using C stdio!
1714
1715 for key, events in ready:
1716 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001717 chunk = input_view[self._input_offset :
1718 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001719 try:
1720 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001721 except BrokenPipeError:
1722 selector.unregister(key.fileobj)
1723 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001724 else:
1725 if self._input_offset >= len(self._input):
1726 selector.unregister(key.fileobj)
1727 key.fileobj.close()
1728 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001729 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001730 if not data:
1731 selector.unregister(key.fileobj)
1732 key.fileobj.close()
1733 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001734
1735 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001736
1737 # All data exchanged. Translate lists into strings.
1738 if stdout is not None:
1739 stdout = b''.join(stdout)
1740 if stderr is not None:
1741 stderr = b''.join(stderr)
1742
1743 # Translate newlines, if requested.
1744 # This also turns bytes into strings.
1745 if self.universal_newlines:
1746 if stdout is not None:
1747 stdout = self._translate_newlines(stdout,
1748 self.stdout.encoding)
1749 if stderr is not None:
1750 stderr = self._translate_newlines(stderr,
1751 self.stderr.encoding)
1752
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001753 return (stdout, stderr)
1754
1755
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001756 def _save_input(self, input):
1757 # This method is called from the _communicate_with_*() methods
1758 # so that if we time out while communicating, we can continue
1759 # sending input if we retry.
1760 if self.stdin and self._input is None:
1761 self._input_offset = 0
1762 self._input = input
1763 if self.universal_newlines and input is not None:
1764 self._input = self._input.encode(self.stdin.encoding)
1765
1766
Christian Heimesa342c012008-04-20 21:01:16 +00001767 def send_signal(self, sig):
Gregory P. Smitha0c9caa2015-11-15 18:19:10 -08001768 """Send a signal to the process."""
1769 # Skip signalling a process that we know has already died.
1770 if self.returncode is None:
1771 os.kill(self.pid, sig)
Christian Heimesa342c012008-04-20 21:01:16 +00001772
1773 def terminate(self):
1774 """Terminate the process with SIGTERM
1775 """
1776 self.send_signal(signal.SIGTERM)
1777
1778 def kill(self):
1779 """Kill the process with SIGKILL
1780 """
1781 self.send_signal(signal.SIGKILL)