blob: 2c5c888910c32177a8ca24d8862204a9aa4fe876 [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
Brian Curtin1ce6b582010-04-24 16:19:22 +0000388 import _subprocess
389 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:
Brian Curtin08fd8d92011-04-29 16:11:30 -0500413 from _subprocess import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
Brian Curtin8b8e7f42011-04-29 15:48:13 -0500414 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"])
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000422try:
423 MAXFD = os.sysconf("SC_OPEN_MAX")
424except:
425 MAXFD = 256
426
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200427# This lists holds Popen instances for which the underlying process had not
428# exited at the time its __del__ method got called: those processes are wait()ed
429# for synchronously from _cleanup() when a new Popen object is created, to avoid
430# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000431_active = []
432
433def _cleanup():
434 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000435 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200436 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000437 try:
438 _active.remove(inst)
439 except ValueError:
440 # This can happen if two threads create a new Popen instance.
441 # It's harmless that it was already removed, so ignore.
442 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000443
444PIPE = -1
445STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200446DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000447
448
Gregory P. Smitha59c59f2010-03-01 00:17:40 +0000449def _eintr_retry_call(func, *args):
450 while True:
451 try:
452 return func(*args)
Victor Stinner2cfb6f32011-07-05 14:00:56 +0200453 except (OSError, IOError) as e:
Gregory P. Smitha59c59f2010-03-01 00:17:40 +0000454 if e.errno == errno.EINTR:
455 continue
456 raise
457
458
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400459def call(*popenargs, timeout=None, **kwargs):
460 """Run command with arguments. Wait for command to complete or
461 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000462
463 The arguments are the same as for the Popen constructor. Example:
464
465 retcode = call(["ls", "-l"])
466 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200467 with Popen(*popenargs, **kwargs) as p:
468 try:
469 return p.wait(timeout=timeout)
470 except:
471 p.kill()
472 p.wait()
473 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000474
475
Peter Astrand454f7672005-01-01 09:36:35 +0000476def check_call(*popenargs, **kwargs):
477 """Run command with arguments. Wait for command to complete. If
478 the exit code was zero then return, otherwise raise
479 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000480 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000481
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400482 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000483
484 check_call(["ls", "-l"])
485 """
486 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000487 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000488 cmd = kwargs.get("args")
489 if cmd is None:
490 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000491 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000492 return 0
493
494
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400495def check_output(*popenargs, timeout=None, **kwargs):
Georg Brandl2708f3a2009-12-20 14:38:23 +0000496 r"""Run command with arguments and return its output as a byte string.
Georg Brandlf9734072008-12-07 15:30:06 +0000497
498 If the exit code was non-zero it raises a CalledProcessError. The
499 CalledProcessError object will have the return code in the returncode
500 attribute and output in the output attribute.
501
502 The arguments are the same as for the Popen constructor. Example:
503
504 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000505 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000506
507 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000508 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000509
510 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000511 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000512 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000513 b'ls: non_existent_file: No such file or directory\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000514 """
515 if 'stdout' in kwargs:
516 raise ValueError('stdout argument not allowed, it will be overridden.')
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200517 with Popen(*popenargs, stdout=PIPE, **kwargs) as process:
518 try:
519 output, unused_err = process.communicate(timeout=timeout)
520 except TimeoutExpired:
521 process.kill()
522 output, unused_err = process.communicate()
523 raise TimeoutExpired(process.args, timeout, output=output)
524 except:
525 process.kill()
526 process.wait()
527 raise
528 retcode = process.poll()
529 if retcode:
530 raise CalledProcessError(retcode, process.args, output=output)
Georg Brandlf9734072008-12-07 15:30:06 +0000531 return output
Peter Astrand454f7672005-01-01 09:36:35 +0000532
533
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000534def list2cmdline(seq):
535 """
536 Translate a sequence of arguments into a command line
537 string, using the same rules as the MS C runtime:
538
539 1) Arguments are delimited by white space, which is either a
540 space or a tab.
541
542 2) A string surrounded by double quotation marks is
543 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000544 contained within. A quoted string can be embedded in an
545 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000546
547 3) A double quotation mark preceded by a backslash is
548 interpreted as a literal double quotation mark.
549
550 4) Backslashes are interpreted literally, unless they
551 immediately precede a double quotation mark.
552
553 5) If backslashes immediately precede a double quotation mark,
554 every pair of backslashes is interpreted as a literal
555 backslash. If the number of backslashes is odd, the last
556 backslash escapes the next double quotation mark as
557 described in rule 3.
558 """
559
560 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000561 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
562 # or search http://msdn.microsoft.com for
563 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000564 result = []
565 needquote = False
566 for arg in seq:
567 bs_buf = []
568
569 # Add a space to separate this argument from the others
570 if result:
571 result.append(' ')
572
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000573 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000574 if needquote:
575 result.append('"')
576
577 for c in arg:
578 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000579 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000580 bs_buf.append(c)
581 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000582 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000583 result.append('\\' * len(bs_buf)*2)
584 bs_buf = []
585 result.append('\\"')
586 else:
587 # Normal char
588 if bs_buf:
589 result.extend(bs_buf)
590 bs_buf = []
591 result.append(c)
592
Christian Heimesfdab48e2008-01-20 09:06:41 +0000593 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000594 if bs_buf:
595 result.extend(bs_buf)
596
597 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000598 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000599 result.append('"')
600
601 return ''.join(result)
602
603
Brett Cannona23810f2008-05-26 19:04:21 +0000604# Various tools for executing commands and looking at their output and status.
605#
Gregory P. Smithf5604852010-12-13 06:45:02 +0000606# NB This only works (and is only relevant) for POSIX.
Brett Cannona23810f2008-05-26 19:04:21 +0000607
608def getstatusoutput(cmd):
609 """Return (status, output) of executing cmd in a shell.
610
611 Execute the string 'cmd' in a shell with os.popen() and return a 2-tuple
612 (status, output). cmd is actually run as '{ cmd ; } 2>&1', so that the
613 returned output will contain output or error messages. A trailing newline
614 is stripped from the output. The exit status for the command can be
615 interpreted according to the rules for the C function wait(). Example:
616
617 >>> import subprocess
618 >>> subprocess.getstatusoutput('ls /bin/ls')
619 (0, '/bin/ls')
620 >>> subprocess.getstatusoutput('cat /bin/junk')
621 (256, 'cat: /bin/junk: No such file or directory')
622 >>> subprocess.getstatusoutput('/bin/junk')
623 (256, 'sh: /bin/junk: not found')
624 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200625 with os.popen('{ ' + cmd + '; } 2>&1', 'r') as pipe:
626 try:
627 text = pipe.read()
628 sts = pipe.close()
629 except:
630 process = pipe._proc
631 process.kill()
632 process.wait()
633 raise
634 if sts is None:
635 sts = 0
636 if text[-1:] == '\n':
637 text = text[:-1]
Brett Cannona23810f2008-05-26 19:04:21 +0000638 return sts, text
639
640
641def getoutput(cmd):
642 """Return output (stdout or stderr) of executing cmd in a shell.
643
644 Like getstatusoutput(), except the exit status is ignored and the return
645 value is a string containing the command's output. Example:
646
647 >>> import subprocess
648 >>> subprocess.getoutput('ls /bin/ls')
649 '/bin/ls'
650 """
651 return getstatusoutput(cmd)[1]
652
653
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000654_PLATFORM_DEFAULT_CLOSE_FDS = object()
Gregory P. Smithf5604852010-12-13 06:45:02 +0000655
656
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000657class Popen(object):
658 def __init__(self, args, bufsize=0, executable=None,
659 stdin=None, stdout=None, stderr=None,
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000660 preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,
661 shell=False, cwd=None, env=None, universal_newlines=False,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000662 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000663 restore_signals=True, start_new_session=False,
664 pass_fds=()):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000665 """Create new Popen instance."""
666 _cleanup()
667
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000668 self._child_created = False
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400669 self._input = None
670 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000671 if bufsize is None:
672 bufsize = 0 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000673 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000674 raise TypeError("bufsize must be an integer")
675
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000676 if mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000677 if preexec_fn is not None:
678 raise ValueError("preexec_fn is not supported on Windows "
679 "platforms")
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000680 any_stdio_set = (stdin is not None or stdout is not None or
681 stderr is not None)
682 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
683 if any_stdio_set:
684 close_fds = False
685 else:
686 close_fds = True
687 elif close_fds and any_stdio_set:
688 raise ValueError(
689 "close_fds is not supported on Windows platforms"
690 " if you redirect stdin/stdout/stderr")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000691 else:
692 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000693 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
694 close_fds = True
695 if pass_fds and not close_fds:
696 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
697 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000698 if startupinfo is not None:
699 raise ValueError("startupinfo is only supported on Windows "
700 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000701 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000702 raise ValueError("creationflags is only supported on Windows "
703 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000704
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400705 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000706 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000707 self.stdout = None
708 self.stderr = None
709 self.pid = None
710 self.returncode = None
711 self.universal_newlines = universal_newlines
712
713 # Input and output objects. The general principle is like
714 # this:
715 #
716 # Parent Child
717 # ------ -----
718 # p2cwrite ---stdin---> p2cread
719 # c2pread <--stdout--- c2pwrite
720 # errread <--stderr--- errwrite
721 #
722 # On POSIX, the child objects are file descriptors. On
723 # Windows, these are Windows file handles. The parent objects
724 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000725 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000726 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000727
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000728 (p2cread, p2cwrite,
729 c2pread, c2pwrite,
730 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
731
Antoine Pitrouc9982322011-01-04 19:07:07 +0000732 # We wrap OS handles *before* launching the child, otherwise a
733 # quickly terminating child could make our fds unwrappable
734 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000735
Thomas Wouterscf297e42007-02-23 15:07:44 +0000736 if mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000737 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000738 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000739 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000740 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000741 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000742 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000743
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000744 if p2cwrite != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000745 self.stdin = io.open(p2cwrite, 'wb', bufsize)
746 if self.universal_newlines:
Antoine Pitrouab85ff32011-07-23 22:03:45 +0200747 self.stdin = io.TextIOWrapper(self.stdin, write_through=True)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000748 if c2pread != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000749 self.stdout = io.open(c2pread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000750 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000751 self.stdout = io.TextIOWrapper(self.stdout)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000752 if errread != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000753 self.stderr = io.open(errread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000754 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000755 self.stderr = io.TextIOWrapper(self.stderr)
Tim Peterse718f612004-10-12 21:51:32 +0000756
Antoine Pitrouc9982322011-01-04 19:07:07 +0000757 try:
758 self._execute_child(args, executable, preexec_fn, close_fds,
759 pass_fds, cwd, env, universal_newlines,
760 startupinfo, creationflags, shell,
761 p2cread, p2cwrite,
762 c2pread, c2pwrite,
763 errread, errwrite,
764 restore_signals, start_new_session)
765 except:
766 # Cleanup if the child failed starting
767 for f in filter(None, [self.stdin, self.stdout, self.stderr]):
768 try:
769 f.close()
770 except EnvironmentError:
771 # Ignore EBADF or other errors
772 pass
773 raise
774
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000775
Guido van Rossum98297ee2007-11-06 21:34:58 +0000776 def _translate_newlines(self, data, encoding):
777 data = data.replace(b"\r\n", b"\n").replace(b"\r", b"\n")
778 return data.decode(encoding)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000779
Brian Curtin79cdb662010-12-03 02:46:02 +0000780 def __enter__(self):
781 return self
782
783 def __exit__(self, type, value, traceback):
784 if self.stdout:
785 self.stdout.close()
786 if self.stderr:
787 self.stderr.close()
788 if self.stdin:
789 self.stdin.close()
Gregory P. Smith6b657452011-05-11 21:42:08 -0700790 # Wait for the process to terminate, to avoid zombies.
791 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000792
Brett Cannon84df1e62010-05-14 00:33:40 +0000793 def __del__(self, _maxsize=sys.maxsize, _active=_active):
Victor Stinner87b9bc32011-06-01 00:57:47 +0200794 # If __init__ hasn't had a chance to execute (e.g. if it
795 # was passed an undeclared keyword argument), we don't
796 # have a _child_created attribute at all.
797 if not getattr(self, '_child_created', False):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000798 # We didn't get to successfully create a child process.
799 return
800 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000801 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000802 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000803 # Child is still running, keep us alive until we can wait on it.
804 _active.append(self)
805
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200806 def _get_devnull(self):
807 if not hasattr(self, '_devnull'):
808 self._devnull = os.open(os.devnull, os.O_RDWR)
809 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000810
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400811 def communicate(self, input=None, timeout=None):
Peter Astrand23109f02005-03-03 20:28:59 +0000812 """Interact with process: Send data to stdin. Read data from
813 stdout and stderr, until end-of-file is reached. Wait for
Gregory P. Smitha454ef62011-05-22 22:29:49 -0700814 process to terminate. The optional input argument should be
815 bytes to be sent to the child process, or None, if no data
Peter Astrand23109f02005-03-03 20:28:59 +0000816 should be sent to the child.
Tim Peterseba28be2005-03-28 01:08:02 +0000817
Peter Astrand23109f02005-03-03 20:28:59 +0000818 communicate() returns a tuple (stdout, stderr)."""
819
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400820 if self._communication_started and input:
821 raise ValueError("Cannot send input after starting communication")
822
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400823 # Optimization: If we are not worried about timeouts, we haven't
824 # started communicating, and we have one or zero pipes, using select()
825 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200826 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400827 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000828 stdout = None
829 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000830 if self.stdin:
831 if input:
Ross Lagerwall4f61b022011-04-05 15:34:00 +0200832 try:
833 self.stdin.write(input)
834 except IOError as e:
835 if e.errno != errno.EPIPE and e.errno != errno.EINVAL:
836 raise
Peter Astrand23109f02005-03-03 20:28:59 +0000837 self.stdin.close()
838 elif self.stdout:
Victor Stinner2cfb6f32011-07-05 14:00:56 +0200839 stdout = _eintr_retry_call(self.stdout.read)
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000840 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000841 elif self.stderr:
Victor Stinner2cfb6f32011-07-05 14:00:56 +0200842 stderr = _eintr_retry_call(self.stderr.read)
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000843 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000844 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200845 else:
846 if timeout is not None:
847 endtime = time.time() + timeout
848 else:
849 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000850
Victor Stinner7a8d0812011-04-05 13:13:08 +0200851 try:
852 stdout, stderr = self._communicate(input, endtime, timeout)
853 finally:
854 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400855
Victor Stinner7a8d0812011-04-05 13:13:08 +0200856 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400857
858 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +0000859
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000860
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000861 def poll(self):
862 return self._internal_poll()
863
864
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400865 def _remaining_time(self, endtime):
866 """Convenience for _communicate when computing timeouts."""
867 if endtime is None:
868 return None
869 else:
870 return endtime - time.time()
871
872
Reid Kleckner2b228f02011-03-16 16:57:54 -0400873 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400874 """Convenience for checking if a timeout has expired."""
875 if endtime is None:
876 return
877 if time.time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -0400878 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400879
880
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000881 if mswindows:
882 #
883 # Windows methods
884 #
885 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +0000886 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000887 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
888 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000889 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000890 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +0000891
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000892 p2cread, p2cwrite = -1, -1
893 c2pread, c2pwrite = -1, -1
894 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000895
Peter Astrandd38ddf42005-02-10 08:32:50 +0000896 if stdin is None:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000897 p2cread = _subprocess.GetStdHandle(_subprocess.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000898 if p2cread is None:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000899 p2cread, _ = _subprocess.CreatePipe(None, 0)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000900 elif stdin == PIPE:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000901 p2cread, p2cwrite = _subprocess.CreatePipe(None, 0)
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200902 elif stdin == DEVNULL:
903 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000904 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000905 p2cread = msvcrt.get_osfhandle(stdin)
906 else:
907 # Assuming file-like object
908 p2cread = msvcrt.get_osfhandle(stdin.fileno())
909 p2cread = self._make_inheritable(p2cread)
910
Peter Astrandd38ddf42005-02-10 08:32:50 +0000911 if stdout is None:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000912 c2pwrite = _subprocess.GetStdHandle(_subprocess.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000913 if c2pwrite is None:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000914 _, c2pwrite = _subprocess.CreatePipe(None, 0)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000915 elif stdout == PIPE:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000916 c2pread, c2pwrite = _subprocess.CreatePipe(None, 0)
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200917 elif stdout == DEVNULL:
918 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000919 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000920 c2pwrite = msvcrt.get_osfhandle(stdout)
921 else:
922 # Assuming file-like object
923 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
924 c2pwrite = self._make_inheritable(c2pwrite)
925
Peter Astrandd38ddf42005-02-10 08:32:50 +0000926 if stderr is None:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000927 errwrite = _subprocess.GetStdHandle(_subprocess.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000928 if errwrite is None:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000929 _, errwrite = _subprocess.CreatePipe(None, 0)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000930 elif stderr == PIPE:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000931 errread, errwrite = _subprocess.CreatePipe(None, 0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000932 elif stderr == STDOUT:
933 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200934 elif stderr == DEVNULL:
935 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +0000936 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000937 errwrite = msvcrt.get_osfhandle(stderr)
938 else:
939 # Assuming file-like object
940 errwrite = msvcrt.get_osfhandle(stderr.fileno())
941 errwrite = self._make_inheritable(errwrite)
942
943 return (p2cread, p2cwrite,
944 c2pread, c2pwrite,
945 errread, errwrite)
946
947
948 def _make_inheritable(self, handle):
949 """Return a duplicate of handle, which is inheritable"""
Brian Curtin1ce6b582010-04-24 16:19:22 +0000950 return _subprocess.DuplicateHandle(_subprocess.GetCurrentProcess(),
951 handle, _subprocess.GetCurrentProcess(), 0, 1,
952 _subprocess.DUPLICATE_SAME_ACCESS)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000953
954
955 def _find_w9xpopen(self):
956 """Find and return absolut path to w9xpopen.exe"""
Brian Curtin1ce6b582010-04-24 16:19:22 +0000957 w9xpopen = os.path.join(
958 os.path.dirname(_subprocess.GetModuleFileName(0)),
Tim Peterse8374a52004-10-13 03:15:00 +0000959 "w9xpopen.exe")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000960 if not os.path.exists(w9xpopen):
961 # Eeek - file-not-found - possibly an embedding
962 # situation - see if we can locate it in sys.exec_prefix
Tim Peterse8374a52004-10-13 03:15:00 +0000963 w9xpopen = os.path.join(os.path.dirname(sys.exec_prefix),
964 "w9xpopen.exe")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000965 if not os.path.exists(w9xpopen):
Tim Peterse8374a52004-10-13 03:15:00 +0000966 raise RuntimeError("Cannot locate w9xpopen.exe, which is "
967 "needed for Popen to work with your "
968 "shell or platform.")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000969 return w9xpopen
970
Tim Peterse718f612004-10-12 21:51:32 +0000971
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000972 def _execute_child(self, args, executable, preexec_fn, close_fds,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000973 pass_fds, cwd, env, universal_newlines,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000974 startupinfo, creationflags, shell,
975 p2cread, p2cwrite,
976 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000977 errread, errwrite,
978 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000979 """Execute program (MS Windows version)"""
980
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000981 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000982
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000983 if not isinstance(args, str):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000984 args = list2cmdline(args)
985
Peter Astrandc1d65362004-11-07 14:30:34 +0000986 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +0000987 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000988 startupinfo = STARTUPINFO()
Victor Stinnerb3693582010-05-21 20:13:12 +0000989 if -1 not in (p2cread, c2pwrite, errwrite):
Brian Curtin1ce6b582010-04-24 16:19:22 +0000990 startupinfo.dwFlags |= _subprocess.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +0000991 startupinfo.hStdInput = p2cread
992 startupinfo.hStdOutput = c2pwrite
993 startupinfo.hStdError = errwrite
994
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000995 if shell:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000996 startupinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOW
997 startupinfo.wShowWindow = _subprocess.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000998 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +0000999 args = '{} /c "{}"'.format (comspec, args)
Brian Curtin1ce6b582010-04-24 16:19:22 +00001000 if (_subprocess.GetVersion() >= 0x80000000 or
Tim Peterse8374a52004-10-13 03:15:00 +00001001 os.path.basename(comspec).lower() == "command.com"):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001002 # Win9x, or using command.com on NT. We need to
1003 # use the w9xpopen intermediate program. For more
1004 # information, see KB Q150956
1005 # (http://web.archive.org/web/20011105084002/http://support.microsoft.com/support/kb/articles/Q150/9/56.asp)
1006 w9xpopen = self._find_w9xpopen()
1007 args = '"%s" %s' % (w9xpopen, args)
1008 # Not passing CREATE_NEW_CONSOLE has been known to
1009 # cause random failures on win9x. Specifically a
1010 # dialog: "Your program accessed mem currently in
1011 # use at xxx" and a hopeful warning about the
Mark Dickinson934896d2009-02-21 20:59:32 +00001012 # stability of your system. Cost is Ctrl+C won't
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001013 # kill children.
Brian Curtin1ce6b582010-04-24 16:19:22 +00001014 creationflags |= _subprocess.CREATE_NEW_CONSOLE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001015
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001016 # Start the process
1017 try:
Brian Curtin1ce6b582010-04-24 16:19:22 +00001018 hp, ht, pid, tid = _subprocess.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001019 # no special security
1020 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001021 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001022 creationflags,
1023 env,
1024 cwd,
1025 startupinfo)
Guido van Rossumb940e112007-01-10 16:19:56 +00001026 except pywintypes.error as e:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001027 # Translate pywintypes.error to WindowsError, which is
1028 # a subclass of OSError. FIXME: We should really
Ezio Melotti13925002011-03-16 11:05:33 +02001029 # translate errno using _sys_errlist (or similar), but
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001030 # how can this be done from Python?
1031 raise WindowsError(*e.args)
Tim Goldenad537f22010-08-08 11:18:16 +00001032 finally:
1033 # Child is launched. Close the parent's copy of those pipe
1034 # handles that only the child should have open. You need
1035 # to make sure that no handles to the write end of the
1036 # output pipe are maintained in this process or else the
1037 # pipe will not close when the child process exits and the
1038 # ReadFile will hang.
1039 if p2cread != -1:
1040 p2cread.Close()
1041 if c2pwrite != -1:
1042 c2pwrite.Close()
1043 if errwrite != -1:
1044 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001045 if hasattr(self, '_devnull'):
1046 os.close(self._devnull)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001047
1048 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001049 self._child_created = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001050 self._handle = hp
1051 self.pid = pid
1052 ht.Close()
1053
Brett Cannon84df1e62010-05-14 00:33:40 +00001054 def _internal_poll(self, _deadstate=None,
Victor Stinnerc807a612010-05-14 21:53:45 +00001055 _WaitForSingleObject=_subprocess.WaitForSingleObject,
1056 _WAIT_OBJECT_0=_subprocess.WAIT_OBJECT_0,
1057 _GetExitCodeProcess=_subprocess.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001058 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001059 attribute.
1060
1061 This method is called by __del__, so it can only refer to objects
1062 in its local scope.
1063
1064 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001065 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001066 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1067 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001068 return self.returncode
1069
1070
Reid Kleckner2b228f02011-03-16 16:57:54 -04001071 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001072 """Wait for child process to terminate. Returns returncode
1073 attribute."""
Reid Kleckner2b228f02011-03-16 16:57:54 -04001074 if endtime is not None:
1075 timeout = self._remaining_time(endtime)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001076 if timeout is None:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001077 timeout_millis = _subprocess.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001078 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001079 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001080 if self.returncode is None:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001081 result = _subprocess.WaitForSingleObject(self._handle,
1082 timeout_millis)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001083 if result == _subprocess.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001084 raise TimeoutExpired(self.args, timeout)
Brian Curtin1ce6b582010-04-24 16:19:22 +00001085 self.returncode = _subprocess.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001086 return self.returncode
1087
1088
1089 def _readerthread(self, fh, buffer):
1090 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001091 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001092
1093
Reid Kleckner2b228f02011-03-16 16:57:54 -04001094 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001095 # Start reader threads feeding into a list hanging off of this
1096 # object, unless they've already been started.
1097 if self.stdout and not hasattr(self, "_stdout_buff"):
1098 self._stdout_buff = []
1099 self.stdout_thread = \
1100 threading.Thread(target=self._readerthread,
1101 args=(self.stdout, self._stdout_buff))
1102 self.stdout_thread.daemon = True
1103 self.stdout_thread.start()
1104 if self.stderr and not hasattr(self, "_stderr_buff"):
1105 self._stderr_buff = []
1106 self.stderr_thread = \
1107 threading.Thread(target=self._readerthread,
1108 args=(self.stderr, self._stderr_buff))
1109 self.stderr_thread.daemon = True
1110 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001111
1112 if self.stdin:
Peter Astrandd38ddf42005-02-10 08:32:50 +00001113 if input is not None:
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001114 try:
1115 self.stdin.write(input)
1116 except IOError as e:
1117 if e.errno != errno.EPIPE:
1118 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001119 self.stdin.close()
1120
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001121 # Wait for the reader threads, or time out. If we time out, the
1122 # threads remain reading and the fds left open in case the user
1123 # calls communicate again.
1124 if self.stdout is not None:
1125 self.stdout_thread.join(self._remaining_time(endtime))
1126 if self.stdout_thread.isAlive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001127 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001128 if self.stderr is not None:
1129 self.stderr_thread.join(self._remaining_time(endtime))
1130 if self.stderr_thread.isAlive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001131 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001132
1133 # Collect the output from and close both pipes, now that we know
1134 # both have been read successfully.
1135 stdout = None
1136 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001137 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001138 stdout = self._stdout_buff
1139 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001140 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001141 stderr = self._stderr_buff
1142 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001143
1144 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001145 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001146 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001147 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001148 stderr = stderr[0]
1149
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001150 return (stdout, stderr)
1151
Christian Heimesa342c012008-04-20 21:01:16 +00001152 def send_signal(self, sig):
1153 """Send a signal to the process
1154 """
1155 if sig == signal.SIGTERM:
1156 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001157 elif sig == signal.CTRL_C_EVENT:
1158 os.kill(self.pid, signal.CTRL_C_EVENT)
1159 elif sig == signal.CTRL_BREAK_EVENT:
1160 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001161 else:
Brian Curtin19651362010-09-07 13:24:38 +00001162 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001163
1164 def terminate(self):
1165 """Terminates the process
1166 """
Brian Curtin1ce6b582010-04-24 16:19:22 +00001167 _subprocess.TerminateProcess(self._handle, 1)
Christian Heimesa342c012008-04-20 21:01:16 +00001168
1169 kill = terminate
1170
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001171 else:
1172 #
1173 # POSIX methods
1174 #
1175 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001176 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001177 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1178 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001179 p2cread, p2cwrite = -1, -1
1180 c2pread, c2pwrite = -1, -1
1181 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001182
Peter Astrandd38ddf42005-02-10 08:32:50 +00001183 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001184 pass
1185 elif stdin == PIPE:
Gregory P. Smith51ee2702010-12-13 07:59:39 +00001186 p2cread, p2cwrite = _create_pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001187 elif stdin == DEVNULL:
1188 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001189 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001190 p2cread = stdin
1191 else:
1192 # Assuming file-like object
1193 p2cread = stdin.fileno()
1194
Peter Astrandd38ddf42005-02-10 08:32:50 +00001195 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001196 pass
1197 elif stdout == PIPE:
Gregory P. Smith51ee2702010-12-13 07:59:39 +00001198 c2pread, c2pwrite = _create_pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001199 elif stdout == DEVNULL:
1200 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001201 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001202 c2pwrite = stdout
1203 else:
1204 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001205 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001206
Peter Astrandd38ddf42005-02-10 08:32:50 +00001207 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001208 pass
1209 elif stderr == PIPE:
Gregory P. Smith51ee2702010-12-13 07:59:39 +00001210 errread, errwrite = _create_pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001211 elif stderr == STDOUT:
1212 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001213 elif stderr == DEVNULL:
1214 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001215 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001216 errwrite = stderr
1217 else:
1218 # Assuming file-like object
1219 errwrite = stderr.fileno()
1220
1221 return (p2cread, p2cwrite,
1222 c2pread, c2pwrite,
1223 errread, errwrite)
1224
1225
Antoine Pitrou47f14ba2011-01-03 23:42:01 +00001226 def _close_fds(self, fds_to_keep):
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001227 start_fd = 3
Antoine Pitrou47f14ba2011-01-03 23:42:01 +00001228 for fd in sorted(fds_to_keep):
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001229 if fd >= start_fd:
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001230 os.closerange(start_fd, fd)
1231 start_fd = fd + 1
1232 if start_fd <= MAXFD:
1233 os.closerange(start_fd, MAXFD)
1234
1235
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001236 def _execute_child(self, args, executable, preexec_fn, close_fds,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001237 pass_fds, cwd, env, universal_newlines,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001238 startupinfo, creationflags, shell,
1239 p2cread, p2cwrite,
1240 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001241 errread, errwrite,
1242 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001243 """Execute program (POSIX version)"""
1244
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001245 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001246 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001247 else:
1248 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001249
1250 if shell:
1251 args = ["/bin/sh", "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001252 if executable:
1253 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001254
Peter Astrandd38ddf42005-02-10 08:32:50 +00001255 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001256 executable = args[0]
1257
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001258 # For transferring possible exec failure from child to parent.
1259 # Data format: "exception name:hex errno:description"
1260 # Pickle is not used; it is complex and involves memory allocation.
Gregory P. Smith51ee2702010-12-13 07:59:39 +00001261 errpipe_read, errpipe_write = _create_pipe()
Christian Heimesfdab48e2008-01-20 09:06:41 +00001262 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001263 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001264 # We must avoid complex work that could involve
1265 # malloc or free in the child process to avoid
1266 # potential deadlocks, thus we do all this here.
1267 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001268
Victor Stinner372b8382011-06-21 17:24:21 +02001269 if env is not None:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001270 env_list = [os.fsencode(k) + b'=' + os.fsencode(v)
1271 for k, v in env.items()]
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001272 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001273 env_list = None # Use execv instead of execve.
1274 executable = os.fsencode(executable)
1275 if os.path.dirname(executable):
1276 executable_list = (executable,)
1277 else:
1278 # This matches the behavior of os._execvpe().
1279 executable_list = tuple(
1280 os.path.join(os.fsencode(dir), executable)
1281 for dir in os.get_exec_path(env))
1282 fds_to_keep = set(pass_fds)
1283 fds_to_keep.add(errpipe_write)
1284 self.pid = _posixsubprocess.fork_exec(
1285 args, executable_list,
1286 close_fds, sorted(fds_to_keep), cwd, env_list,
1287 p2cread, p2cwrite, c2pread, c2pwrite,
1288 errread, errwrite,
1289 errpipe_read, errpipe_write,
1290 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001291 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001292 finally:
1293 # be sure the FD is closed no matter what
1294 os.close(errpipe_write)
1295
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001296 if p2cread != -1 and p2cwrite != -1:
Facundo Batista10706e22009-06-19 20:34:30 +00001297 os.close(p2cread)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001298 if c2pwrite != -1 and c2pread != -1:
Facundo Batista10706e22009-06-19 20:34:30 +00001299 os.close(c2pwrite)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001300 if errwrite != -1 and errread != -1:
Facundo Batista10706e22009-06-19 20:34:30 +00001301 os.close(errwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001302 if hasattr(self, '_devnull'):
1303 os.close(self._devnull)
Facundo Batista10706e22009-06-19 20:34:30 +00001304
1305 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001306 # exception (limited in size)
1307 data = bytearray()
1308 while True:
1309 part = _eintr_retry_call(os.read, errpipe_read, 50000)
1310 data += part
1311 if not part or len(data) > 50000:
1312 break
Facundo Batista10706e22009-06-19 20:34:30 +00001313 finally:
1314 # be sure the FD is closed no matter what
1315 os.close(errpipe_read)
1316
Guido van Rossumaf2362a2007-05-15 22:32:02 +00001317 if data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001318 try:
1319 _eintr_retry_call(os.waitpid, self.pid, 0)
1320 except OSError as e:
1321 if e.errno != errno.ECHILD:
1322 raise
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001323 try:
1324 exception_name, hex_errno, err_msg = data.split(b':', 2)
1325 except ValueError:
1326 print('Bad exception data:', repr(data))
1327 exception_name = b'RuntimeError'
1328 hex_errno = b'0'
1329 err_msg = b'Unknown'
1330 child_exception_type = getattr(
1331 builtins, exception_name.decode('ascii'),
1332 RuntimeError)
Benjamin Petersond75fcb42009-02-19 04:22:03 +00001333 for fd in (p2cwrite, c2pread, errread):
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001334 if fd != -1:
Benjamin Petersond75fcb42009-02-19 04:22:03 +00001335 os.close(fd)
Victor Stinner4d078042010-04-23 19:28:32 +00001336 err_msg = err_msg.decode(errors="surrogatepass")
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001337 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001338 errno_num = int(hex_errno, 16)
1339 if errno_num != 0:
1340 err_msg = os.strerror(errno_num)
1341 if errno_num == errno.ENOENT:
Benjamin Peterson5f780402010-11-20 18:07:52 +00001342 err_msg += ': ' + repr(args[0])
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001343 raise child_exception_type(errno_num, err_msg)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001344 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001345
1346
Brett Cannon84df1e62010-05-14 00:33:40 +00001347 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1348 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
1349 _WEXITSTATUS=os.WEXITSTATUS):
1350 # This method is called (indirectly) by __del__, so it cannot
1351 # refer to anything outside of its local scope."""
1352 if _WIFSIGNALED(sts):
1353 self.returncode = -_WTERMSIG(sts)
1354 elif _WIFEXITED(sts):
1355 self.returncode = _WEXITSTATUS(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001356 else:
1357 # Should never happen
1358 raise RuntimeError("Unknown child exit status!")
1359
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001360
Brett Cannon84df1e62010-05-14 00:33:40 +00001361 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
1362 _WNOHANG=os.WNOHANG, _os_error=os.error):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001363 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001364 attribute.
1365
1366 This method is called by __del__, so it cannot reference anything
1367 outside of the local scope (nor can any methods it calls).
1368
1369 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001370 if self.returncode is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001371 try:
Brett Cannon84df1e62010-05-14 00:33:40 +00001372 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001373 if pid == self.pid:
1374 self._handle_exitstatus(sts)
Brett Cannon84df1e62010-05-14 00:33:40 +00001375 except _os_error:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001376 if _deadstate is not None:
1377 self.returncode = _deadstate
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001378 return self.returncode
1379
1380
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001381 def _try_wait(self, wait_flags):
1382 try:
1383 (pid, sts) = _eintr_retry_call(os.waitpid, self.pid, wait_flags)
1384 except OSError as e:
1385 if e.errno != errno.ECHILD:
1386 raise
1387 # This happens if SIGCLD is set to be ignored or waiting
1388 # for child processes has otherwise been disabled for our
1389 # process. This child is dead, we can't get the status.
1390 pid = self.pid
1391 sts = 0
1392 return (pid, sts)
1393
1394
1395 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001396 """Wait for child process to terminate. Returns returncode
1397 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001398 if self.returncode is not None:
1399 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001400
1401 # endtime is preferred to timeout. timeout is only used for
1402 # printing.
1403 if endtime is not None or timeout is not None:
1404 if endtime is None:
1405 endtime = time.time() + timeout
1406 elif timeout is None:
1407 timeout = self._remaining_time(endtime)
1408
1409 if endtime is not None:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001410 # Enter a busy loop if we have a timeout. This busy loop was
1411 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1412 delay = 0.0005 # 500 us -> initial delay of 1 ms
1413 while True:
1414 (pid, sts) = self._try_wait(os.WNOHANG)
1415 assert pid == self.pid or pid == 0
1416 if pid == self.pid:
1417 self._handle_exitstatus(sts)
1418 break
1419 remaining = self._remaining_time(endtime)
1420 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001421 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001422 delay = min(delay * 2, remaining, .05)
1423 time.sleep(delay)
1424 elif self.returncode is None:
1425 (pid, sts) = self._try_wait(0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001426 self._handle_exitstatus(sts)
1427 return self.returncode
1428
1429
Reid Kleckner2b228f02011-03-16 16:57:54 -04001430 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001431 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001432 # Flush stdio buffer. This might block, if the user has
1433 # been writing to .stdin in an uncontrolled fashion.
1434 self.stdin.flush()
1435 if not input:
1436 self.stdin.close()
1437
1438 if _has_poll:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001439 stdout, stderr = self._communicate_with_poll(input, endtime,
1440 orig_timeout)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001441 else:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001442 stdout, stderr = self._communicate_with_select(input, endtime,
1443 orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001444
1445 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001446
1447 # All data exchanged. Translate lists into strings.
1448 if stdout is not None:
1449 stdout = b''.join(stdout)
1450 if stderr is not None:
1451 stderr = b''.join(stderr)
1452
1453 # Translate newlines, if requested.
1454 # This also turns bytes into strings.
1455 if self.universal_newlines:
1456 if stdout is not None:
1457 stdout = self._translate_newlines(stdout,
1458 self.stdout.encoding)
1459 if stderr is not None:
1460 stderr = self._translate_newlines(stderr,
1461 self.stderr.encoding)
1462
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001463 return (stdout, stderr)
1464
1465
Reid Kleckner2b228f02011-03-16 16:57:54 -04001466 def _communicate_with_poll(self, input, endtime, orig_timeout):
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001467 stdout = None # Return
1468 stderr = None # Return
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001469
1470 if not self._communication_started:
1471 self._fd2file = {}
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001472
1473 poller = select.poll()
1474 def register_and_append(file_obj, eventmask):
1475 poller.register(file_obj.fileno(), eventmask)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001476 self._fd2file[file_obj.fileno()] = file_obj
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001477
1478 def close_unregister_and_remove(fd):
1479 poller.unregister(fd)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001480 self._fd2file[fd].close()
1481 self._fd2file.pop(fd)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001482
1483 if self.stdin and input:
1484 register_and_append(self.stdin, select.POLLOUT)
1485
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001486 # Only create this mapping if we haven't already.
1487 if not self._communication_started:
1488 self._fd2output = {}
1489 if self.stdout:
1490 self._fd2output[self.stdout.fileno()] = []
1491 if self.stderr:
1492 self._fd2output[self.stderr.fileno()] = []
1493
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001494 select_POLLIN_POLLPRI = select.POLLIN | select.POLLPRI
1495 if self.stdout:
1496 register_and_append(self.stdout, select_POLLIN_POLLPRI)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001497 stdout = self._fd2output[self.stdout.fileno()]
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001498 if self.stderr:
1499 register_and_append(self.stderr, select_POLLIN_POLLPRI)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001500 stderr = self._fd2output[self.stderr.fileno()]
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001501
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001502 # Save the input here so that if we time out while communicating,
1503 # we can continue sending input if we retry.
1504 if self.stdin and self._input is None:
1505 self._input_offset = 0
1506 self._input = input
1507 if self.universal_newlines:
1508 self._input = self._input.encode(self.stdin.encoding)
1509
1510 while self._fd2file:
Victor Stinner7a8d0812011-04-05 13:13:08 +02001511 timeout = self._remaining_time(endtime)
1512 if timeout is not None and timeout < 0:
1513 raise TimeoutExpired(self.args, orig_timeout)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001514 try:
Victor Stinner7a8d0812011-04-05 13:13:08 +02001515 ready = poller.poll(timeout)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001516 except select.error as e:
1517 if e.args[0] == errno.EINTR:
1518 continue
1519 raise
Reid Kleckner2b228f02011-03-16 16:57:54 -04001520 self._check_timeout(endtime, orig_timeout)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001521
1522 # XXX Rewrite these to use non-blocking I/O on the
1523 # file objects; they are no longer using C stdio!
1524
1525 for fd, mode in ready:
1526 if mode & select.POLLOUT:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001527 chunk = self._input[self._input_offset :
1528 self._input_offset + _PIPE_BUF]
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001529 try:
Ross Lagerwall0b9ea932011-04-05 16:07:49 +02001530 self._input_offset += os.write(fd, chunk)
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001531 except OSError as e:
1532 if e.errno == errno.EPIPE:
1533 close_unregister_and_remove(fd)
1534 else:
1535 raise
1536 else:
Ross Lagerwall0b9ea932011-04-05 16:07:49 +02001537 if self._input_offset >= len(self._input):
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001538 close_unregister_and_remove(fd)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001539 elif mode & select_POLLIN_POLLPRI:
1540 data = os.read(fd, 4096)
1541 if not data:
1542 close_unregister_and_remove(fd)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001543 self._fd2output[fd].append(data)
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001544 else:
1545 # Ignore hang up or errors.
1546 close_unregister_and_remove(fd)
1547
1548 return (stdout, stderr)
1549
1550
Reid Kleckner2b228f02011-03-16 16:57:54 -04001551 def _communicate_with_select(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001552 if not self._communication_started:
1553 self._read_set = []
1554 self._write_set = []
1555 if self.stdin and input:
1556 self._write_set.append(self.stdin)
1557 if self.stdout:
1558 self._read_set.append(self.stdout)
1559 if self.stderr:
1560 self._read_set.append(self.stderr)
1561
1562 if self.stdin and self._input is None:
1563 self._input_offset = 0
1564 self._input = input
1565 if self.universal_newlines:
1566 self._input = self._input.encode(self.stdin.encoding)
1567
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001568 stdout = None # Return
1569 stderr = None # Return
1570
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001571 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001572 if not self._communication_started:
1573 self._stdout_buff = []
1574 stdout = self._stdout_buff
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001575 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001576 if not self._communication_started:
1577 self._stderr_buff = []
1578 stderr = self._stderr_buff
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001579
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001580 while self._read_set or self._write_set:
Victor Stinner7a8d0812011-04-05 13:13:08 +02001581 timeout = self._remaining_time(endtime)
1582 if timeout is not None and timeout < 0:
1583 raise TimeoutExpired(self.args, orig_timeout)
Georg Brandl86b2fb92008-07-16 03:43:04 +00001584 try:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001585 (rlist, wlist, xlist) = \
1586 select.select(self._read_set, self._write_set, [],
Victor Stinner7a8d0812011-04-05 13:13:08 +02001587 timeout)
Georg Brandl86b2fb92008-07-16 03:43:04 +00001588 except select.error as e:
1589 if e.args[0] == errno.EINTR:
1590 continue
1591 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001592
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001593 # According to the docs, returning three empty lists indicates
1594 # that the timeout expired.
1595 if not (rlist or wlist or xlist):
Reid Kleckner2b228f02011-03-16 16:57:54 -04001596 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001597 # We also check what time it is ourselves for good measure.
Reid Kleckner2b228f02011-03-16 16:57:54 -04001598 self._check_timeout(endtime, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001599
Guido van Rossum98297ee2007-11-06 21:34:58 +00001600 # XXX Rewrite these to use non-blocking I/O on the
1601 # file objects; they are no longer using C stdio!
1602
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001603 if self.stdin in wlist:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001604 chunk = self._input[self._input_offset :
1605 self._input_offset + _PIPE_BUF]
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001606 try:
1607 bytes_written = os.write(self.stdin.fileno(), chunk)
1608 except OSError as e:
1609 if e.errno == errno.EPIPE:
1610 self.stdin.close()
Ross Lagerwall0b9ea932011-04-05 16:07:49 +02001611 self._write_set.remove(self.stdin)
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001612 else:
1613 raise
1614 else:
Ross Lagerwall0b9ea932011-04-05 16:07:49 +02001615 self._input_offset += bytes_written
1616 if self._input_offset >= len(self._input):
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001617 self.stdin.close()
Ross Lagerwall0b9ea932011-04-05 16:07:49 +02001618 self._write_set.remove(self.stdin)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001619
1620 if self.stdout in rlist:
1621 data = os.read(self.stdout.fileno(), 1024)
Guido van Rossumc9e363c2007-05-15 23:18:55 +00001622 if not data:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001623 self.stdout.close()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001624 self._read_set.remove(self.stdout)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001625 stdout.append(data)
1626
1627 if self.stderr in rlist:
1628 data = os.read(self.stderr.fileno(), 1024)
Guido van Rossumc9e363c2007-05-15 23:18:55 +00001629 if not data:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001630 self.stderr.close()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001631 self._read_set.remove(self.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001632 stderr.append(data)
1633
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001634 return (stdout, stderr)
1635
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001636
Christian Heimesa342c012008-04-20 21:01:16 +00001637 def send_signal(self, sig):
1638 """Send a signal to the process
1639 """
1640 os.kill(self.pid, sig)
1641
1642 def terminate(self):
1643 """Terminate the process with SIGTERM
1644 """
1645 self.send_signal(signal.SIGTERM)
1646
1647 def kill(self):
1648 """Kill the process with SIGKILL
1649 """
1650 self.send_signal(signal.SIGKILL)