blob: 410ae2918b8d4e6a2ccaf4f68e6f636e6b989504 [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
28class Popen(args, bufsize=0, executable=None,
29 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
59bufsize, if given, has the same meaning as the corresponding argument
60to the built-in open() function: 0 means unbuffered, 1 means line
61buffered, any other positive value means use a buffer of
62(approximately) that size. A negative bufsize means to use the system
63default, which usually means fully buffered. The default value for
64bufsize is 0 (unbuffered).
65
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
111are seen as '\n' by the Python program. Note: This feature is only
112available if Python is built with universal newline support (the
113default). Also, the newlines attribute of the file objects stdout,
114stdin and stderr are not updated by the communicate() method.
115
116The startupinfo and creationflags, if given, will be passed to the
117underlying CreateProcess() function. They can specify things such as
118appearance of the main window and priority for the new process.
119(Windows only)
120
121
Georg Brandlf9734072008-12-07 15:30:06 +0000122This module also defines some shortcut functions:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000123
Peter Astrand5f5e1412004-12-05 20:15:36 +0000124call(*popenargs, **kwargs):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000125 Run command with arguments. Wait for command to complete, then
126 return the returncode attribute.
127
128 The arguments are the same as for the Popen constructor. Example:
129
Florent Xicluna4886d242010-03-08 13:27:26 +0000130 >>> retcode = subprocess.call(["ls", "-l"])
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000131
Peter Astrand454f7672005-01-01 09:36:35 +0000132check_call(*popenargs, **kwargs):
133 Run command with arguments. Wait for command to complete. If the
134 exit code was zero then return, otherwise raise
135 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000136 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000137
138 The arguments are the same as for the Popen constructor. Example:
139
Florent Xicluna4886d242010-03-08 13:27:26 +0000140 >>> subprocess.check_call(["ls", "-l"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000141 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000142
Brett Cannona23810f2008-05-26 19:04:21 +0000143getstatusoutput(cmd):
144 Return (status, output) of executing cmd in a shell.
145
146 Execute the string 'cmd' in a shell with os.popen() and return a 2-tuple
147 (status, output). cmd is actually run as '{ cmd ; } 2>&1', so that the
148 returned output will contain output or error messages. A trailing newline
149 is stripped from the output. The exit status for the command can be
150 interpreted according to the rules for the C function wait(). Example:
151
Brett Cannona23810f2008-05-26 19:04:21 +0000152 >>> subprocess.getstatusoutput('ls /bin/ls')
153 (0, '/bin/ls')
154 >>> subprocess.getstatusoutput('cat /bin/junk')
155 (256, 'cat: /bin/junk: No such file or directory')
156 >>> subprocess.getstatusoutput('/bin/junk')
157 (256, 'sh: /bin/junk: not found')
158
159getoutput(cmd):
160 Return output (stdout or stderr) of executing cmd in a shell.
161
162 Like getstatusoutput(), except the exit status is ignored and the return
163 value is a string containing the command's output. Example:
164
Brett Cannona23810f2008-05-26 19:04:21 +0000165 >>> subprocess.getoutput('ls /bin/ls')
166 '/bin/ls'
167
Georg Brandlf9734072008-12-07 15:30:06 +0000168check_output(*popenargs, **kwargs):
Georg Brandl2708f3a2009-12-20 14:38:23 +0000169 Run command with arguments and return its output as a byte string.
Georg Brandlf9734072008-12-07 15:30:06 +0000170
Georg Brandl2708f3a2009-12-20 14:38:23 +0000171 If the exit code was non-zero it raises a CalledProcessError. The
172 CalledProcessError object will have the return code in the returncode
173 attribute and output in the output attribute.
Georg Brandlf9734072008-12-07 15:30:06 +0000174
Georg Brandl2708f3a2009-12-20 14:38:23 +0000175 The arguments are the same as for the Popen constructor. Example:
Georg Brandlf9734072008-12-07 15:30:06 +0000176
Georg Brandl2708f3a2009-12-20 14:38:23 +0000177 >>> output = subprocess.check_output(["ls", "-l", "/dev/null"])
Georg Brandlf9734072008-12-07 15:30:06 +0000178
Brett Cannona23810f2008-05-26 19:04:21 +0000179
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000180Exceptions
181----------
182Exceptions raised in the child process, before the new program has
183started to execute, will be re-raised in the parent. Additionally,
184the exception object will have one extra attribute called
185'child_traceback', which is a string containing traceback information
186from the childs point of view.
187
188The most common exception raised is OSError. This occurs, for
189example, when trying to execute a non-existent file. Applications
190should prepare for OSErrors.
191
192A ValueError will be raised if Popen is called with invalid arguments.
193
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400194Exceptions defined within this module inherit from SubprocessError.
195check_call() and check_output() will raise CalledProcessError if the
Gregory P. Smithb4039aa2011-03-14 14:16:20 -0400196called process returns a non-zero return code. TimeoutExpired
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400197be raised if a timeout was specified and expired.
Peter Astrand454f7672005-01-01 09:36:35 +0000198
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000199
200Security
201--------
202Unlike some other popen functions, this implementation will never call
203/bin/sh implicitly. This means that all characters, including shell
204metacharacters, can safely be passed to child processes.
205
206
207Popen objects
208=============
209Instances of the Popen class have the following methods:
210
211poll()
212 Check if child process has terminated. Returns returncode
213 attribute.
214
215wait()
216 Wait for child process to terminate. Returns returncode attribute.
217
218communicate(input=None)
219 Interact with process: Send data to stdin. Read data from stdout
220 and stderr, until end-of-file is reached. Wait for process to
Thomas Wouters902d6eb2007-01-09 23:18:33 +0000221 terminate. The optional input argument should be a string to be
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000222 sent to the child process, or None, if no data should be sent to
223 the child.
Tim Peterse718f612004-10-12 21:51:32 +0000224
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000225 communicate() returns a tuple (stdout, stderr).
226
227 Note: The data read is buffered in memory, so do not use this
228 method if the data size is large or unlimited.
229
230The following attributes are also available:
231
232stdin
233 If the stdin argument is PIPE, this attribute is a file object
234 that provides input to the child process. Otherwise, it is None.
235
236stdout
237 If the stdout argument is PIPE, this attribute is a file object
238 that provides output from the child process. Otherwise, it is
239 None.
240
241stderr
242 If the stderr argument is PIPE, this attribute is file object that
243 provides error output from the child process. Otherwise, it is
244 None.
245
246pid
247 The process ID of the child process.
248
249returncode
250 The child return code. A None value indicates that the process
251 hasn't terminated yet. A negative value -N indicates that the
Gregory P. Smithf5604852010-12-13 06:45:02 +0000252 child was terminated by signal N (POSIX only).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000253
254
255Replacing older functions with the subprocess module
256====================================================
257In this section, "a ==> b" means that b can be used as a replacement
258for a.
259
260Note: All functions in this section fail (more or less) silently if
261the executed program cannot be found; this module raises an OSError
262exception.
263
264In the following examples, we assume that the subprocess module is
265imported with "from subprocess import *".
266
267
268Replacing /bin/sh shell backquote
269---------------------------------
270output=`mycmd myarg`
271==>
272output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
273
274
275Replacing shell pipe line
276-------------------------
277output=`dmesg | grep hda`
278==>
279p1 = Popen(["dmesg"], stdout=PIPE)
Peter Astrand6fdf3cb2004-11-30 18:06:42 +0000280p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000281output = p2.communicate()[0]
282
283
284Replacing os.system()
285---------------------
286sts = os.system("mycmd" + " myarg")
287==>
288p = Popen("mycmd" + " myarg", shell=True)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000289pid, sts = os.waitpid(p.pid, 0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000290
291Note:
292
293* Calling the program through the shell is usually not required.
294
295* It's easier to look at the returncode attribute than the
296 exitstatus.
297
298A more real-world example would look like this:
299
300try:
301 retcode = call("mycmd" + " myarg", shell=True)
302 if retcode < 0:
Guido van Rossumc2f93dc2007-05-24 00:50:02 +0000303 print("Child was terminated by signal", -retcode, file=sys.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000304 else:
Guido van Rossumc2f93dc2007-05-24 00:50:02 +0000305 print("Child returned", retcode, file=sys.stderr)
306except OSError as e:
307 print("Execution failed:", e, file=sys.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000308
309
310Replacing os.spawn*
311-------------------
Tim Peterse718f612004-10-12 21:51:32 +0000312P_NOWAIT example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000313
314pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")
315==>
316pid = Popen(["/bin/mycmd", "myarg"]).pid
317
318
319P_WAIT example:
320
321retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg")
322==>
323retcode = call(["/bin/mycmd", "myarg"])
324
325
Tim Peterse718f612004-10-12 21:51:32 +0000326Vector example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000327
328os.spawnvp(os.P_NOWAIT, path, args)
329==>
330Popen([path] + args[1:])
331
332
Tim Peterse718f612004-10-12 21:51:32 +0000333Environment example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000334
335os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env)
336==>
337Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000338"""
339
340import sys
341mswindows = (sys.platform == "win32")
342
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000343import io
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000344import os
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400345import time
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000346import traceback
Christian Heimesfdab48e2008-01-20 09:06:41 +0000347import gc
Christian Heimesa342c012008-04-20 21:01:16 +0000348import signal
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000349import builtins
Gregory P. Smithd23047b2010-12-04 09:10:44 +0000350import warnings
Ross Lagerwall4f61b022011-04-05 15:34:00 +0200351import errno
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000352
Peter Astrand454f7672005-01-01 09:36:35 +0000353# Exception classes used by this module.
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400354class SubprocessError(Exception): pass
355
356
357class CalledProcessError(SubprocessError):
Georg Brandlf9734072008-12-07 15:30:06 +0000358 """This exception is raised when a process run by check_call() or
359 check_output() returns a non-zero exit status.
360 The exit status will be stored in the returncode attribute;
361 check_output() will also store the output in the output attribute.
362 """
363 def __init__(self, returncode, cmd, output=None):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000364 self.returncode = returncode
365 self.cmd = cmd
Georg Brandlf9734072008-12-07 15:30:06 +0000366 self.output = output
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000367 def __str__(self):
368 return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode)
369
Peter Astrand454f7672005-01-01 09:36:35 +0000370
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400371class TimeoutExpired(SubprocessError):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400372 """This exception is raised when the timeout expires while waiting for a
373 child process.
374 """
Reid Kleckner2b228f02011-03-16 16:57:54 -0400375 def __init__(self, cmd, timeout, output=None):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400376 self.cmd = cmd
Reid Kleckner2b228f02011-03-16 16:57:54 -0400377 self.timeout = timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400378 self.output = output
379
380 def __str__(self):
381 return ("Command '%s' timed out after %s seconds" %
382 (self.cmd, self.timeout))
383
384
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000385if mswindows:
386 import threading
387 import msvcrt
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200388 import _winapi
Brian Curtin1ce6b582010-04-24 16:19:22 +0000389 class STARTUPINFO:
390 dwFlags = 0
391 hStdInput = None
392 hStdOutput = None
393 hStdError = None
394 wShowWindow = 0
395 class pywintypes:
396 error = IOError
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000397else:
398 import select
Gregory P. Smithd06fa472009-07-04 02:46:54 +0000399 _has_poll = hasattr(select, 'poll')
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -0700400 import _posixsubprocess
401 _create_pipe = _posixsubprocess.cloexec_pipe
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000402
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000403 # When select or poll has indicated that the file is writable,
404 # we can write up to _PIPE_BUF bytes without risk of blocking.
405 # POSIX defines PIPE_BUF as >= 512.
406 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
407
408
Brett Cannona23810f2008-05-26 19:04:21 +0000409__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200410 "getoutput", "check_output", "CalledProcessError", "DEVNULL"]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000411
Brian Curtin1ce6b582010-04-24 16:19:22 +0000412if mswindows:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200413 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
414 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
415 STD_ERROR_HANDLE, SW_HIDE,
416 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW)
Brian Curtin5d9deaa2011-04-29 16:24:07 -0500417
Brian Curtin08fd8d92011-04-29 16:11:30 -0500418 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
Brian Curtin8b8e7f42011-04-29 15:48:13 -0500419 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
420 "STD_ERROR_HANDLE", "SW_HIDE",
421 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW"])
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200422
423 class Handle(int):
424 closed = False
425
426 def Close(self, CloseHandle=_winapi.CloseHandle):
427 if not self.closed:
428 self.closed = True
429 CloseHandle(self)
430
431 def Detach(self):
432 if not self.closed:
433 self.closed = True
434 return int(self)
435 raise ValueError("already closed")
436
437 def __repr__(self):
438 return "Handle(%d)" % int(self)
439
440 __del__ = Close
441 __str__ = __repr__
442
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000443try:
444 MAXFD = os.sysconf("SC_OPEN_MAX")
445except:
446 MAXFD = 256
447
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200448# This lists holds Popen instances for which the underlying process had not
449# exited at the time its __del__ method got called: those processes are wait()ed
450# for synchronously from _cleanup() when a new Popen object is created, to avoid
451# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000452_active = []
453
454def _cleanup():
455 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000456 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200457 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000458 try:
459 _active.remove(inst)
460 except ValueError:
461 # This can happen if two threads create a new Popen instance.
462 # It's harmless that it was already removed, so ignore.
463 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000464
465PIPE = -1
466STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200467DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000468
469
Gregory P. Smitha59c59f2010-03-01 00:17:40 +0000470def _eintr_retry_call(func, *args):
471 while True:
472 try:
473 return func(*args)
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200474 except InterruptedError:
475 continue
Gregory P. Smitha59c59f2010-03-01 00:17:40 +0000476
477
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400478def call(*popenargs, timeout=None, **kwargs):
479 """Run command with arguments. Wait for command to complete or
480 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000481
482 The arguments are the same as for the Popen constructor. Example:
483
484 retcode = call(["ls", "-l"])
485 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200486 with Popen(*popenargs, **kwargs) as p:
487 try:
488 return p.wait(timeout=timeout)
489 except:
490 p.kill()
491 p.wait()
492 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000493
494
Peter Astrand454f7672005-01-01 09:36:35 +0000495def check_call(*popenargs, **kwargs):
496 """Run command with arguments. Wait for command to complete. If
497 the exit code was zero then return, otherwise raise
498 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000499 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000500
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400501 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000502
503 check_call(["ls", "-l"])
504 """
505 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000506 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000507 cmd = kwargs.get("args")
508 if cmd is None:
509 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000510 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000511 return 0
512
513
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400514def check_output(*popenargs, timeout=None, **kwargs):
Georg Brandl2708f3a2009-12-20 14:38:23 +0000515 r"""Run command with arguments and return its output as a byte string.
Georg Brandlf9734072008-12-07 15:30:06 +0000516
517 If the exit code was non-zero it raises a CalledProcessError. The
518 CalledProcessError object will have the return code in the returncode
519 attribute and output in the output attribute.
520
521 The arguments are the same as for the Popen constructor. Example:
522
523 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000524 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000525
526 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000527 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000528
529 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000530 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000531 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000532 b'ls: non_existent_file: No such file or directory\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000533 """
534 if 'stdout' in kwargs:
535 raise ValueError('stdout argument not allowed, it will be overridden.')
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200536 with Popen(*popenargs, stdout=PIPE, **kwargs) as process:
537 try:
538 output, unused_err = process.communicate(timeout=timeout)
539 except TimeoutExpired:
540 process.kill()
541 output, unused_err = process.communicate()
542 raise TimeoutExpired(process.args, timeout, output=output)
543 except:
544 process.kill()
545 process.wait()
546 raise
547 retcode = process.poll()
548 if retcode:
549 raise CalledProcessError(retcode, process.args, output=output)
Georg Brandlf9734072008-12-07 15:30:06 +0000550 return output
Peter Astrand454f7672005-01-01 09:36:35 +0000551
552
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000553def list2cmdline(seq):
554 """
555 Translate a sequence of arguments into a command line
556 string, using the same rules as the MS C runtime:
557
558 1) Arguments are delimited by white space, which is either a
559 space or a tab.
560
561 2) A string surrounded by double quotation marks is
562 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000563 contained within. A quoted string can be embedded in an
564 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000565
566 3) A double quotation mark preceded by a backslash is
567 interpreted as a literal double quotation mark.
568
569 4) Backslashes are interpreted literally, unless they
570 immediately precede a double quotation mark.
571
572 5) If backslashes immediately precede a double quotation mark,
573 every pair of backslashes is interpreted as a literal
574 backslash. If the number of backslashes is odd, the last
575 backslash escapes the next double quotation mark as
576 described in rule 3.
577 """
578
579 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000580 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
581 # or search http://msdn.microsoft.com for
582 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000583 result = []
584 needquote = False
585 for arg in seq:
586 bs_buf = []
587
588 # Add a space to separate this argument from the others
589 if result:
590 result.append(' ')
591
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000592 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000593 if needquote:
594 result.append('"')
595
596 for c in arg:
597 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000598 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000599 bs_buf.append(c)
600 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000601 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000602 result.append('\\' * len(bs_buf)*2)
603 bs_buf = []
604 result.append('\\"')
605 else:
606 # Normal char
607 if bs_buf:
608 result.extend(bs_buf)
609 bs_buf = []
610 result.append(c)
611
Christian Heimesfdab48e2008-01-20 09:06:41 +0000612 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000613 if bs_buf:
614 result.extend(bs_buf)
615
616 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000617 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000618 result.append('"')
619
620 return ''.join(result)
621
622
Brett Cannona23810f2008-05-26 19:04:21 +0000623# Various tools for executing commands and looking at their output and status.
624#
Gregory P. Smithf5604852010-12-13 06:45:02 +0000625# NB This only works (and is only relevant) for POSIX.
Brett Cannona23810f2008-05-26 19:04:21 +0000626
627def getstatusoutput(cmd):
628 """Return (status, output) of executing cmd in a shell.
629
630 Execute the string 'cmd' in a shell with os.popen() and return a 2-tuple
631 (status, output). cmd is actually run as '{ cmd ; } 2>&1', so that the
632 returned output will contain output or error messages. A trailing newline
633 is stripped from the output. The exit status for the command can be
634 interpreted according to the rules for the C function wait(). Example:
635
636 >>> import subprocess
637 >>> subprocess.getstatusoutput('ls /bin/ls')
638 (0, '/bin/ls')
639 >>> subprocess.getstatusoutput('cat /bin/junk')
640 (256, 'cat: /bin/junk: No such file or directory')
641 >>> subprocess.getstatusoutput('/bin/junk')
642 (256, 'sh: /bin/junk: not found')
643 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200644 with os.popen('{ ' + cmd + '; } 2>&1', 'r') as pipe:
645 try:
646 text = pipe.read()
647 sts = pipe.close()
648 except:
649 process = pipe._proc
650 process.kill()
651 process.wait()
652 raise
653 if sts is None:
654 sts = 0
655 if text[-1:] == '\n':
656 text = text[:-1]
Brett Cannona23810f2008-05-26 19:04:21 +0000657 return sts, text
658
659
660def getoutput(cmd):
661 """Return output (stdout or stderr) of executing cmd in a shell.
662
663 Like getstatusoutput(), except the exit status is ignored and the return
664 value is a string containing the command's output. Example:
665
666 >>> import subprocess
667 >>> subprocess.getoutput('ls /bin/ls')
668 '/bin/ls'
669 """
670 return getstatusoutput(cmd)[1]
671
672
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000673_PLATFORM_DEFAULT_CLOSE_FDS = object()
Gregory P. Smithf5604852010-12-13 06:45:02 +0000674
675
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000676class Popen(object):
677 def __init__(self, args, bufsize=0, executable=None,
678 stdin=None, stdout=None, stderr=None,
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000679 preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,
680 shell=False, cwd=None, env=None, universal_newlines=False,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000681 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000682 restore_signals=True, start_new_session=False,
683 pass_fds=()):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000684 """Create new Popen instance."""
685 _cleanup()
686
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000687 self._child_created = False
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400688 self._input = None
689 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000690 if bufsize is None:
691 bufsize = 0 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000692 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000693 raise TypeError("bufsize must be an integer")
694
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000695 if mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000696 if preexec_fn is not None:
697 raise ValueError("preexec_fn is not supported on Windows "
698 "platforms")
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000699 any_stdio_set = (stdin is not None or stdout is not None or
700 stderr is not None)
701 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
702 if any_stdio_set:
703 close_fds = False
704 else:
705 close_fds = True
706 elif close_fds and any_stdio_set:
707 raise ValueError(
708 "close_fds is not supported on Windows platforms"
709 " if you redirect stdin/stdout/stderr")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000710 else:
711 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000712 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
713 close_fds = True
714 if pass_fds and not close_fds:
715 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
716 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000717 if startupinfo is not None:
718 raise ValueError("startupinfo is only supported on Windows "
719 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000720 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000721 raise ValueError("creationflags is only supported on Windows "
722 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000723
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400724 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000725 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000726 self.stdout = None
727 self.stderr = None
728 self.pid = None
729 self.returncode = None
730 self.universal_newlines = universal_newlines
731
732 # Input and output objects. The general principle is like
733 # this:
734 #
735 # Parent Child
736 # ------ -----
737 # p2cwrite ---stdin---> p2cread
738 # c2pread <--stdout--- c2pwrite
739 # errread <--stderr--- errwrite
740 #
741 # On POSIX, the child objects are file descriptors. On
742 # Windows, these are Windows file handles. The parent objects
743 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000744 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000745 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000746
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000747 (p2cread, p2cwrite,
748 c2pread, c2pwrite,
749 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
750
Antoine Pitrouc9982322011-01-04 19:07:07 +0000751 # We wrap OS handles *before* launching the child, otherwise a
752 # quickly terminating child could make our fds unwrappable
753 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000754
Thomas Wouterscf297e42007-02-23 15:07:44 +0000755 if mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000756 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000757 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000758 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000759 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000760 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000761 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000762
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000763 if p2cwrite != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000764 self.stdin = io.open(p2cwrite, 'wb', bufsize)
765 if self.universal_newlines:
Antoine Pitrouab85ff32011-07-23 22:03:45 +0200766 self.stdin = io.TextIOWrapper(self.stdin, write_through=True)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000767 if c2pread != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000768 self.stdout = io.open(c2pread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000769 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000770 self.stdout = io.TextIOWrapper(self.stdout)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000771 if errread != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000772 self.stderr = io.open(errread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000773 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000774 self.stderr = io.TextIOWrapper(self.stderr)
Tim Peterse718f612004-10-12 21:51:32 +0000775
Antoine Pitrouc9982322011-01-04 19:07:07 +0000776 try:
777 self._execute_child(args, executable, preexec_fn, close_fds,
778 pass_fds, cwd, env, universal_newlines,
779 startupinfo, creationflags, shell,
780 p2cread, p2cwrite,
781 c2pread, c2pwrite,
782 errread, errwrite,
783 restore_signals, start_new_session)
784 except:
785 # Cleanup if the child failed starting
786 for f in filter(None, [self.stdin, self.stdout, self.stderr]):
787 try:
788 f.close()
789 except EnvironmentError:
790 # Ignore EBADF or other errors
791 pass
792 raise
793
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000794
Guido van Rossum98297ee2007-11-06 21:34:58 +0000795 def _translate_newlines(self, data, encoding):
796 data = data.replace(b"\r\n", b"\n").replace(b"\r", b"\n")
797 return data.decode(encoding)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000798
Brian Curtin79cdb662010-12-03 02:46:02 +0000799 def __enter__(self):
800 return self
801
802 def __exit__(self, type, value, traceback):
803 if self.stdout:
804 self.stdout.close()
805 if self.stderr:
806 self.stderr.close()
807 if self.stdin:
808 self.stdin.close()
Gregory P. Smith6b657452011-05-11 21:42:08 -0700809 # Wait for the process to terminate, to avoid zombies.
810 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000811
Brett Cannon84df1e62010-05-14 00:33:40 +0000812 def __del__(self, _maxsize=sys.maxsize, _active=_active):
Victor Stinner87b9bc32011-06-01 00:57:47 +0200813 # If __init__ hasn't had a chance to execute (e.g. if it
814 # was passed an undeclared keyword argument), we don't
815 # have a _child_created attribute at all.
816 if not getattr(self, '_child_created', False):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000817 # We didn't get to successfully create a child process.
818 return
819 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000820 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000821 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000822 # Child is still running, keep us alive until we can wait on it.
823 _active.append(self)
824
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200825 def _get_devnull(self):
826 if not hasattr(self, '_devnull'):
827 self._devnull = os.open(os.devnull, os.O_RDWR)
828 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000829
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400830 def communicate(self, input=None, timeout=None):
Peter Astrand23109f02005-03-03 20:28:59 +0000831 """Interact with process: Send data to stdin. Read data from
832 stdout and stderr, until end-of-file is reached. Wait for
Gregory P. Smitha454ef62011-05-22 22:29:49 -0700833 process to terminate. The optional input argument should be
834 bytes to be sent to the child process, or None, if no data
Peter Astrand23109f02005-03-03 20:28:59 +0000835 should be sent to the child.
Tim Peterseba28be2005-03-28 01:08:02 +0000836
Peter Astrand23109f02005-03-03 20:28:59 +0000837 communicate() returns a tuple (stdout, stderr)."""
838
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400839 if self._communication_started and input:
840 raise ValueError("Cannot send input after starting communication")
841
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400842 # Optimization: If we are not worried about timeouts, we haven't
843 # started communicating, and we have one or zero pipes, using select()
844 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200845 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400846 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000847 stdout = None
848 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000849 if self.stdin:
850 if input:
Ross Lagerwall4f61b022011-04-05 15:34:00 +0200851 try:
852 self.stdin.write(input)
853 except IOError as e:
854 if e.errno != errno.EPIPE and e.errno != errno.EINVAL:
855 raise
Peter Astrand23109f02005-03-03 20:28:59 +0000856 self.stdin.close()
857 elif self.stdout:
Victor Stinner2cfb6f32011-07-05 14:00:56 +0200858 stdout = _eintr_retry_call(self.stdout.read)
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000859 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000860 elif self.stderr:
Victor Stinner2cfb6f32011-07-05 14:00:56 +0200861 stderr = _eintr_retry_call(self.stderr.read)
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000862 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000863 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200864 else:
865 if timeout is not None:
866 endtime = time.time() + timeout
867 else:
868 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000869
Victor Stinner7a8d0812011-04-05 13:13:08 +0200870 try:
871 stdout, stderr = self._communicate(input, endtime, timeout)
872 finally:
873 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400874
Victor Stinner7a8d0812011-04-05 13:13:08 +0200875 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400876
877 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +0000878
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000879
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000880 def poll(self):
881 return self._internal_poll()
882
883
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400884 def _remaining_time(self, endtime):
885 """Convenience for _communicate when computing timeouts."""
886 if endtime is None:
887 return None
888 else:
889 return endtime - time.time()
890
891
Reid Kleckner2b228f02011-03-16 16:57:54 -0400892 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400893 """Convenience for checking if a timeout has expired."""
894 if endtime is None:
895 return
896 if time.time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -0400897 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400898
899
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000900 if mswindows:
901 #
902 # Windows methods
903 #
904 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +0000905 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000906 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
907 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000908 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000909 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +0000910
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000911 p2cread, p2cwrite = -1, -1
912 c2pread, c2pwrite = -1, -1
913 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000914
Peter Astrandd38ddf42005-02-10 08:32:50 +0000915 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200916 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000917 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200918 p2cread, _ = _winapi.CreatePipe(None, 0)
919 p2cread = Handle(p2cread)
920 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000921 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200922 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
923 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200924 elif stdin == DEVNULL:
925 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000926 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000927 p2cread = msvcrt.get_osfhandle(stdin)
928 else:
929 # Assuming file-like object
930 p2cread = msvcrt.get_osfhandle(stdin.fileno())
931 p2cread = self._make_inheritable(p2cread)
932
Peter Astrandd38ddf42005-02-10 08:32:50 +0000933 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200934 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000935 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200936 _, c2pwrite = _winapi.CreatePipe(None, 0)
937 c2pwrite = Handle(c2pwrite)
938 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000939 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200940 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
941 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200942 elif stdout == DEVNULL:
943 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000944 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000945 c2pwrite = msvcrt.get_osfhandle(stdout)
946 else:
947 # Assuming file-like object
948 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
949 c2pwrite = self._make_inheritable(c2pwrite)
950
Peter Astrandd38ddf42005-02-10 08:32:50 +0000951 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200952 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000953 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200954 _, errwrite = _winapi.CreatePipe(None, 0)
955 errwrite = Handle(errwrite)
956 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000957 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200958 errread, errwrite = _winapi.CreatePipe(None, 0)
959 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000960 elif stderr == STDOUT:
961 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200962 elif stderr == DEVNULL:
963 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000964 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000965 errwrite = msvcrt.get_osfhandle(stderr)
966 else:
967 # Assuming file-like object
968 errwrite = msvcrt.get_osfhandle(stderr.fileno())
969 errwrite = self._make_inheritable(errwrite)
970
971 return (p2cread, p2cwrite,
972 c2pread, c2pwrite,
973 errread, errwrite)
974
975
976 def _make_inheritable(self, handle):
977 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200978 h = _winapi.DuplicateHandle(
979 _winapi.GetCurrentProcess(), handle,
980 _winapi.GetCurrentProcess(), 0, 1,
981 _winapi.DUPLICATE_SAME_ACCESS)
982 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000983
984
985 def _find_w9xpopen(self):
986 """Find and return absolut path to w9xpopen.exe"""
Brian Curtin1ce6b582010-04-24 16:19:22 +0000987 w9xpopen = os.path.join(
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200988 os.path.dirname(_winapi.GetModuleFileName(0)),
Tim Peterse8374a52004-10-13 03:15:00 +0000989 "w9xpopen.exe")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000990 if not os.path.exists(w9xpopen):
991 # Eeek - file-not-found - possibly an embedding
992 # situation - see if we can locate it in sys.exec_prefix
Tim Peterse8374a52004-10-13 03:15:00 +0000993 w9xpopen = os.path.join(os.path.dirname(sys.exec_prefix),
994 "w9xpopen.exe")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000995 if not os.path.exists(w9xpopen):
Tim Peterse8374a52004-10-13 03:15:00 +0000996 raise RuntimeError("Cannot locate w9xpopen.exe, which is "
997 "needed for Popen to work with your "
998 "shell or platform.")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000999 return w9xpopen
1000
Tim Peterse718f612004-10-12 21:51:32 +00001001
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001002 def _execute_child(self, args, executable, preexec_fn, close_fds,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001003 pass_fds, cwd, env, universal_newlines,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001004 startupinfo, creationflags, shell,
1005 p2cread, p2cwrite,
1006 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001007 errread, errwrite,
1008 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001009 """Execute program (MS Windows version)"""
1010
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001011 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001012
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001013 if not isinstance(args, str):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001014 args = list2cmdline(args)
1015
Peter Astrandc1d65362004-11-07 14:30:34 +00001016 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001017 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001018 startupinfo = STARTUPINFO()
Victor Stinnerb3693582010-05-21 20:13:12 +00001019 if -1 not in (p2cread, c2pwrite, errwrite):
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001020 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001021 startupinfo.hStdInput = p2cread
1022 startupinfo.hStdOutput = c2pwrite
1023 startupinfo.hStdError = errwrite
1024
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001025 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001026 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1027 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001028 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001029 args = '{} /c "{}"'.format (comspec, args)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001030 if (_winapi.GetVersion() >= 0x80000000 or
Tim Peterse8374a52004-10-13 03:15:00 +00001031 os.path.basename(comspec).lower() == "command.com"):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001032 # Win9x, or using command.com on NT. We need to
1033 # use the w9xpopen intermediate program. For more
1034 # information, see KB Q150956
1035 # (http://web.archive.org/web/20011105084002/http://support.microsoft.com/support/kb/articles/Q150/9/56.asp)
1036 w9xpopen = self._find_w9xpopen()
1037 args = '"%s" %s' % (w9xpopen, args)
1038 # Not passing CREATE_NEW_CONSOLE has been known to
1039 # cause random failures on win9x. Specifically a
1040 # dialog: "Your program accessed mem currently in
1041 # use at xxx" and a hopeful warning about the
Mark Dickinson934896d2009-02-21 20:59:32 +00001042 # stability of your system. Cost is Ctrl+C won't
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001043 # kill children.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001044 creationflags |= _winapi.CREATE_NEW_CONSOLE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001045
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001046 # Start the process
1047 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001048 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001049 # no special security
1050 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001051 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001052 creationflags,
1053 env,
1054 cwd,
1055 startupinfo)
Guido van Rossumb940e112007-01-10 16:19:56 +00001056 except pywintypes.error as e:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001057 # Translate pywintypes.error to WindowsError, which is
1058 # a subclass of OSError. FIXME: We should really
Ezio Melotti13925002011-03-16 11:05:33 +02001059 # translate errno using _sys_errlist (or similar), but
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001060 # how can this be done from Python?
1061 raise WindowsError(*e.args)
Tim Goldenad537f22010-08-08 11:18:16 +00001062 finally:
1063 # Child is launched. Close the parent's copy of those pipe
1064 # handles that only the child should have open. You need
1065 # to make sure that no handles to the write end of the
1066 # output pipe are maintained in this process or else the
1067 # pipe will not close when the child process exits and the
1068 # ReadFile will hang.
1069 if p2cread != -1:
1070 p2cread.Close()
1071 if c2pwrite != -1:
1072 c2pwrite.Close()
1073 if errwrite != -1:
1074 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001075 if hasattr(self, '_devnull'):
1076 os.close(self._devnull)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001077
1078 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001079 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001080 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001081 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001082 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001083
Brett Cannon84df1e62010-05-14 00:33:40 +00001084 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001085 _WaitForSingleObject=_winapi.WaitForSingleObject,
1086 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1087 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001088 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001089 attribute.
1090
1091 This method is called by __del__, so it can only refer to objects
1092 in its local scope.
1093
1094 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001095 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001096 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1097 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001098 return self.returncode
1099
1100
Reid Kleckner2b228f02011-03-16 16:57:54 -04001101 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001102 """Wait for child process to terminate. Returns returncode
1103 attribute."""
Reid Kleckner2b228f02011-03-16 16:57:54 -04001104 if endtime is not None:
1105 timeout = self._remaining_time(endtime)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001106 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001107 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001108 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001109 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001110 if self.returncode is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001111 result = _winapi.WaitForSingleObject(self._handle,
1112 timeout_millis)
1113 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001114 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001115 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001116 return self.returncode
1117
1118
1119 def _readerthread(self, fh, buffer):
1120 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001121 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001122
1123
Reid Kleckner2b228f02011-03-16 16:57:54 -04001124 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001125 # Start reader threads feeding into a list hanging off of this
1126 # object, unless they've already been started.
1127 if self.stdout and not hasattr(self, "_stdout_buff"):
1128 self._stdout_buff = []
1129 self.stdout_thread = \
1130 threading.Thread(target=self._readerthread,
1131 args=(self.stdout, self._stdout_buff))
1132 self.stdout_thread.daemon = True
1133 self.stdout_thread.start()
1134 if self.stderr and not hasattr(self, "_stderr_buff"):
1135 self._stderr_buff = []
1136 self.stderr_thread = \
1137 threading.Thread(target=self._readerthread,
1138 args=(self.stderr, self._stderr_buff))
1139 self.stderr_thread.daemon = True
1140 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001141
1142 if self.stdin:
Peter Astrandd38ddf42005-02-10 08:32:50 +00001143 if input is not None:
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001144 try:
1145 self.stdin.write(input)
1146 except IOError as e:
1147 if e.errno != errno.EPIPE:
1148 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001149 self.stdin.close()
1150
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001151 # Wait for the reader threads, or time out. If we time out, the
1152 # threads remain reading and the fds left open in case the user
1153 # calls communicate again.
1154 if self.stdout is not None:
1155 self.stdout_thread.join(self._remaining_time(endtime))
1156 if self.stdout_thread.isAlive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001157 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001158 if self.stderr is not None:
1159 self.stderr_thread.join(self._remaining_time(endtime))
1160 if self.stderr_thread.isAlive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001161 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001162
1163 # Collect the output from and close both pipes, now that we know
1164 # both have been read successfully.
1165 stdout = None
1166 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001167 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001168 stdout = self._stdout_buff
1169 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001170 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001171 stderr = self._stderr_buff
1172 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001173
1174 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001175 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001176 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001177 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001178 stderr = stderr[0]
1179
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001180 return (stdout, stderr)
1181
Christian Heimesa342c012008-04-20 21:01:16 +00001182 def send_signal(self, sig):
1183 """Send a signal to the process
1184 """
1185 if sig == signal.SIGTERM:
1186 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001187 elif sig == signal.CTRL_C_EVENT:
1188 os.kill(self.pid, signal.CTRL_C_EVENT)
1189 elif sig == signal.CTRL_BREAK_EVENT:
1190 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001191 else:
Brian Curtin19651362010-09-07 13:24:38 +00001192 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001193
1194 def terminate(self):
1195 """Terminates the process
1196 """
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001197 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001198 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001199 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001200 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1201 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001202 rc = _winapi.GetExitCodeProcess(self._handle)
1203 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001204 raise
1205 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001206
1207 kill = terminate
1208
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001209 else:
1210 #
1211 # POSIX methods
1212 #
1213 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001214 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001215 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1216 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001217 p2cread, p2cwrite = -1, -1
1218 c2pread, c2pwrite = -1, -1
1219 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001220
Peter Astrandd38ddf42005-02-10 08:32:50 +00001221 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001222 pass
1223 elif stdin == PIPE:
Gregory P. Smith51ee2702010-12-13 07:59:39 +00001224 p2cread, p2cwrite = _create_pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001225 elif stdin == DEVNULL:
1226 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001227 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001228 p2cread = stdin
1229 else:
1230 # Assuming file-like object
1231 p2cread = stdin.fileno()
1232
Peter Astrandd38ddf42005-02-10 08:32:50 +00001233 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001234 pass
1235 elif stdout == PIPE:
Gregory P. Smith51ee2702010-12-13 07:59:39 +00001236 c2pread, c2pwrite = _create_pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001237 elif stdout == DEVNULL:
1238 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001239 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001240 c2pwrite = stdout
1241 else:
1242 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001243 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001244
Peter Astrandd38ddf42005-02-10 08:32:50 +00001245 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001246 pass
1247 elif stderr == PIPE:
Gregory P. Smith51ee2702010-12-13 07:59:39 +00001248 errread, errwrite = _create_pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001249 elif stderr == STDOUT:
1250 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001251 elif stderr == DEVNULL:
1252 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001253 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001254 errwrite = stderr
1255 else:
1256 # Assuming file-like object
1257 errwrite = stderr.fileno()
1258
1259 return (p2cread, p2cwrite,
1260 c2pread, c2pwrite,
1261 errread, errwrite)
1262
1263
Antoine Pitrou47f14ba2011-01-03 23:42:01 +00001264 def _close_fds(self, fds_to_keep):
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001265 start_fd = 3
Antoine Pitrou47f14ba2011-01-03 23:42:01 +00001266 for fd in sorted(fds_to_keep):
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001267 if fd >= start_fd:
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001268 os.closerange(start_fd, fd)
1269 start_fd = fd + 1
1270 if start_fd <= MAXFD:
1271 os.closerange(start_fd, MAXFD)
1272
1273
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001274 def _execute_child(self, args, executable, preexec_fn, close_fds,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001275 pass_fds, cwd, env, universal_newlines,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001276 startupinfo, creationflags, shell,
1277 p2cread, p2cwrite,
1278 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001279 errread, errwrite,
1280 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001281 """Execute program (POSIX version)"""
1282
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001283 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001284 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001285 else:
1286 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001287
1288 if shell:
1289 args = ["/bin/sh", "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001290 if executable:
1291 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001292
Peter Astrandd38ddf42005-02-10 08:32:50 +00001293 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001294 executable = args[0]
1295
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001296 # For transferring possible exec failure from child to parent.
1297 # Data format: "exception name:hex errno:description"
1298 # Pickle is not used; it is complex and involves memory allocation.
Gregory P. Smith51ee2702010-12-13 07:59:39 +00001299 errpipe_read, errpipe_write = _create_pipe()
Christian Heimesfdab48e2008-01-20 09:06:41 +00001300 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001301 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001302 # We must avoid complex work that could involve
1303 # malloc or free in the child process to avoid
1304 # potential deadlocks, thus we do all this here.
1305 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001306
Victor Stinner372b8382011-06-21 17:24:21 +02001307 if env is not None:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001308 env_list = [os.fsencode(k) + b'=' + os.fsencode(v)
1309 for k, v in env.items()]
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001310 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001311 env_list = None # Use execv instead of execve.
1312 executable = os.fsencode(executable)
1313 if os.path.dirname(executable):
1314 executable_list = (executable,)
1315 else:
1316 # This matches the behavior of os._execvpe().
1317 executable_list = tuple(
1318 os.path.join(os.fsencode(dir), executable)
1319 for dir in os.get_exec_path(env))
1320 fds_to_keep = set(pass_fds)
1321 fds_to_keep.add(errpipe_write)
1322 self.pid = _posixsubprocess.fork_exec(
1323 args, executable_list,
1324 close_fds, sorted(fds_to_keep), cwd, env_list,
1325 p2cread, p2cwrite, c2pread, c2pwrite,
1326 errread, errwrite,
1327 errpipe_read, errpipe_write,
1328 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001329 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001330 finally:
1331 # be sure the FD is closed no matter what
1332 os.close(errpipe_write)
1333
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001334 if p2cread != -1 and p2cwrite != -1:
Facundo Batista10706e22009-06-19 20:34:30 +00001335 os.close(p2cread)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001336 if c2pwrite != -1 and c2pread != -1:
Facundo Batista10706e22009-06-19 20:34:30 +00001337 os.close(c2pwrite)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001338 if errwrite != -1 and errread != -1:
Facundo Batista10706e22009-06-19 20:34:30 +00001339 os.close(errwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001340 if hasattr(self, '_devnull'):
1341 os.close(self._devnull)
Facundo Batista10706e22009-06-19 20:34:30 +00001342
1343 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001344 # exception (limited in size)
1345 data = bytearray()
1346 while True:
1347 part = _eintr_retry_call(os.read, errpipe_read, 50000)
1348 data += part
1349 if not part or len(data) > 50000:
1350 break
Facundo Batista10706e22009-06-19 20:34:30 +00001351 finally:
1352 # be sure the FD is closed no matter what
1353 os.close(errpipe_read)
1354
Guido van Rossumaf2362a2007-05-15 22:32:02 +00001355 if data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001356 try:
1357 _eintr_retry_call(os.waitpid, self.pid, 0)
1358 except OSError as e:
1359 if e.errno != errno.ECHILD:
1360 raise
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001361 try:
1362 exception_name, hex_errno, err_msg = data.split(b':', 2)
1363 except ValueError:
1364 print('Bad exception data:', repr(data))
1365 exception_name = b'RuntimeError'
1366 hex_errno = b'0'
1367 err_msg = b'Unknown'
1368 child_exception_type = getattr(
1369 builtins, exception_name.decode('ascii'),
1370 RuntimeError)
Benjamin Petersond75fcb42009-02-19 04:22:03 +00001371 for fd in (p2cwrite, c2pread, errread):
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001372 if fd != -1:
Benjamin Petersond75fcb42009-02-19 04:22:03 +00001373 os.close(fd)
Victor Stinner4d078042010-04-23 19:28:32 +00001374 err_msg = err_msg.decode(errors="surrogatepass")
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001375 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001376 errno_num = int(hex_errno, 16)
1377 if errno_num != 0:
1378 err_msg = os.strerror(errno_num)
1379 if errno_num == errno.ENOENT:
Benjamin Peterson5f780402010-11-20 18:07:52 +00001380 err_msg += ': ' + repr(args[0])
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001381 raise child_exception_type(errno_num, err_msg)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001382 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001383
1384
Brett Cannon84df1e62010-05-14 00:33:40 +00001385 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1386 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
1387 _WEXITSTATUS=os.WEXITSTATUS):
1388 # This method is called (indirectly) by __del__, so it cannot
1389 # refer to anything outside of its local scope."""
1390 if _WIFSIGNALED(sts):
1391 self.returncode = -_WTERMSIG(sts)
1392 elif _WIFEXITED(sts):
1393 self.returncode = _WEXITSTATUS(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001394 else:
1395 # Should never happen
1396 raise RuntimeError("Unknown child exit status!")
1397
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001398
Brett Cannon84df1e62010-05-14 00:33:40 +00001399 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
1400 _WNOHANG=os.WNOHANG, _os_error=os.error):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001401 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001402 attribute.
1403
1404 This method is called by __del__, so it cannot reference anything
1405 outside of the local scope (nor can any methods it calls).
1406
1407 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001408 if self.returncode is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001409 try:
Brett Cannon84df1e62010-05-14 00:33:40 +00001410 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001411 if pid == self.pid:
1412 self._handle_exitstatus(sts)
Brett Cannon84df1e62010-05-14 00:33:40 +00001413 except _os_error:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001414 if _deadstate is not None:
1415 self.returncode = _deadstate
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001416 return self.returncode
1417
1418
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001419 def _try_wait(self, wait_flags):
1420 try:
1421 (pid, sts) = _eintr_retry_call(os.waitpid, self.pid, wait_flags)
1422 except OSError as e:
1423 if e.errno != errno.ECHILD:
1424 raise
1425 # This happens if SIGCLD is set to be ignored or waiting
1426 # for child processes has otherwise been disabled for our
1427 # process. This child is dead, we can't get the status.
1428 pid = self.pid
1429 sts = 0
1430 return (pid, sts)
1431
1432
1433 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001434 """Wait for child process to terminate. Returns returncode
1435 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001436 if self.returncode is not None:
1437 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001438
1439 # endtime is preferred to timeout. timeout is only used for
1440 # printing.
1441 if endtime is not None or timeout is not None:
1442 if endtime is None:
1443 endtime = time.time() + timeout
1444 elif timeout is None:
1445 timeout = self._remaining_time(endtime)
1446
1447 if endtime is not None:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001448 # Enter a busy loop if we have a timeout. This busy loop was
1449 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1450 delay = 0.0005 # 500 us -> initial delay of 1 ms
1451 while True:
1452 (pid, sts) = self._try_wait(os.WNOHANG)
1453 assert pid == self.pid or pid == 0
1454 if pid == self.pid:
1455 self._handle_exitstatus(sts)
1456 break
1457 remaining = self._remaining_time(endtime)
1458 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001459 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001460 delay = min(delay * 2, remaining, .05)
1461 time.sleep(delay)
1462 elif self.returncode is None:
1463 (pid, sts) = self._try_wait(0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001464 self._handle_exitstatus(sts)
1465 return self.returncode
1466
1467
Reid Kleckner2b228f02011-03-16 16:57:54 -04001468 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001469 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001470 # Flush stdio buffer. This might block, if the user has
1471 # been writing to .stdin in an uncontrolled fashion.
1472 self.stdin.flush()
1473 if not input:
1474 self.stdin.close()
1475
1476 if _has_poll:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001477 stdout, stderr = self._communicate_with_poll(input, endtime,
1478 orig_timeout)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001479 else:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001480 stdout, stderr = self._communicate_with_select(input, endtime,
1481 orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001482
1483 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001484
1485 # All data exchanged. Translate lists into strings.
1486 if stdout is not None:
1487 stdout = b''.join(stdout)
1488 if stderr is not None:
1489 stderr = b''.join(stderr)
1490
1491 # Translate newlines, if requested.
1492 # This also turns bytes into strings.
1493 if self.universal_newlines:
1494 if stdout is not None:
1495 stdout = self._translate_newlines(stdout,
1496 self.stdout.encoding)
1497 if stderr is not None:
1498 stderr = self._translate_newlines(stderr,
1499 self.stderr.encoding)
1500
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001501 return (stdout, stderr)
1502
1503
Reid Kleckner2b228f02011-03-16 16:57:54 -04001504 def _communicate_with_poll(self, input, endtime, orig_timeout):
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001505 stdout = None # Return
1506 stderr = None # Return
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001507
1508 if not self._communication_started:
1509 self._fd2file = {}
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001510
1511 poller = select.poll()
1512 def register_and_append(file_obj, eventmask):
1513 poller.register(file_obj.fileno(), eventmask)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001514 self._fd2file[file_obj.fileno()] = file_obj
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001515
1516 def close_unregister_and_remove(fd):
1517 poller.unregister(fd)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001518 self._fd2file[fd].close()
1519 self._fd2file.pop(fd)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001520
1521 if self.stdin and input:
1522 register_and_append(self.stdin, select.POLLOUT)
1523
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001524 # Only create this mapping if we haven't already.
1525 if not self._communication_started:
1526 self._fd2output = {}
1527 if self.stdout:
1528 self._fd2output[self.stdout.fileno()] = []
1529 if self.stderr:
1530 self._fd2output[self.stderr.fileno()] = []
1531
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001532 select_POLLIN_POLLPRI = select.POLLIN | select.POLLPRI
1533 if self.stdout:
1534 register_and_append(self.stdout, select_POLLIN_POLLPRI)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001535 stdout = self._fd2output[self.stdout.fileno()]
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001536 if self.stderr:
1537 register_and_append(self.stderr, select_POLLIN_POLLPRI)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001538 stderr = self._fd2output[self.stderr.fileno()]
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001539
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001540 # Save the input here so that if we time out while communicating,
1541 # we can continue sending input if we retry.
1542 if self.stdin and self._input is None:
1543 self._input_offset = 0
1544 self._input = input
1545 if self.universal_newlines:
1546 self._input = self._input.encode(self.stdin.encoding)
1547
1548 while self._fd2file:
Victor Stinner7a8d0812011-04-05 13:13:08 +02001549 timeout = self._remaining_time(endtime)
1550 if timeout is not None and timeout < 0:
1551 raise TimeoutExpired(self.args, orig_timeout)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001552 try:
Victor Stinner7a8d0812011-04-05 13:13:08 +02001553 ready = poller.poll(timeout)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001554 except select.error as e:
1555 if e.args[0] == errno.EINTR:
1556 continue
1557 raise
Reid Kleckner2b228f02011-03-16 16:57:54 -04001558 self._check_timeout(endtime, orig_timeout)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001559
1560 # XXX Rewrite these to use non-blocking I/O on the
1561 # file objects; they are no longer using C stdio!
1562
1563 for fd, mode in ready:
1564 if mode & select.POLLOUT:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001565 chunk = self._input[self._input_offset :
1566 self._input_offset + _PIPE_BUF]
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001567 try:
Ross Lagerwall0b9ea932011-04-05 16:07:49 +02001568 self._input_offset += os.write(fd, chunk)
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001569 except OSError as e:
1570 if e.errno == errno.EPIPE:
1571 close_unregister_and_remove(fd)
1572 else:
1573 raise
1574 else:
Ross Lagerwall0b9ea932011-04-05 16:07:49 +02001575 if self._input_offset >= len(self._input):
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001576 close_unregister_and_remove(fd)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001577 elif mode & select_POLLIN_POLLPRI:
1578 data = os.read(fd, 4096)
1579 if not data:
1580 close_unregister_and_remove(fd)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001581 self._fd2output[fd].append(data)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001582 else:
1583 # Ignore hang up or errors.
1584 close_unregister_and_remove(fd)
1585
1586 return (stdout, stderr)
1587
1588
Reid Kleckner2b228f02011-03-16 16:57:54 -04001589 def _communicate_with_select(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001590 if not self._communication_started:
1591 self._read_set = []
1592 self._write_set = []
1593 if self.stdin and input:
1594 self._write_set.append(self.stdin)
1595 if self.stdout:
1596 self._read_set.append(self.stdout)
1597 if self.stderr:
1598 self._read_set.append(self.stderr)
1599
1600 if self.stdin and self._input is None:
1601 self._input_offset = 0
1602 self._input = input
1603 if self.universal_newlines:
1604 self._input = self._input.encode(self.stdin.encoding)
1605
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001606 stdout = None # Return
1607 stderr = None # Return
1608
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001609 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001610 if not self._communication_started:
1611 self._stdout_buff = []
1612 stdout = self._stdout_buff
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001613 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001614 if not self._communication_started:
1615 self._stderr_buff = []
1616 stderr = self._stderr_buff
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001617
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001618 while self._read_set or self._write_set:
Victor Stinner7a8d0812011-04-05 13:13:08 +02001619 timeout = self._remaining_time(endtime)
1620 if timeout is not None and timeout < 0:
1621 raise TimeoutExpired(self.args, orig_timeout)
Georg Brandl86b2fb92008-07-16 03:43:04 +00001622 try:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001623 (rlist, wlist, xlist) = \
1624 select.select(self._read_set, self._write_set, [],
Victor Stinner7a8d0812011-04-05 13:13:08 +02001625 timeout)
Georg Brandl86b2fb92008-07-16 03:43:04 +00001626 except select.error as e:
1627 if e.args[0] == errno.EINTR:
1628 continue
1629 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001630
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001631 # According to the docs, returning three empty lists indicates
1632 # that the timeout expired.
1633 if not (rlist or wlist or xlist):
Reid Kleckner2b228f02011-03-16 16:57:54 -04001634 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001635 # We also check what time it is ourselves for good measure.
Reid Kleckner2b228f02011-03-16 16:57:54 -04001636 self._check_timeout(endtime, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001637
Guido van Rossum98297ee2007-11-06 21:34:58 +00001638 # XXX Rewrite these to use non-blocking I/O on the
1639 # file objects; they are no longer using C stdio!
1640
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001641 if self.stdin in wlist:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001642 chunk = self._input[self._input_offset :
1643 self._input_offset + _PIPE_BUF]
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001644 try:
1645 bytes_written = os.write(self.stdin.fileno(), chunk)
1646 except OSError as e:
1647 if e.errno == errno.EPIPE:
1648 self.stdin.close()
Ross Lagerwall0b9ea932011-04-05 16:07:49 +02001649 self._write_set.remove(self.stdin)
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001650 else:
1651 raise
1652 else:
Ross Lagerwall0b9ea932011-04-05 16:07:49 +02001653 self._input_offset += bytes_written
1654 if self._input_offset >= len(self._input):
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001655 self.stdin.close()
Ross Lagerwall0b9ea932011-04-05 16:07:49 +02001656 self._write_set.remove(self.stdin)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001657
1658 if self.stdout in rlist:
1659 data = os.read(self.stdout.fileno(), 1024)
Guido van Rossumc9e363c2007-05-15 23:18:55 +00001660 if not data:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001661 self.stdout.close()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001662 self._read_set.remove(self.stdout)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001663 stdout.append(data)
1664
1665 if self.stderr in rlist:
1666 data = os.read(self.stderr.fileno(), 1024)
Guido van Rossumc9e363c2007-05-15 23:18:55 +00001667 if not data:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001668 self.stderr.close()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001669 self._read_set.remove(self.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001670 stderr.append(data)
1671
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001672 return (stdout, stderr)
1673
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001674
Christian Heimesa342c012008-04-20 21:01:16 +00001675 def send_signal(self, sig):
1676 """Send a signal to the process
1677 """
1678 os.kill(self.pid, sig)
1679
1680 def terminate(self):
1681 """Terminate the process with SIGTERM
1682 """
1683 self.send_signal(signal.SIGTERM)
1684
1685 def kill(self):
1686 """Kill the process with SIGKILL
1687 """
1688 self.send_signal(signal.SIGKILL)