blob: a62d9a455fee0a18feccc913a4ef30cc4276886b [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
14intends to replace several other, older modules and functions, like:
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
107If universal_newlines is true, the file objects stdout and stderr are
108opened as a text files, but lines may be terminated by any of '\n',
Gregory P. Smithf5604852010-12-13 06:45:02 +0000109the Unix end-of-line convention, '\r', the old Macintosh convention or
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000110'\r\n', the Windows convention. All of these external representations
Gregory P. Smith1f8a40b2013-03-20 18:32:03 -0700111are seen as '\n' by the Python program. Also, the newlines attribute
112of the file objects stdout, stdin and stderr are not updated by the
113communicate() method.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000114
115The startupinfo and creationflags, if given, will be passed to the
116underlying CreateProcess() function. They can specify things such as
117appearance of the main window and priority for the new process.
118(Windows only)
119
120
Georg Brandlf9734072008-12-07 15:30:06 +0000121This module also defines some shortcut functions:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000122
Peter Astrand5f5e1412004-12-05 20:15:36 +0000123call(*popenargs, **kwargs):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000124 Run command with arguments. Wait for command to complete, then
125 return the returncode attribute.
126
127 The arguments are the same as for the Popen constructor. Example:
128
Florent Xicluna4886d242010-03-08 13:27:26 +0000129 >>> retcode = subprocess.call(["ls", "-l"])
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000130
Peter Astrand454f7672005-01-01 09:36:35 +0000131check_call(*popenargs, **kwargs):
132 Run command with arguments. Wait for command to complete. If the
133 exit code was zero then return, otherwise raise
134 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000135 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000136
137 The arguments are the same as for the Popen constructor. Example:
138
Florent Xicluna4886d242010-03-08 13:27:26 +0000139 >>> subprocess.check_call(["ls", "-l"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000140 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000141
Brett Cannona23810f2008-05-26 19:04:21 +0000142getstatusoutput(cmd):
143 Return (status, output) of executing cmd in a shell.
144
145 Execute the string 'cmd' in a shell with os.popen() and return a 2-tuple
146 (status, output). cmd is actually run as '{ cmd ; } 2>&1', so that the
147 returned output will contain output or error messages. A trailing newline
148 is stripped from the output. The exit status for the command can be
149 interpreted according to the rules for the C function wait(). Example:
150
Brett Cannona23810f2008-05-26 19:04:21 +0000151 >>> subprocess.getstatusoutput('ls /bin/ls')
152 (0, '/bin/ls')
153 >>> subprocess.getstatusoutput('cat /bin/junk')
154 (256, 'cat: /bin/junk: No such file or directory')
155 >>> subprocess.getstatusoutput('/bin/junk')
156 (256, 'sh: /bin/junk: not found')
157
158getoutput(cmd):
159 Return output (stdout or stderr) of executing cmd in a shell.
160
161 Like getstatusoutput(), except the exit status is ignored and the return
162 value is a string containing the command's output. Example:
163
Brett Cannona23810f2008-05-26 19:04:21 +0000164 >>> subprocess.getoutput('ls /bin/ls')
165 '/bin/ls'
166
Georg Brandlf9734072008-12-07 15:30:06 +0000167check_output(*popenargs, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700168 Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000169
Georg Brandl2708f3a2009-12-20 14:38:23 +0000170 If the exit code was non-zero it raises a CalledProcessError. The
171 CalledProcessError object will have the return code in the returncode
172 attribute and output in the output attribute.
Georg Brandlf9734072008-12-07 15:30:06 +0000173
Georg Brandl2708f3a2009-12-20 14:38:23 +0000174 The arguments are the same as for the Popen constructor. Example:
Georg Brandlf9734072008-12-07 15:30:06 +0000175
Georg Brandl2708f3a2009-12-20 14:38:23 +0000176 >>> output = subprocess.check_output(["ls", "-l", "/dev/null"])
Georg Brandlf9734072008-12-07 15:30:06 +0000177
Brett Cannona23810f2008-05-26 19:04:21 +0000178
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000179Exceptions
180----------
181Exceptions raised in the child process, before the new program has
182started to execute, will be re-raised in the parent. Additionally,
183the exception object will have one extra attribute called
184'child_traceback', which is a string containing traceback information
185from the childs point of view.
186
187The most common exception raised is OSError. This occurs, for
188example, when trying to execute a non-existent file. Applications
189should prepare for OSErrors.
190
191A ValueError will be raised if Popen is called with invalid arguments.
192
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400193Exceptions defined within this module inherit from SubprocessError.
194check_call() and check_output() will raise CalledProcessError if the
Gregory P. Smithb4039aa2011-03-14 14:16:20 -0400195called process returns a non-zero return code. TimeoutExpired
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400196be raised if a timeout was specified and expired.
Peter Astrand454f7672005-01-01 09:36:35 +0000197
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000198
199Security
200--------
201Unlike some other popen functions, this implementation will never call
202/bin/sh implicitly. This means that all characters, including shell
203metacharacters, can safely be passed to child processes.
204
205
206Popen objects
207=============
208Instances of the Popen class have the following methods:
209
210poll()
211 Check if child process has terminated. Returns returncode
212 attribute.
213
214wait()
215 Wait for child process to terminate. Returns returncode attribute.
216
217communicate(input=None)
218 Interact with process: Send data to stdin. Read data from stdout
219 and stderr, until end-of-file is reached. Wait for process to
Thomas Wouters902d6eb2007-01-09 23:18:33 +0000220 terminate. The optional input argument should be a string to be
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000221 sent to the child process, or None, if no data should be sent to
222 the child.
Tim Peterse718f612004-10-12 21:51:32 +0000223
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000224 communicate() returns a tuple (stdout, stderr).
225
226 Note: The data read is buffered in memory, so do not use this
227 method if the data size is large or unlimited.
228
229The following attributes are also available:
230
231stdin
232 If the stdin argument is PIPE, this attribute is a file object
233 that provides input to the child process. Otherwise, it is None.
234
235stdout
236 If the stdout argument is PIPE, this attribute is a file object
237 that provides output from the child process. Otherwise, it is
238 None.
239
240stderr
241 If the stderr argument is PIPE, this attribute is file object that
242 provides error output from the child process. Otherwise, it is
243 None.
244
245pid
246 The process ID of the child process.
247
248returncode
249 The child return code. A None value indicates that the process
250 hasn't terminated yet. A negative value -N indicates that the
Gregory P. Smithf5604852010-12-13 06:45:02 +0000251 child was terminated by signal N (POSIX only).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000252
253
254Replacing older functions with the subprocess module
255====================================================
256In this section, "a ==> b" means that b can be used as a replacement
257for a.
258
259Note: All functions in this section fail (more or less) silently if
260the executed program cannot be found; this module raises an OSError
261exception.
262
263In the following examples, we assume that the subprocess module is
264imported with "from subprocess import *".
265
266
267Replacing /bin/sh shell backquote
268---------------------------------
269output=`mycmd myarg`
270==>
271output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
272
273
274Replacing shell pipe line
275-------------------------
276output=`dmesg | grep hda`
277==>
278p1 = Popen(["dmesg"], stdout=PIPE)
Peter Astrand6fdf3cb2004-11-30 18:06:42 +0000279p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000280output = p2.communicate()[0]
281
282
283Replacing os.system()
284---------------------
285sts = os.system("mycmd" + " myarg")
286==>
287p = Popen("mycmd" + " myarg", shell=True)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000288pid, sts = os.waitpid(p.pid, 0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000289
290Note:
291
292* Calling the program through the shell is usually not required.
293
294* It's easier to look at the returncode attribute than the
295 exitstatus.
296
297A more real-world example would look like this:
298
299try:
300 retcode = call("mycmd" + " myarg", shell=True)
301 if retcode < 0:
Guido van Rossumc2f93dc2007-05-24 00:50:02 +0000302 print("Child was terminated by signal", -retcode, file=sys.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000303 else:
Guido van Rossumc2f93dc2007-05-24 00:50:02 +0000304 print("Child returned", retcode, file=sys.stderr)
305except OSError as e:
306 print("Execution failed:", e, file=sys.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000307
308
309Replacing os.spawn*
310-------------------
Tim Peterse718f612004-10-12 21:51:32 +0000311P_NOWAIT example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000312
313pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")
314==>
315pid = Popen(["/bin/mycmd", "myarg"]).pid
316
317
318P_WAIT example:
319
320retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg")
321==>
322retcode = call(["/bin/mycmd", "myarg"])
323
324
Tim Peterse718f612004-10-12 21:51:32 +0000325Vector example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000326
327os.spawnvp(os.P_NOWAIT, path, args)
328==>
329Popen([path] + args[1:])
330
331
Tim Peterse718f612004-10-12 21:51:32 +0000332Environment example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000333
334os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env)
335==>
336Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000337"""
338
339import sys
340mswindows = (sys.platform == "win32")
341
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000342import io
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000343import os
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400344import time
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000345import traceback
Christian Heimesfdab48e2008-01-20 09:06:41 +0000346import gc
Christian Heimesa342c012008-04-20 21:01:16 +0000347import signal
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000348import builtins
Gregory P. Smithd23047b2010-12-04 09:10:44 +0000349import warnings
Ross Lagerwall4f61b022011-04-05 15:34:00 +0200350import errno
Victor Stinner949d8c92012-05-30 13:30:32 +0200351try:
352 from time import monotonic as _time
353except ImportError:
354 from time import time as _time
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000355
Peter Astrand454f7672005-01-01 09:36:35 +0000356# Exception classes used by this module.
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400357class SubprocessError(Exception): pass
358
359
360class CalledProcessError(SubprocessError):
Georg Brandlf9734072008-12-07 15:30:06 +0000361 """This exception is raised when a process run by check_call() or
362 check_output() returns a non-zero exit status.
363 The exit status will be stored in the returncode attribute;
364 check_output() will also store the output in the output attribute.
365 """
366 def __init__(self, returncode, cmd, output=None):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000367 self.returncode = returncode
368 self.cmd = cmd
Georg Brandlf9734072008-12-07 15:30:06 +0000369 self.output = output
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000370 def __str__(self):
371 return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode)
372
Peter Astrand454f7672005-01-01 09:36:35 +0000373
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400374class TimeoutExpired(SubprocessError):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400375 """This exception is raised when the timeout expires while waiting for a
376 child process.
377 """
Reid Kleckner2b228f02011-03-16 16:57:54 -0400378 def __init__(self, cmd, timeout, output=None):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400379 self.cmd = cmd
Reid Kleckner2b228f02011-03-16 16:57:54 -0400380 self.timeout = timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400381 self.output = output
382
383 def __str__(self):
384 return ("Command '%s' timed out after %s seconds" %
385 (self.cmd, self.timeout))
386
387
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000388if mswindows:
389 import threading
390 import msvcrt
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200391 import _winapi
Brian Curtin1ce6b582010-04-24 16:19:22 +0000392 class STARTUPINFO:
393 dwFlags = 0
394 hStdInput = None
395 hStdOutput = None
396 hStdError = None
397 wShowWindow = 0
398 class pywintypes:
399 error = IOError
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000400else:
401 import select
Gregory P. Smithd06fa472009-07-04 02:46:54 +0000402 _has_poll = hasattr(select, 'poll')
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -0700403 import _posixsubprocess
404 _create_pipe = _posixsubprocess.cloexec_pipe
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000405
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000406 # When select or poll has indicated that the file is writable,
407 # we can write up to _PIPE_BUF bytes without risk of blocking.
408 # POSIX defines PIPE_BUF as >= 512.
409 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
410
411
Brett Cannona23810f2008-05-26 19:04:21 +0000412__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200413 "getoutput", "check_output", "CalledProcessError", "DEVNULL"]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000414
Brian Curtin1ce6b582010-04-24 16:19:22 +0000415if mswindows:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200416 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
417 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
418 STD_ERROR_HANDLE, SW_HIDE,
419 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW)
Brian Curtin5d9deaa2011-04-29 16:24:07 -0500420
Brian Curtin08fd8d92011-04-29 16:11:30 -0500421 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
Brian Curtin8b8e7f42011-04-29 15:48:13 -0500422 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
423 "STD_ERROR_HANDLE", "SW_HIDE",
424 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW"])
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200425
426 class Handle(int):
427 closed = False
428
429 def Close(self, CloseHandle=_winapi.CloseHandle):
430 if not self.closed:
431 self.closed = True
432 CloseHandle(self)
433
434 def Detach(self):
435 if not self.closed:
436 self.closed = True
437 return int(self)
438 raise ValueError("already closed")
439
440 def __repr__(self):
441 return "Handle(%d)" % int(self)
442
443 __del__ = Close
444 __str__ = __repr__
445
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000446try:
447 MAXFD = os.sysconf("SC_OPEN_MAX")
448except:
449 MAXFD = 256
450
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200451# This lists holds Popen instances for which the underlying process had not
452# exited at the time its __del__ method got called: those processes are wait()ed
453# for synchronously from _cleanup() when a new Popen object is created, to avoid
454# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000455_active = []
456
457def _cleanup():
458 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000459 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200460 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000461 try:
462 _active.remove(inst)
463 except ValueError:
464 # This can happen if two threads create a new Popen instance.
465 # It's harmless that it was already removed, so ignore.
466 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000467
468PIPE = -1
469STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200470DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000471
472
Gregory P. Smitha59c59f2010-03-01 00:17:40 +0000473def _eintr_retry_call(func, *args):
474 while True:
475 try:
476 return func(*args)
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200477 except InterruptedError:
478 continue
Gregory P. Smitha59c59f2010-03-01 00:17:40 +0000479
480
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200481# XXX This function is only used by multiprocessing and the test suite,
482# but it's here so that it can be imported when Python is compiled without
483# threads.
484
485def _args_from_interpreter_flags():
486 """Return a list of command-line arguments reproducing the current
487 settings in sys.flags and sys.warnoptions."""
488 flag_opt_map = {
489 'debug': 'd',
490 # 'inspect': 'i',
491 # 'interactive': 'i',
492 'optimize': 'O',
493 'dont_write_bytecode': 'B',
494 'no_user_site': 's',
495 'no_site': 'S',
496 'ignore_environment': 'E',
497 'verbose': 'v',
498 'bytes_warning': 'b',
499 'quiet': 'q',
500 'hash_randomization': 'R',
501 }
502 args = []
503 for flag, opt in flag_opt_map.items():
504 v = getattr(sys.flags, flag)
505 if v > 0:
506 args.append('-' + opt * v)
507 for opt in sys.warnoptions:
508 args.append('-W' + opt)
509 return args
510
511
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400512def call(*popenargs, timeout=None, **kwargs):
513 """Run command with arguments. Wait for command to complete or
514 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000515
516 The arguments are the same as for the Popen constructor. Example:
517
518 retcode = call(["ls", "-l"])
519 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200520 with Popen(*popenargs, **kwargs) as p:
521 try:
522 return p.wait(timeout=timeout)
523 except:
524 p.kill()
525 p.wait()
526 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000527
528
Peter Astrand454f7672005-01-01 09:36:35 +0000529def check_call(*popenargs, **kwargs):
530 """Run command with arguments. Wait for command to complete. If
531 the exit code was zero then return, otherwise raise
532 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000533 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000534
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400535 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000536
537 check_call(["ls", "-l"])
538 """
539 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000540 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000541 cmd = kwargs.get("args")
542 if cmd is None:
543 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000544 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000545 return 0
546
547
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400548def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700549 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000550
551 If the exit code was non-zero it raises a CalledProcessError. The
552 CalledProcessError object will have the return code in the returncode
553 attribute and output in the output attribute.
554
555 The arguments are the same as for the Popen constructor. Example:
556
557 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000558 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000559
560 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000561 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000562
563 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000564 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000565 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000566 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700567
568 If universal_newlines=True is passed, the return value will be a
569 string rather than bytes.
Georg Brandlf9734072008-12-07 15:30:06 +0000570 """
571 if 'stdout' in kwargs:
572 raise ValueError('stdout argument not allowed, it will be overridden.')
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200573 with Popen(*popenargs, stdout=PIPE, **kwargs) as process:
574 try:
575 output, unused_err = process.communicate(timeout=timeout)
576 except TimeoutExpired:
577 process.kill()
578 output, unused_err = process.communicate()
579 raise TimeoutExpired(process.args, timeout, output=output)
580 except:
581 process.kill()
582 process.wait()
583 raise
584 retcode = process.poll()
585 if retcode:
586 raise CalledProcessError(retcode, process.args, output=output)
Georg Brandlf9734072008-12-07 15:30:06 +0000587 return output
Peter Astrand454f7672005-01-01 09:36:35 +0000588
589
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000590def list2cmdline(seq):
591 """
592 Translate a sequence of arguments into a command line
593 string, using the same rules as the MS C runtime:
594
595 1) Arguments are delimited by white space, which is either a
596 space or a tab.
597
598 2) A string surrounded by double quotation marks is
599 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000600 contained within. A quoted string can be embedded in an
601 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000602
603 3) A double quotation mark preceded by a backslash is
604 interpreted as a literal double quotation mark.
605
606 4) Backslashes are interpreted literally, unless they
607 immediately precede a double quotation mark.
608
609 5) If backslashes immediately precede a double quotation mark,
610 every pair of backslashes is interpreted as a literal
611 backslash. If the number of backslashes is odd, the last
612 backslash escapes the next double quotation mark as
613 described in rule 3.
614 """
615
616 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000617 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
618 # or search http://msdn.microsoft.com for
619 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000620 result = []
621 needquote = False
622 for arg in seq:
623 bs_buf = []
624
625 # Add a space to separate this argument from the others
626 if result:
627 result.append(' ')
628
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000629 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000630 if needquote:
631 result.append('"')
632
633 for c in arg:
634 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000635 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000636 bs_buf.append(c)
637 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000638 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000639 result.append('\\' * len(bs_buf)*2)
640 bs_buf = []
641 result.append('\\"')
642 else:
643 # Normal char
644 if bs_buf:
645 result.extend(bs_buf)
646 bs_buf = []
647 result.append(c)
648
Christian Heimesfdab48e2008-01-20 09:06:41 +0000649 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000650 if bs_buf:
651 result.extend(bs_buf)
652
653 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000654 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000655 result.append('"')
656
657 return ''.join(result)
658
659
Brett Cannona23810f2008-05-26 19:04:21 +0000660# Various tools for executing commands and looking at their output and status.
661#
Gregory P. Smithf5604852010-12-13 06:45:02 +0000662# NB This only works (and is only relevant) for POSIX.
Brett Cannona23810f2008-05-26 19:04:21 +0000663
664def getstatusoutput(cmd):
665 """Return (status, output) of executing cmd in a shell.
666
667 Execute the string 'cmd' in a shell with os.popen() and return a 2-tuple
668 (status, output). cmd is actually run as '{ cmd ; } 2>&1', so that the
669 returned output will contain output or error messages. A trailing newline
670 is stripped from the output. The exit status for the command can be
671 interpreted according to the rules for the C function wait(). Example:
672
673 >>> import subprocess
674 >>> subprocess.getstatusoutput('ls /bin/ls')
675 (0, '/bin/ls')
676 >>> subprocess.getstatusoutput('cat /bin/junk')
677 (256, 'cat: /bin/junk: No such file or directory')
678 >>> subprocess.getstatusoutput('/bin/junk')
679 (256, 'sh: /bin/junk: not found')
680 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200681 with os.popen('{ ' + cmd + '; } 2>&1', 'r') as pipe:
682 try:
683 text = pipe.read()
684 sts = pipe.close()
685 except:
686 process = pipe._proc
687 process.kill()
688 process.wait()
689 raise
690 if sts is None:
691 sts = 0
692 if text[-1:] == '\n':
693 text = text[:-1]
Brett Cannona23810f2008-05-26 19:04:21 +0000694 return sts, text
695
696
697def getoutput(cmd):
698 """Return output (stdout or stderr) of executing cmd in a shell.
699
700 Like getstatusoutput(), except the exit status is ignored and the return
701 value is a string containing the command's output. Example:
702
703 >>> import subprocess
704 >>> subprocess.getoutput('ls /bin/ls')
705 '/bin/ls'
706 """
707 return getstatusoutput(cmd)[1]
708
709
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000710_PLATFORM_DEFAULT_CLOSE_FDS = object()
Gregory P. Smithf5604852010-12-13 06:45:02 +0000711
712
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000713class Popen(object):
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700714 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000715 stdin=None, stdout=None, stderr=None,
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000716 preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,
717 shell=False, cwd=None, env=None, universal_newlines=False,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000718 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000719 restore_signals=True, start_new_session=False,
720 pass_fds=()):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000721 """Create new Popen instance."""
722 _cleanup()
723
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000724 self._child_created = False
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400725 self._input = None
726 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000727 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700728 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000729 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000730 raise TypeError("bufsize must be an integer")
731
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000732 if mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000733 if preexec_fn is not None:
734 raise ValueError("preexec_fn is not supported on Windows "
735 "platforms")
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000736 any_stdio_set = (stdin is not None or stdout is not None or
737 stderr is not None)
738 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
739 if any_stdio_set:
740 close_fds = False
741 else:
742 close_fds = True
743 elif close_fds and any_stdio_set:
744 raise ValueError(
745 "close_fds is not supported on Windows platforms"
746 " if you redirect stdin/stdout/stderr")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000747 else:
748 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000749 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
750 close_fds = True
751 if pass_fds and not close_fds:
752 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
753 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000754 if startupinfo is not None:
755 raise ValueError("startupinfo is only supported on Windows "
756 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000757 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000758 raise ValueError("creationflags is only supported on Windows "
759 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000760
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400761 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000762 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000763 self.stdout = None
764 self.stderr = None
765 self.pid = None
766 self.returncode = None
767 self.universal_newlines = universal_newlines
768
769 # Input and output objects. The general principle is like
770 # this:
771 #
772 # Parent Child
773 # ------ -----
774 # p2cwrite ---stdin---> p2cread
775 # c2pread <--stdout--- c2pwrite
776 # errread <--stderr--- errwrite
777 #
778 # On POSIX, the child objects are file descriptors. On
779 # Windows, these are Windows file handles. The parent objects
780 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000781 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000782 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000783
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000784 (p2cread, p2cwrite,
785 c2pread, c2pwrite,
786 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
787
Antoine Pitrouc9982322011-01-04 19:07:07 +0000788 # We wrap OS handles *before* launching the child, otherwise a
789 # quickly terminating child could make our fds unwrappable
790 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000791
Thomas Wouterscf297e42007-02-23 15:07:44 +0000792 if mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000793 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000794 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000795 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000796 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000797 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000798 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000799
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000800 if p2cwrite != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000801 self.stdin = io.open(p2cwrite, 'wb', bufsize)
Andrew Svetlov592df202012-08-15 17:36:15 +0300802 if universal_newlines:
Antoine Pitrouab85ff32011-07-23 22:03:45 +0200803 self.stdin = io.TextIOWrapper(self.stdin, write_through=True)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000804 if c2pread != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000805 self.stdout = io.open(c2pread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000806 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000807 self.stdout = io.TextIOWrapper(self.stdout)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000808 if errread != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000809 self.stderr = io.open(errread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000810 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000811 self.stderr = io.TextIOWrapper(self.stderr)
Tim Peterse718f612004-10-12 21:51:32 +0000812
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700813 self._closed_child_pipe_fds = False
Antoine Pitrouc9982322011-01-04 19:07:07 +0000814 try:
815 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300816 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000817 startupinfo, creationflags, shell,
818 p2cread, p2cwrite,
819 c2pread, c2pwrite,
820 errread, errwrite,
821 restore_signals, start_new_session)
822 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800823 # Cleanup if the child failed starting.
824 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000825 try:
826 f.close()
827 except EnvironmentError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800828 pass # Ignore EBADF or other errors.
829
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700830 if not self._closed_child_pipe_fds:
831 to_close = []
832 if stdin == PIPE:
833 to_close.append(p2cread)
834 if stdout == PIPE:
835 to_close.append(c2pwrite)
836 if stderr == PIPE:
837 to_close.append(errwrite)
838 if hasattr(self, '_devnull'):
839 to_close.append(self._devnull)
840 for fd in to_close:
841 try:
842 os.close(fd)
843 except EnvironmentError:
844 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800845
Antoine Pitrouc9982322011-01-04 19:07:07 +0000846 raise
847
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000848
Guido van Rossum98297ee2007-11-06 21:34:58 +0000849 def _translate_newlines(self, data, encoding):
Andrew Svetlov82860712012-08-19 22:13:41 +0300850 data = data.decode(encoding)
851 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000852
Brian Curtin79cdb662010-12-03 02:46:02 +0000853 def __enter__(self):
854 return self
855
856 def __exit__(self, type, value, traceback):
857 if self.stdout:
858 self.stdout.close()
859 if self.stderr:
860 self.stderr.close()
861 if self.stdin:
862 self.stdin.close()
Gregory P. Smith6b657452011-05-11 21:42:08 -0700863 # Wait for the process to terminate, to avoid zombies.
864 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000865
Brett Cannon84df1e62010-05-14 00:33:40 +0000866 def __del__(self, _maxsize=sys.maxsize, _active=_active):
Victor Stinner87b9bc32011-06-01 00:57:47 +0200867 # If __init__ hasn't had a chance to execute (e.g. if it
868 # was passed an undeclared keyword argument), we don't
869 # have a _child_created attribute at all.
870 if not getattr(self, '_child_created', False):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000871 # We didn't get to successfully create a child process.
872 return
873 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000874 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000875 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000876 # Child is still running, keep us alive until we can wait on it.
877 _active.append(self)
878
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200879 def _get_devnull(self):
880 if not hasattr(self, '_devnull'):
881 self._devnull = os.open(os.devnull, os.O_RDWR)
882 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000883
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400884 def communicate(self, input=None, timeout=None):
Peter Astrand23109f02005-03-03 20:28:59 +0000885 """Interact with process: Send data to stdin. Read data from
886 stdout and stderr, until end-of-file is reached. Wait for
Gregory P. Smitha454ef62011-05-22 22:29:49 -0700887 process to terminate. The optional input argument should be
888 bytes to be sent to the child process, or None, if no data
Peter Astrand23109f02005-03-03 20:28:59 +0000889 should be sent to the child.
Tim Peterseba28be2005-03-28 01:08:02 +0000890
Peter Astrand23109f02005-03-03 20:28:59 +0000891 communicate() returns a tuple (stdout, stderr)."""
892
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400893 if self._communication_started and input:
894 raise ValueError("Cannot send input after starting communication")
895
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400896 # Optimization: If we are not worried about timeouts, we haven't
897 # started communicating, and we have one or zero pipes, using select()
898 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200899 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400900 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000901 stdout = None
902 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000903 if self.stdin:
904 if input:
Ross Lagerwall4f61b022011-04-05 15:34:00 +0200905 try:
906 self.stdin.write(input)
907 except IOError as e:
908 if e.errno != errno.EPIPE and e.errno != errno.EINVAL:
909 raise
Peter Astrand23109f02005-03-03 20:28:59 +0000910 self.stdin.close()
911 elif self.stdout:
Victor Stinner2cfb6f32011-07-05 14:00:56 +0200912 stdout = _eintr_retry_call(self.stdout.read)
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000913 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000914 elif self.stderr:
Victor Stinner2cfb6f32011-07-05 14:00:56 +0200915 stderr = _eintr_retry_call(self.stderr.read)
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000916 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000917 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200918 else:
919 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +0200920 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +0200921 else:
922 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000923
Victor Stinner7a8d0812011-04-05 13:13:08 +0200924 try:
925 stdout, stderr = self._communicate(input, endtime, timeout)
926 finally:
927 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400928
Victor Stinner7a8d0812011-04-05 13:13:08 +0200929 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400930
931 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +0000932
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000933
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000934 def poll(self):
935 return self._internal_poll()
936
937
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400938 def _remaining_time(self, endtime):
939 """Convenience for _communicate when computing timeouts."""
940 if endtime is None:
941 return None
942 else:
Victor Stinner949d8c92012-05-30 13:30:32 +0200943 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400944
945
Reid Kleckner2b228f02011-03-16 16:57:54 -0400946 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400947 """Convenience for checking if a timeout has expired."""
948 if endtime is None:
949 return
Victor Stinner949d8c92012-05-30 13:30:32 +0200950 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -0400951 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400952
953
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000954 if mswindows:
955 #
956 # Windows methods
957 #
958 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +0000959 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000960 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
961 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000962 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000963 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +0000964
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000965 p2cread, p2cwrite = -1, -1
966 c2pread, c2pwrite = -1, -1
967 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000968
Peter Astrandd38ddf42005-02-10 08:32:50 +0000969 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200970 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000971 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200972 p2cread, _ = _winapi.CreatePipe(None, 0)
973 p2cread = Handle(p2cread)
974 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000975 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200976 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
977 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200978 elif stdin == DEVNULL:
979 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000980 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000981 p2cread = msvcrt.get_osfhandle(stdin)
982 else:
983 # Assuming file-like object
984 p2cread = msvcrt.get_osfhandle(stdin.fileno())
985 p2cread = self._make_inheritable(p2cread)
986
Peter Astrandd38ddf42005-02-10 08:32:50 +0000987 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200988 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000989 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200990 _, c2pwrite = _winapi.CreatePipe(None, 0)
991 c2pwrite = Handle(c2pwrite)
992 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000993 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200994 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
995 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200996 elif stdout == DEVNULL:
997 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000998 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000999 c2pwrite = msvcrt.get_osfhandle(stdout)
1000 else:
1001 # Assuming file-like object
1002 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1003 c2pwrite = self._make_inheritable(c2pwrite)
1004
Peter Astrandd38ddf42005-02-10 08:32:50 +00001005 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001006 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001007 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001008 _, errwrite = _winapi.CreatePipe(None, 0)
1009 errwrite = Handle(errwrite)
1010 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001011 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001012 errread, errwrite = _winapi.CreatePipe(None, 0)
1013 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001014 elif stderr == STDOUT:
1015 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001016 elif stderr == DEVNULL:
1017 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001018 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001019 errwrite = msvcrt.get_osfhandle(stderr)
1020 else:
1021 # Assuming file-like object
1022 errwrite = msvcrt.get_osfhandle(stderr.fileno())
1023 errwrite = self._make_inheritable(errwrite)
1024
1025 return (p2cread, p2cwrite,
1026 c2pread, c2pwrite,
1027 errread, errwrite)
1028
1029
1030 def _make_inheritable(self, handle):
1031 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001032 h = _winapi.DuplicateHandle(
1033 _winapi.GetCurrentProcess(), handle,
1034 _winapi.GetCurrentProcess(), 0, 1,
1035 _winapi.DUPLICATE_SAME_ACCESS)
1036 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001037
1038
1039 def _find_w9xpopen(self):
1040 """Find and return absolut path to w9xpopen.exe"""
Brian Curtin1ce6b582010-04-24 16:19:22 +00001041 w9xpopen = os.path.join(
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001042 os.path.dirname(_winapi.GetModuleFileName(0)),
Tim Peterse8374a52004-10-13 03:15:00 +00001043 "w9xpopen.exe")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001044 if not os.path.exists(w9xpopen):
1045 # Eeek - file-not-found - possibly an embedding
1046 # situation - see if we can locate it in sys.exec_prefix
Vinay Sajip7ded1f02012-05-26 03:45:29 +01001047 w9xpopen = os.path.join(os.path.dirname(sys.base_exec_prefix),
Tim Peterse8374a52004-10-13 03:15:00 +00001048 "w9xpopen.exe")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001049 if not os.path.exists(w9xpopen):
Tim Peterse8374a52004-10-13 03:15:00 +00001050 raise RuntimeError("Cannot locate w9xpopen.exe, which is "
1051 "needed for Popen to work with your "
1052 "shell or platform.")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001053 return w9xpopen
1054
Tim Peterse718f612004-10-12 21:51:32 +00001055
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001056 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001057 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001058 startupinfo, creationflags, shell,
1059 p2cread, p2cwrite,
1060 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001061 errread, errwrite,
1062 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001063 """Execute program (MS Windows version)"""
1064
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001065 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001066
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001067 if not isinstance(args, str):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001068 args = list2cmdline(args)
1069
Peter Astrandc1d65362004-11-07 14:30:34 +00001070 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001071 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001072 startupinfo = STARTUPINFO()
Victor Stinnerb3693582010-05-21 20:13:12 +00001073 if -1 not in (p2cread, c2pwrite, errwrite):
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001074 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001075 startupinfo.hStdInput = p2cread
1076 startupinfo.hStdOutput = c2pwrite
1077 startupinfo.hStdError = errwrite
1078
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001079 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001080 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1081 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001082 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001083 args = '{} /c "{}"'.format (comspec, args)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001084 if (_winapi.GetVersion() >= 0x80000000 or
Tim Peterse8374a52004-10-13 03:15:00 +00001085 os.path.basename(comspec).lower() == "command.com"):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001086 # Win9x, or using command.com on NT. We need to
1087 # use the w9xpopen intermediate program. For more
1088 # information, see KB Q150956
1089 # (http://web.archive.org/web/20011105084002/http://support.microsoft.com/support/kb/articles/Q150/9/56.asp)
1090 w9xpopen = self._find_w9xpopen()
1091 args = '"%s" %s' % (w9xpopen, args)
1092 # Not passing CREATE_NEW_CONSOLE has been known to
1093 # cause random failures on win9x. Specifically a
1094 # dialog: "Your program accessed mem currently in
1095 # use at xxx" and a hopeful warning about the
Mark Dickinson934896d2009-02-21 20:59:32 +00001096 # stability of your system. Cost is Ctrl+C won't
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001097 # kill children.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001098 creationflags |= _winapi.CREATE_NEW_CONSOLE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001099
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001100 # Start the process
1101 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001102 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001103 # no special security
1104 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001105 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001106 creationflags,
1107 env,
1108 cwd,
1109 startupinfo)
Guido van Rossumb940e112007-01-10 16:19:56 +00001110 except pywintypes.error as e:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001111 # Translate pywintypes.error to WindowsError, which is
1112 # a subclass of OSError. FIXME: We should really
Ezio Melotti13925002011-03-16 11:05:33 +02001113 # translate errno using _sys_errlist (or similar), but
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001114 # how can this be done from Python?
1115 raise WindowsError(*e.args)
Tim Goldenad537f22010-08-08 11:18:16 +00001116 finally:
1117 # Child is launched. Close the parent's copy of those pipe
1118 # handles that only the child should have open. You need
1119 # to make sure that no handles to the write end of the
1120 # output pipe are maintained in this process or else the
1121 # pipe will not close when the child process exits and the
1122 # ReadFile will hang.
1123 if p2cread != -1:
1124 p2cread.Close()
1125 if c2pwrite != -1:
1126 c2pwrite.Close()
1127 if errwrite != -1:
1128 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001129 if hasattr(self, '_devnull'):
1130 os.close(self._devnull)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001131
1132 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001133 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001134 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001135 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001136 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001137
Brett Cannon84df1e62010-05-14 00:33:40 +00001138 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001139 _WaitForSingleObject=_winapi.WaitForSingleObject,
1140 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1141 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001142 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001143 attribute.
1144
1145 This method is called by __del__, so it can only refer to objects
1146 in its local scope.
1147
1148 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001149 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001150 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1151 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001152 return self.returncode
1153
1154
Reid Kleckner2b228f02011-03-16 16:57:54 -04001155 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001156 """Wait for child process to terminate. Returns returncode
1157 attribute."""
Reid Kleckner2b228f02011-03-16 16:57:54 -04001158 if endtime is not None:
1159 timeout = self._remaining_time(endtime)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001160 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001161 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001162 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001163 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001164 if self.returncode is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001165 result = _winapi.WaitForSingleObject(self._handle,
1166 timeout_millis)
1167 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001168 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001169 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001170 return self.returncode
1171
1172
1173 def _readerthread(self, fh, buffer):
1174 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001175 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001176
1177
Reid Kleckner2b228f02011-03-16 16:57:54 -04001178 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001179 # Start reader threads feeding into a list hanging off of this
1180 # object, unless they've already been started.
1181 if self.stdout and not hasattr(self, "_stdout_buff"):
1182 self._stdout_buff = []
1183 self.stdout_thread = \
1184 threading.Thread(target=self._readerthread,
1185 args=(self.stdout, self._stdout_buff))
1186 self.stdout_thread.daemon = True
1187 self.stdout_thread.start()
1188 if self.stderr and not hasattr(self, "_stderr_buff"):
1189 self._stderr_buff = []
1190 self.stderr_thread = \
1191 threading.Thread(target=self._readerthread,
1192 args=(self.stderr, self._stderr_buff))
1193 self.stderr_thread.daemon = True
1194 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001195
1196 if self.stdin:
Peter Astrandd38ddf42005-02-10 08:32:50 +00001197 if input is not None:
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001198 try:
1199 self.stdin.write(input)
1200 except IOError as e:
1201 if e.errno != errno.EPIPE:
1202 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001203 self.stdin.close()
1204
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001205 # Wait for the reader threads, or time out. If we time out, the
1206 # threads remain reading and the fds left open in case the user
1207 # calls communicate again.
1208 if self.stdout is not None:
1209 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001210 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001211 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001212 if self.stderr is not None:
1213 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001214 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001215 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001216
1217 # Collect the output from and close both pipes, now that we know
1218 # both have been read successfully.
1219 stdout = None
1220 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001221 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001222 stdout = self._stdout_buff
1223 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001224 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001225 stderr = self._stderr_buff
1226 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001227
1228 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001229 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001230 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001231 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001232 stderr = stderr[0]
1233
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001234 return (stdout, stderr)
1235
Christian Heimesa342c012008-04-20 21:01:16 +00001236 def send_signal(self, sig):
1237 """Send a signal to the process
1238 """
1239 if sig == signal.SIGTERM:
1240 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001241 elif sig == signal.CTRL_C_EVENT:
1242 os.kill(self.pid, signal.CTRL_C_EVENT)
1243 elif sig == signal.CTRL_BREAK_EVENT:
1244 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001245 else:
Brian Curtin19651362010-09-07 13:24:38 +00001246 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001247
1248 def terminate(self):
1249 """Terminates the process
1250 """
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001251 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001252 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001253 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001254 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1255 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001256 rc = _winapi.GetExitCodeProcess(self._handle)
1257 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001258 raise
1259 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001260
1261 kill = terminate
1262
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001263 else:
1264 #
1265 # POSIX methods
1266 #
1267 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001268 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001269 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1270 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001271 p2cread, p2cwrite = -1, -1
1272 c2pread, c2pwrite = -1, -1
1273 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001274
Peter Astrandd38ddf42005-02-10 08:32:50 +00001275 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001276 pass
1277 elif stdin == PIPE:
Gregory P. Smith51ee2702010-12-13 07:59:39 +00001278 p2cread, p2cwrite = _create_pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001279 elif stdin == DEVNULL:
1280 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001281 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001282 p2cread = stdin
1283 else:
1284 # Assuming file-like object
1285 p2cread = stdin.fileno()
1286
Peter Astrandd38ddf42005-02-10 08:32:50 +00001287 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001288 pass
1289 elif stdout == PIPE:
Gregory P. Smith51ee2702010-12-13 07:59:39 +00001290 c2pread, c2pwrite = _create_pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001291 elif stdout == DEVNULL:
1292 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001293 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001294 c2pwrite = stdout
1295 else:
1296 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001297 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001298
Peter Astrandd38ddf42005-02-10 08:32:50 +00001299 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001300 pass
1301 elif stderr == PIPE:
Gregory P. Smith51ee2702010-12-13 07:59:39 +00001302 errread, errwrite = _create_pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001303 elif stderr == STDOUT:
1304 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001305 elif stderr == DEVNULL:
1306 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001307 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001308 errwrite = stderr
1309 else:
1310 # Assuming file-like object
1311 errwrite = stderr.fileno()
1312
1313 return (p2cread, p2cwrite,
1314 c2pread, c2pwrite,
1315 errread, errwrite)
1316
1317
Antoine Pitrou47f14ba2011-01-03 23:42:01 +00001318 def _close_fds(self, fds_to_keep):
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001319 start_fd = 3
Antoine Pitrou47f14ba2011-01-03 23:42:01 +00001320 for fd in sorted(fds_to_keep):
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001321 if fd >= start_fd:
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001322 os.closerange(start_fd, fd)
1323 start_fd = fd + 1
1324 if start_fd <= MAXFD:
1325 os.closerange(start_fd, MAXFD)
1326
1327
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001328 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001329 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001330 startupinfo, creationflags, shell,
1331 p2cread, p2cwrite,
1332 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001333 errread, errwrite,
1334 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001335 """Execute program (POSIX version)"""
1336
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001337 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001338 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001339 else:
1340 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001341
1342 if shell:
1343 args = ["/bin/sh", "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001344 if executable:
1345 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001346
Peter Astrandd38ddf42005-02-10 08:32:50 +00001347 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001348 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001349 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001350
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001351 # For transferring possible exec failure from child to parent.
1352 # Data format: "exception name:hex errno:description"
1353 # Pickle is not used; it is complex and involves memory allocation.
Gregory P. Smith51ee2702010-12-13 07:59:39 +00001354 errpipe_read, errpipe_write = _create_pipe()
Christian Heimesfdab48e2008-01-20 09:06:41 +00001355 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001356 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001357 # We must avoid complex work that could involve
1358 # malloc or free in the child process to avoid
1359 # potential deadlocks, thus we do all this here.
1360 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001361
Victor Stinner372b8382011-06-21 17:24:21 +02001362 if env is not None:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001363 env_list = [os.fsencode(k) + b'=' + os.fsencode(v)
1364 for k, v in env.items()]
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001365 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001366 env_list = None # Use execv instead of execve.
1367 executable = os.fsencode(executable)
1368 if os.path.dirname(executable):
1369 executable_list = (executable,)
1370 else:
1371 # This matches the behavior of os._execvpe().
1372 executable_list = tuple(
1373 os.path.join(os.fsencode(dir), executable)
1374 for dir in os.get_exec_path(env))
1375 fds_to_keep = set(pass_fds)
1376 fds_to_keep.add(errpipe_write)
1377 self.pid = _posixsubprocess.fork_exec(
1378 args, executable_list,
1379 close_fds, sorted(fds_to_keep), cwd, env_list,
1380 p2cread, p2cwrite, c2pread, c2pwrite,
1381 errread, errwrite,
1382 errpipe_read, errpipe_write,
1383 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001384 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001385 finally:
1386 # be sure the FD is closed no matter what
1387 os.close(errpipe_write)
1388
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001389 # self._devnull is not always defined.
1390 devnull_fd = getattr(self, '_devnull', None)
1391 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001392 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001393 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001394 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001395 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001396 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001397 if devnull_fd is not None:
1398 os.close(devnull_fd)
1399 # Prevent a double close of these fds from __init__ on error.
1400 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001401
1402 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001403 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001404 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001405 while True:
1406 part = _eintr_retry_call(os.read, errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001407 errpipe_data += part
1408 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001409 break
Facundo Batista10706e22009-06-19 20:34:30 +00001410 finally:
1411 # be sure the FD is closed no matter what
1412 os.close(errpipe_read)
1413
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001414 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001415 try:
1416 _eintr_retry_call(os.waitpid, self.pid, 0)
1417 except OSError as e:
1418 if e.errno != errno.ECHILD:
1419 raise
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001420 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001421 exception_name, hex_errno, err_msg = (
1422 errpipe_data.split(b':', 2))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001423 except ValueError:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001424 exception_name = b'RuntimeError'
1425 hex_errno = b'0'
Gregory P. Smith3aee2222012-11-11 00:04:13 -08001426 err_msg = (b'Bad exception data from child: ' +
1427 repr(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001428 child_exception_type = getattr(
1429 builtins, exception_name.decode('ascii'),
1430 RuntimeError)
Victor Stinner4d078042010-04-23 19:28:32 +00001431 err_msg = err_msg.decode(errors="surrogatepass")
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001432 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001433 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001434 child_exec_never_called = (err_msg == "noexec")
1435 if child_exec_never_called:
1436 err_msg = ""
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001437 if errno_num != 0:
1438 err_msg = os.strerror(errno_num)
1439 if errno_num == errno.ENOENT:
Gregory P. Smith5591b022012-10-10 03:34:47 -07001440 if child_exec_never_called:
1441 # The error must be from chdir(cwd).
1442 err_msg += ': ' + repr(cwd)
1443 else:
1444 err_msg += ': ' + repr(orig_executable)
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001445 raise child_exception_type(errno_num, err_msg)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001446 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001447
1448
Brett Cannon84df1e62010-05-14 00:33:40 +00001449 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1450 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
1451 _WEXITSTATUS=os.WEXITSTATUS):
1452 # This method is called (indirectly) by __del__, so it cannot
1453 # refer to anything outside of its local scope."""
1454 if _WIFSIGNALED(sts):
1455 self.returncode = -_WTERMSIG(sts)
1456 elif _WIFEXITED(sts):
1457 self.returncode = _WEXITSTATUS(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001458 else:
1459 # Should never happen
1460 raise RuntimeError("Unknown child exit status!")
1461
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001462
Brett Cannon84df1e62010-05-14 00:33:40 +00001463 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov08bab072012-12-24 20:06:35 +02001464 _WNOHANG=os.WNOHANG, _os_error=os.error, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001465 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001466 attribute.
1467
1468 This method is called by __del__, so it cannot reference anything
1469 outside of the local scope (nor can any methods it calls).
1470
1471 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001472 if self.returncode is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001473 try:
Brett Cannon84df1e62010-05-14 00:33:40 +00001474 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001475 if pid == self.pid:
1476 self._handle_exitstatus(sts)
Gregory P. Smith39051712012-09-29 11:40:38 -07001477 except _os_error as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001478 if _deadstate is not None:
1479 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001480 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001481 # This happens if SIGCLD is set to be ignored or
1482 # waiting for child processes has otherwise been
1483 # disabled for our process. This child is dead, we
1484 # can't get the status.
1485 # http://bugs.python.org/issue15756
1486 self.returncode = 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001487 return self.returncode
1488
1489
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001490 def _try_wait(self, wait_flags):
1491 try:
1492 (pid, sts) = _eintr_retry_call(os.waitpid, self.pid, wait_flags)
1493 except OSError as e:
1494 if e.errno != errno.ECHILD:
1495 raise
1496 # This happens if SIGCLD is set to be ignored or waiting
1497 # for child processes has otherwise been disabled for our
1498 # process. This child is dead, we can't get the status.
1499 pid = self.pid
1500 sts = 0
1501 return (pid, sts)
1502
1503
1504 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001505 """Wait for child process to terminate. Returns returncode
1506 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001507 if self.returncode is not None:
1508 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001509
1510 # endtime is preferred to timeout. timeout is only used for
1511 # printing.
1512 if endtime is not None or timeout is not None:
1513 if endtime is None:
Victor Stinner949d8c92012-05-30 13:30:32 +02001514 endtime = _time() + timeout
Reid Kleckner2b228f02011-03-16 16:57:54 -04001515 elif timeout is None:
1516 timeout = self._remaining_time(endtime)
1517
1518 if endtime is not None:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001519 # Enter a busy loop if we have a timeout. This busy loop was
1520 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1521 delay = 0.0005 # 500 us -> initial delay of 1 ms
1522 while True:
1523 (pid, sts) = self._try_wait(os.WNOHANG)
1524 assert pid == self.pid or pid == 0
1525 if pid == self.pid:
1526 self._handle_exitstatus(sts)
1527 break
1528 remaining = self._remaining_time(endtime)
1529 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001530 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001531 delay = min(delay * 2, remaining, .05)
1532 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001533 else:
1534 while self.returncode is None:
1535 (pid, sts) = self._try_wait(0)
1536 # Check the pid and loop as waitpid has been known to return
1537 # 0 even without WNOHANG in odd situations. issue14396.
1538 if pid == self.pid:
1539 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001540 return self.returncode
1541
1542
Reid Kleckner2b228f02011-03-16 16:57:54 -04001543 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001544 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001545 # Flush stdio buffer. This might block, if the user has
1546 # been writing to .stdin in an uncontrolled fashion.
1547 self.stdin.flush()
1548 if not input:
1549 self.stdin.close()
1550
1551 if _has_poll:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001552 stdout, stderr = self._communicate_with_poll(input, endtime,
1553 orig_timeout)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001554 else:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001555 stdout, stderr = self._communicate_with_select(input, endtime,
1556 orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001557
1558 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001559
1560 # All data exchanged. Translate lists into strings.
1561 if stdout is not None:
1562 stdout = b''.join(stdout)
1563 if stderr is not None:
1564 stderr = b''.join(stderr)
1565
1566 # Translate newlines, if requested.
1567 # This also turns bytes into strings.
1568 if self.universal_newlines:
1569 if stdout is not None:
1570 stdout = self._translate_newlines(stdout,
1571 self.stdout.encoding)
1572 if stderr is not None:
1573 stderr = self._translate_newlines(stderr,
1574 self.stderr.encoding)
1575
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001576 return (stdout, stderr)
1577
1578
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001579 def _save_input(self, input):
1580 # This method is called from the _communicate_with_*() methods
1581 # so that if we time out while communicating, we can continue
1582 # sending input if we retry.
1583 if self.stdin and self._input is None:
1584 self._input_offset = 0
1585 self._input = input
1586 if self.universal_newlines and input is not None:
1587 self._input = self._input.encode(self.stdin.encoding)
1588
1589
Reid Kleckner2b228f02011-03-16 16:57:54 -04001590 def _communicate_with_poll(self, input, endtime, orig_timeout):
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001591 stdout = None # Return
1592 stderr = None # Return
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001593
1594 if not self._communication_started:
1595 self._fd2file = {}
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001596
1597 poller = select.poll()
1598 def register_and_append(file_obj, eventmask):
1599 poller.register(file_obj.fileno(), eventmask)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001600 self._fd2file[file_obj.fileno()] = file_obj
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001601
1602 def close_unregister_and_remove(fd):
1603 poller.unregister(fd)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001604 self._fd2file[fd].close()
1605 self._fd2file.pop(fd)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001606
1607 if self.stdin and input:
1608 register_and_append(self.stdin, select.POLLOUT)
1609
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001610 # Only create this mapping if we haven't already.
1611 if not self._communication_started:
1612 self._fd2output = {}
1613 if self.stdout:
1614 self._fd2output[self.stdout.fileno()] = []
1615 if self.stderr:
1616 self._fd2output[self.stderr.fileno()] = []
1617
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001618 select_POLLIN_POLLPRI = select.POLLIN | select.POLLPRI
1619 if self.stdout:
1620 register_and_append(self.stdout, select_POLLIN_POLLPRI)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001621 stdout = self._fd2output[self.stdout.fileno()]
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001622 if self.stderr:
1623 register_and_append(self.stderr, select_POLLIN_POLLPRI)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001624 stderr = self._fd2output[self.stderr.fileno()]
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001625
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001626 self._save_input(input)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001627
1628 while self._fd2file:
Victor Stinner7a8d0812011-04-05 13:13:08 +02001629 timeout = self._remaining_time(endtime)
1630 if timeout is not None and timeout < 0:
1631 raise TimeoutExpired(self.args, orig_timeout)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001632 try:
Victor Stinner7a8d0812011-04-05 13:13:08 +02001633 ready = poller.poll(timeout)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001634 except select.error as e:
1635 if e.args[0] == errno.EINTR:
1636 continue
1637 raise
Reid Kleckner2b228f02011-03-16 16:57:54 -04001638 self._check_timeout(endtime, orig_timeout)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001639
1640 # XXX Rewrite these to use non-blocking I/O on the
1641 # file objects; they are no longer using C stdio!
1642
1643 for fd, mode in ready:
1644 if mode & select.POLLOUT:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001645 chunk = self._input[self._input_offset :
1646 self._input_offset + _PIPE_BUF]
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001647 try:
Ross Lagerwall0b9ea932011-04-05 16:07:49 +02001648 self._input_offset += os.write(fd, chunk)
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001649 except OSError as e:
1650 if e.errno == errno.EPIPE:
1651 close_unregister_and_remove(fd)
1652 else:
1653 raise
1654 else:
Ross Lagerwall0b9ea932011-04-05 16:07:49 +02001655 if self._input_offset >= len(self._input):
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001656 close_unregister_and_remove(fd)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001657 elif mode & select_POLLIN_POLLPRI:
1658 data = os.read(fd, 4096)
1659 if not data:
1660 close_unregister_and_remove(fd)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001661 self._fd2output[fd].append(data)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001662 else:
1663 # Ignore hang up or errors.
1664 close_unregister_and_remove(fd)
1665
1666 return (stdout, stderr)
1667
1668
Reid Kleckner2b228f02011-03-16 16:57:54 -04001669 def _communicate_with_select(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001670 if not self._communication_started:
1671 self._read_set = []
1672 self._write_set = []
1673 if self.stdin and input:
1674 self._write_set.append(self.stdin)
1675 if self.stdout:
1676 self._read_set.append(self.stdout)
1677 if self.stderr:
1678 self._read_set.append(self.stderr)
1679
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001680 self._save_input(input)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001681
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001682 stdout = None # Return
1683 stderr = None # Return
1684
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001685 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001686 if not self._communication_started:
1687 self._stdout_buff = []
1688 stdout = self._stdout_buff
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001689 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001690 if not self._communication_started:
1691 self._stderr_buff = []
1692 stderr = self._stderr_buff
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001693
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001694 while self._read_set or self._write_set:
Victor Stinner7a8d0812011-04-05 13:13:08 +02001695 timeout = self._remaining_time(endtime)
1696 if timeout is not None and timeout < 0:
1697 raise TimeoutExpired(self.args, orig_timeout)
Georg Brandl86b2fb92008-07-16 03:43:04 +00001698 try:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001699 (rlist, wlist, xlist) = \
1700 select.select(self._read_set, self._write_set, [],
Victor Stinner7a8d0812011-04-05 13:13:08 +02001701 timeout)
Georg Brandl86b2fb92008-07-16 03:43:04 +00001702 except select.error as e:
1703 if e.args[0] == errno.EINTR:
1704 continue
1705 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001706
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001707 # According to the docs, returning three empty lists indicates
1708 # that the timeout expired.
1709 if not (rlist or wlist or xlist):
Reid Kleckner2b228f02011-03-16 16:57:54 -04001710 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001711 # We also check what time it is ourselves for good measure.
Reid Kleckner2b228f02011-03-16 16:57:54 -04001712 self._check_timeout(endtime, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001713
Guido van Rossum98297ee2007-11-06 21:34:58 +00001714 # XXX Rewrite these to use non-blocking I/O on the
1715 # file objects; they are no longer using C stdio!
1716
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001717 if self.stdin in wlist:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001718 chunk = self._input[self._input_offset :
1719 self._input_offset + _PIPE_BUF]
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001720 try:
1721 bytes_written = os.write(self.stdin.fileno(), chunk)
1722 except OSError as e:
1723 if e.errno == errno.EPIPE:
1724 self.stdin.close()
Ross Lagerwall0b9ea932011-04-05 16:07:49 +02001725 self._write_set.remove(self.stdin)
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001726 else:
1727 raise
1728 else:
Ross Lagerwall0b9ea932011-04-05 16:07:49 +02001729 self._input_offset += bytes_written
1730 if self._input_offset >= len(self._input):
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001731 self.stdin.close()
Ross Lagerwall0b9ea932011-04-05 16:07:49 +02001732 self._write_set.remove(self.stdin)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001733
1734 if self.stdout in rlist:
1735 data = os.read(self.stdout.fileno(), 1024)
Guido van Rossumc9e363c2007-05-15 23:18:55 +00001736 if not data:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001737 self.stdout.close()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001738 self._read_set.remove(self.stdout)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001739 stdout.append(data)
1740
1741 if self.stderr in rlist:
1742 data = os.read(self.stderr.fileno(), 1024)
Guido van Rossumc9e363c2007-05-15 23:18:55 +00001743 if not data:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001744 self.stderr.close()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001745 self._read_set.remove(self.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001746 stderr.append(data)
1747
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001748 return (stdout, stderr)
1749
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001750
Christian Heimesa342c012008-04-20 21:01:16 +00001751 def send_signal(self, sig):
1752 """Send a signal to the process
1753 """
1754 os.kill(self.pid, sig)
1755
1756 def terminate(self):
1757 """Terminate the process with SIGTERM
1758 """
1759 self.send_signal(signal.SIGTERM)
1760
1761 def kill(self):
1762 """Kill the process with SIGKILL
1763 """
1764 self.send_signal(signal.SIGKILL)