blob: c02fb525ec57af9f3cf93e86d7158a3778ba2cf6 [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
Georg Brandlf9734072008-12-07 15:30:06 +0000194check_call() and check_output() will raise CalledProcessError, if the
195called process returns a non-zero return code.
Peter Astrand454f7672005-01-01 09:36:35 +0000196
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000197
198Security
199--------
200Unlike some other popen functions, this implementation will never call
201/bin/sh implicitly. This means that all characters, including shell
202metacharacters, can safely be passed to child processes.
203
204
205Popen objects
206=============
207Instances of the Popen class have the following methods:
208
209poll()
210 Check if child process has terminated. Returns returncode
211 attribute.
212
213wait()
214 Wait for child process to terminate. Returns returncode attribute.
215
216communicate(input=None)
217 Interact with process: Send data to stdin. Read data from stdout
218 and stderr, until end-of-file is reached. Wait for process to
Thomas Wouters902d6eb2007-01-09 23:18:33 +0000219 terminate. The optional input argument should be a string to be
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000220 sent to the child process, or None, if no data should be sent to
221 the child.
Tim Peterse718f612004-10-12 21:51:32 +0000222
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000223 communicate() returns a tuple (stdout, stderr).
224
225 Note: The data read is buffered in memory, so do not use this
226 method if the data size is large or unlimited.
227
228The following attributes are also available:
229
230stdin
231 If the stdin argument is PIPE, this attribute is a file object
232 that provides input to the child process. Otherwise, it is None.
233
234stdout
235 If the stdout argument is PIPE, this attribute is a file object
236 that provides output from the child process. Otherwise, it is
237 None.
238
239stderr
240 If the stderr argument is PIPE, this attribute is file object that
241 provides error output from the child process. Otherwise, it is
242 None.
243
244pid
245 The process ID of the child process.
246
247returncode
248 The child return code. A None value indicates that the process
249 hasn't terminated yet. A negative value -N indicates that the
Gregory P. Smithf5604852010-12-13 06:45:02 +0000250 child was terminated by signal N (POSIX only).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000251
252
253Replacing older functions with the subprocess module
254====================================================
255In this section, "a ==> b" means that b can be used as a replacement
256for a.
257
258Note: All functions in this section fail (more or less) silently if
259the executed program cannot be found; this module raises an OSError
260exception.
261
262In the following examples, we assume that the subprocess module is
263imported with "from subprocess import *".
264
265
266Replacing /bin/sh shell backquote
267---------------------------------
268output=`mycmd myarg`
269==>
270output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
271
272
273Replacing shell pipe line
274-------------------------
275output=`dmesg | grep hda`
276==>
277p1 = Popen(["dmesg"], stdout=PIPE)
Peter Astrand6fdf3cb2004-11-30 18:06:42 +0000278p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000279output = p2.communicate()[0]
280
281
282Replacing os.system()
283---------------------
284sts = os.system("mycmd" + " myarg")
285==>
286p = Popen("mycmd" + " myarg", shell=True)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000287pid, sts = os.waitpid(p.pid, 0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000288
289Note:
290
291* Calling the program through the shell is usually not required.
292
293* It's easier to look at the returncode attribute than the
294 exitstatus.
295
296A more real-world example would look like this:
297
298try:
299 retcode = call("mycmd" + " myarg", shell=True)
300 if retcode < 0:
Guido van Rossumc2f93dc2007-05-24 00:50:02 +0000301 print("Child was terminated by signal", -retcode, file=sys.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000302 else:
Guido van Rossumc2f93dc2007-05-24 00:50:02 +0000303 print("Child returned", retcode, file=sys.stderr)
304except OSError as e:
305 print("Execution failed:", e, file=sys.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000306
307
308Replacing os.spawn*
309-------------------
Tim Peterse718f612004-10-12 21:51:32 +0000310P_NOWAIT example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000311
312pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")
313==>
314pid = Popen(["/bin/mycmd", "myarg"]).pid
315
316
317P_WAIT example:
318
319retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg")
320==>
321retcode = call(["/bin/mycmd", "myarg"])
322
323
Tim Peterse718f612004-10-12 21:51:32 +0000324Vector example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000325
326os.spawnvp(os.P_NOWAIT, path, args)
327==>
328Popen([path] + args[1:])
329
330
Tim Peterse718f612004-10-12 21:51:32 +0000331Environment example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000332
333os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env)
334==>
335Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000336"""
337
338import sys
339mswindows = (sys.platform == "win32")
340
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000341import io
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000342import os
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000343import traceback
Christian Heimesfdab48e2008-01-20 09:06:41 +0000344import gc
Christian Heimesa342c012008-04-20 21:01:16 +0000345import signal
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000346import builtins
Gregory P. Smithd23047b2010-12-04 09:10:44 +0000347import warnings
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000348
Peter Astrand454f7672005-01-01 09:36:35 +0000349# Exception classes used by this module.
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000350class CalledProcessError(Exception):
Georg Brandlf9734072008-12-07 15:30:06 +0000351 """This exception is raised when a process run by check_call() or
352 check_output() returns a non-zero exit status.
353 The exit status will be stored in the returncode attribute;
354 check_output() will also store the output in the output attribute.
355 """
356 def __init__(self, returncode, cmd, output=None):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000357 self.returncode = returncode
358 self.cmd = cmd
Georg Brandlf9734072008-12-07 15:30:06 +0000359 self.output = output
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000360 def __str__(self):
361 return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode)
362
Peter Astrand454f7672005-01-01 09:36:35 +0000363
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000364if mswindows:
365 import threading
366 import msvcrt
Brian Curtin1ce6b582010-04-24 16:19:22 +0000367 import _subprocess
368 class STARTUPINFO:
369 dwFlags = 0
370 hStdInput = None
371 hStdOutput = None
372 hStdError = None
373 wShowWindow = 0
374 class pywintypes:
375 error = IOError
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000376else:
377 import select
Gregory P. Smithd06fa472009-07-04 02:46:54 +0000378 _has_poll = hasattr(select, 'poll')
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000379 import errno
380 import fcntl
381 import pickle
382
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000383 try:
384 import _posixsubprocess
385 except ImportError:
386 _posixsubprocess = None
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000387 warnings.warn("The _posixsubprocess module is not being used. "
388 "Child process reliability may suffer if your "
389 "program uses threads.", RuntimeWarning)
390
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000391 # When select or poll has indicated that the file is writable,
392 # we can write up to _PIPE_BUF bytes without risk of blocking.
393 # POSIX defines PIPE_BUF as >= 512.
394 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
395
Antoine Pitrouc9c83ba2011-01-03 18:23:55 +0000396 _FD_CLOEXEC = getattr(fcntl, 'FD_CLOEXEC', 1)
397
398 def _set_cloexec(fd, cloexec):
399 old = fcntl.fcntl(fd, fcntl.F_GETFD)
400 if cloexec:
401 fcntl.fcntl(fd, fcntl.F_SETFD, old | _FD_CLOEXEC)
402 else:
403 fcntl.fcntl(fd, fcntl.F_SETFD, old & ~_FD_CLOEXEC)
404
Gregory P. Smith51ee2702010-12-13 07:59:39 +0000405 if _posixsubprocess:
406 _create_pipe = _posixsubprocess.cloexec_pipe
407 else:
408 def _create_pipe():
Gregory P. Smith51ee2702010-12-13 07:59:39 +0000409 fds = os.pipe()
Antoine Pitrouc9c83ba2011-01-03 18:23:55 +0000410 _set_cloexec(fds[0], True)
411 _set_cloexec(fds[1], True)
Gregory P. Smith51ee2702010-12-13 07:59:39 +0000412 return fds
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000413
Brett Cannona23810f2008-05-26 19:04:21 +0000414__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
Georg Brandlf9734072008-12-07 15:30:06 +0000415 "getoutput", "check_output", "CalledProcessError"]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000416
Brian Curtin1ce6b582010-04-24 16:19:22 +0000417if mswindows:
Brett Cannon84df1e62010-05-14 00:33:40 +0000418 from _subprocess import CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP
Brian Curtin1ce6b582010-04-24 16:19:22 +0000419 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP"])
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000420try:
421 MAXFD = os.sysconf("SC_OPEN_MAX")
422except:
423 MAXFD = 256
424
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000425_active = []
426
427def _cleanup():
428 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000429 res = inst._internal_poll(_deadstate=sys.maxsize)
Guido van Rossumb5d47ef2006-08-24 02:27:45 +0000430 if res is not None and res >= 0:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000431 try:
432 _active.remove(inst)
433 except ValueError:
434 # This can happen if two threads create a new Popen instance.
435 # It's harmless that it was already removed, so ignore.
436 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000437
438PIPE = -1
439STDOUT = -2
440
441
Gregory P. Smitha59c59f2010-03-01 00:17:40 +0000442def _eintr_retry_call(func, *args):
443 while True:
444 try:
445 return func(*args)
446 except OSError as e:
447 if e.errno == errno.EINTR:
448 continue
449 raise
450
451
Peter Astrand5f5e1412004-12-05 20:15:36 +0000452def call(*popenargs, **kwargs):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000453 """Run command with arguments. Wait for command to complete, then
454 return the returncode attribute.
455
456 The arguments are the same as for the Popen constructor. Example:
457
458 retcode = call(["ls", "-l"])
459 """
Peter Astrand5f5e1412004-12-05 20:15:36 +0000460 return Popen(*popenargs, **kwargs).wait()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000461
462
Peter Astrand454f7672005-01-01 09:36:35 +0000463def check_call(*popenargs, **kwargs):
464 """Run command with arguments. Wait for command to complete. If
465 the exit code was zero then return, otherwise raise
466 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000467 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000468
469 The arguments are the same as for the Popen constructor. Example:
470
471 check_call(["ls", "-l"])
472 """
473 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000474 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000475 cmd = kwargs.get("args")
476 if cmd is None:
477 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000478 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000479 return 0
480
481
482def check_output(*popenargs, **kwargs):
Georg Brandl2708f3a2009-12-20 14:38:23 +0000483 r"""Run command with arguments and return its output as a byte string.
Georg Brandlf9734072008-12-07 15:30:06 +0000484
485 If the exit code was non-zero it raises a CalledProcessError. The
486 CalledProcessError object will have the return code in the returncode
487 attribute and output in the output attribute.
488
489 The arguments are the same as for the Popen constructor. Example:
490
491 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000492 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000493
494 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000495 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000496
497 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000498 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000499 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000500 b'ls: non_existent_file: No such file or directory\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000501 """
502 if 'stdout' in kwargs:
503 raise ValueError('stdout argument not allowed, it will be overridden.')
504 process = Popen(*popenargs, stdout=PIPE, **kwargs)
505 output, unused_err = process.communicate()
506 retcode = process.poll()
507 if retcode:
508 cmd = kwargs.get("args")
509 if cmd is None:
510 cmd = popenargs[0]
511 raise CalledProcessError(retcode, cmd, output=output)
512 return output
Peter Astrand454f7672005-01-01 09:36:35 +0000513
514
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000515def list2cmdline(seq):
516 """
517 Translate a sequence of arguments into a command line
518 string, using the same rules as the MS C runtime:
519
520 1) Arguments are delimited by white space, which is either a
521 space or a tab.
522
523 2) A string surrounded by double quotation marks is
524 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000525 contained within. A quoted string can be embedded in an
526 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000527
528 3) A double quotation mark preceded by a backslash is
529 interpreted as a literal double quotation mark.
530
531 4) Backslashes are interpreted literally, unless they
532 immediately precede a double quotation mark.
533
534 5) If backslashes immediately precede a double quotation mark,
535 every pair of backslashes is interpreted as a literal
536 backslash. If the number of backslashes is odd, the last
537 backslash escapes the next double quotation mark as
538 described in rule 3.
539 """
540
541 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000542 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
543 # or search http://msdn.microsoft.com for
544 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000545 result = []
546 needquote = False
547 for arg in seq:
548 bs_buf = []
549
550 # Add a space to separate this argument from the others
551 if result:
552 result.append(' ')
553
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000554 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000555 if needquote:
556 result.append('"')
557
558 for c in arg:
559 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000560 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000561 bs_buf.append(c)
562 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000563 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000564 result.append('\\' * len(bs_buf)*2)
565 bs_buf = []
566 result.append('\\"')
567 else:
568 # Normal char
569 if bs_buf:
570 result.extend(bs_buf)
571 bs_buf = []
572 result.append(c)
573
Christian Heimesfdab48e2008-01-20 09:06:41 +0000574 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000575 if bs_buf:
576 result.extend(bs_buf)
577
578 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000579 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000580 result.append('"')
581
582 return ''.join(result)
583
584
Brett Cannona23810f2008-05-26 19:04:21 +0000585# Various tools for executing commands and looking at their output and status.
586#
Gregory P. Smithf5604852010-12-13 06:45:02 +0000587# NB This only works (and is only relevant) for POSIX.
Brett Cannona23810f2008-05-26 19:04:21 +0000588
589def getstatusoutput(cmd):
590 """Return (status, output) of executing cmd in a shell.
591
592 Execute the string 'cmd' in a shell with os.popen() and return a 2-tuple
593 (status, output). cmd is actually run as '{ cmd ; } 2>&1', so that the
594 returned output will contain output or error messages. A trailing newline
595 is stripped from the output. The exit status for the command can be
596 interpreted according to the rules for the C function wait(). Example:
597
598 >>> import subprocess
599 >>> subprocess.getstatusoutput('ls /bin/ls')
600 (0, '/bin/ls')
601 >>> subprocess.getstatusoutput('cat /bin/junk')
602 (256, 'cat: /bin/junk: No such file or directory')
603 >>> subprocess.getstatusoutput('/bin/junk')
604 (256, 'sh: /bin/junk: not found')
605 """
606 pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r')
607 text = pipe.read()
608 sts = pipe.close()
609 if sts is None: sts = 0
610 if text[-1:] == '\n': text = text[:-1]
611 return sts, text
612
613
614def getoutput(cmd):
615 """Return output (stdout or stderr) of executing cmd in a shell.
616
617 Like getstatusoutput(), except the exit status is ignored and the return
618 value is a string containing the command's output. Example:
619
620 >>> import subprocess
621 >>> subprocess.getoutput('ls /bin/ls')
622 '/bin/ls'
623 """
624 return getstatusoutput(cmd)[1]
625
626
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000627_PLATFORM_DEFAULT_CLOSE_FDS = object()
Gregory P. Smithf5604852010-12-13 06:45:02 +0000628
629
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000630class Popen(object):
631 def __init__(self, args, bufsize=0, executable=None,
632 stdin=None, stdout=None, stderr=None,
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000633 preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,
634 shell=False, cwd=None, env=None, universal_newlines=False,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000635 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000636 restore_signals=True, start_new_session=False,
637 pass_fds=()):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000638 """Create new Popen instance."""
639 _cleanup()
640
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000641 self._child_created = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000642 if bufsize is None:
643 bufsize = 0 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000644 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000645 raise TypeError("bufsize must be an integer")
646
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000647 if mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000648 if preexec_fn is not None:
649 raise ValueError("preexec_fn is not supported on Windows "
650 "platforms")
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000651 any_stdio_set = (stdin is not None or stdout is not None or
652 stderr is not None)
653 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
654 if any_stdio_set:
655 close_fds = False
656 else:
657 close_fds = True
658 elif close_fds and any_stdio_set:
659 raise ValueError(
660 "close_fds is not supported on Windows platforms"
661 " if you redirect stdin/stdout/stderr")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000662 else:
663 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000664 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
665 close_fds = True
666 if pass_fds and not close_fds:
667 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
668 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000669 if startupinfo is not None:
670 raise ValueError("startupinfo is only supported on Windows "
671 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000672 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000673 raise ValueError("creationflags is only supported on Windows "
674 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000675
Tim Peterse718f612004-10-12 21:51:32 +0000676 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000677 self.stdout = None
678 self.stderr = None
679 self.pid = None
680 self.returncode = None
681 self.universal_newlines = universal_newlines
682
683 # Input and output objects. The general principle is like
684 # this:
685 #
686 # Parent Child
687 # ------ -----
688 # p2cwrite ---stdin---> p2cread
689 # c2pread <--stdout--- c2pwrite
690 # errread <--stderr--- errwrite
691 #
692 # On POSIX, the child objects are file descriptors. On
693 # Windows, these are Windows file handles. The parent objects
694 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000695 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000696 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000697
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000698 (p2cread, p2cwrite,
699 c2pread, c2pwrite,
700 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
701
Antoine Pitrouc9982322011-01-04 19:07:07 +0000702 # We wrap OS handles *before* launching the child, otherwise a
703 # quickly terminating child could make our fds unwrappable
704 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000705
Thomas Wouterscf297e42007-02-23 15:07:44 +0000706 if mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000707 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000708 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000709 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000710 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000711 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000712 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000713
Guido van Rossumc2f93dc2007-05-24 00:50:02 +0000714 if bufsize == 0:
715 bufsize = 1 # Nearly unbuffered (XXX for now)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000716 if p2cwrite != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000717 self.stdin = io.open(p2cwrite, 'wb', bufsize)
718 if self.universal_newlines:
719 self.stdin = io.TextIOWrapper(self.stdin)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000720 if c2pread != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000721 self.stdout = io.open(c2pread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000722 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000723 self.stdout = io.TextIOWrapper(self.stdout)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000724 if errread != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000725 self.stderr = io.open(errread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000726 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000727 self.stderr = io.TextIOWrapper(self.stderr)
Tim Peterse718f612004-10-12 21:51:32 +0000728
Antoine Pitrouc9982322011-01-04 19:07:07 +0000729 try:
730 self._execute_child(args, executable, preexec_fn, close_fds,
731 pass_fds, cwd, env, universal_newlines,
732 startupinfo, creationflags, shell,
733 p2cread, p2cwrite,
734 c2pread, c2pwrite,
735 errread, errwrite,
736 restore_signals, start_new_session)
737 except:
738 # Cleanup if the child failed starting
739 for f in filter(None, [self.stdin, self.stdout, self.stderr]):
740 try:
741 f.close()
742 except EnvironmentError:
743 # Ignore EBADF or other errors
744 pass
745 raise
746
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000747
Guido van Rossum98297ee2007-11-06 21:34:58 +0000748 def _translate_newlines(self, data, encoding):
749 data = data.replace(b"\r\n", b"\n").replace(b"\r", b"\n")
750 return data.decode(encoding)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000751
Brian Curtin79cdb662010-12-03 02:46:02 +0000752 def __enter__(self):
753 return self
754
755 def __exit__(self, type, value, traceback):
756 if self.stdout:
757 self.stdout.close()
758 if self.stderr:
759 self.stderr.close()
760 if self.stdin:
761 self.stdin.close()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000762
Brett Cannon84df1e62010-05-14 00:33:40 +0000763 def __del__(self, _maxsize=sys.maxsize, _active=_active):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000764 if not self._child_created:
765 # We didn't get to successfully create a child process.
766 return
767 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000768 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000769 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000770 # Child is still running, keep us alive until we can wait on it.
771 _active.append(self)
772
773
Peter Astrand23109f02005-03-03 20:28:59 +0000774 def communicate(self, input=None):
775 """Interact with process: Send data to stdin. Read data from
776 stdout and stderr, until end-of-file is reached. Wait for
777 process to terminate. The optional input argument should be a
778 string to be sent to the child process, or None, if no data
779 should be sent to the child.
Tim Peterseba28be2005-03-28 01:08:02 +0000780
Peter Astrand23109f02005-03-03 20:28:59 +0000781 communicate() returns a tuple (stdout, stderr)."""
782
783 # Optimization: If we are only using one pipe, or no pipe at
784 # all, using select() or threads is unnecessary.
785 if [self.stdin, self.stdout, self.stderr].count(None) >= 2:
Tim Peterseba28be2005-03-28 01:08:02 +0000786 stdout = None
787 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000788 if self.stdin:
789 if input:
790 self.stdin.write(input)
791 self.stdin.close()
792 elif self.stdout:
793 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000794 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000795 elif self.stderr:
796 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000797 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000798 self.wait()
799 return (stdout, stderr)
Tim Peterseba28be2005-03-28 01:08:02 +0000800
Peter Astrand23109f02005-03-03 20:28:59 +0000801 return self._communicate(input)
802
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000803
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000804 def poll(self):
805 return self._internal_poll()
806
807
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000808 if mswindows:
809 #
810 # Windows methods
811 #
812 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +0000813 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000814 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
815 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000816 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000817 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +0000818
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000819 p2cread, p2cwrite = -1, -1
820 c2pread, c2pwrite = -1, -1
821 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000822
Peter Astrandd38ddf42005-02-10 08:32:50 +0000823 if stdin is None:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000824 p2cread = _subprocess.GetStdHandle(_subprocess.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000825 if p2cread is None:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000826 p2cread, _ = _subprocess.CreatePipe(None, 0)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000827 elif stdin == PIPE:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000828 p2cread, p2cwrite = _subprocess.CreatePipe(None, 0)
Peter Astrandd38ddf42005-02-10 08:32:50 +0000829 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000830 p2cread = msvcrt.get_osfhandle(stdin)
831 else:
832 # Assuming file-like object
833 p2cread = msvcrt.get_osfhandle(stdin.fileno())
834 p2cread = self._make_inheritable(p2cread)
835
Peter Astrandd38ddf42005-02-10 08:32:50 +0000836 if stdout is None:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000837 c2pwrite = _subprocess.GetStdHandle(_subprocess.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000838 if c2pwrite is None:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000839 _, c2pwrite = _subprocess.CreatePipe(None, 0)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000840 elif stdout == PIPE:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000841 c2pread, c2pwrite = _subprocess.CreatePipe(None, 0)
Peter Astrandd38ddf42005-02-10 08:32:50 +0000842 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000843 c2pwrite = msvcrt.get_osfhandle(stdout)
844 else:
845 # Assuming file-like object
846 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
847 c2pwrite = self._make_inheritable(c2pwrite)
848
Peter Astrandd38ddf42005-02-10 08:32:50 +0000849 if stderr is None:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000850 errwrite = _subprocess.GetStdHandle(_subprocess.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000851 if errwrite is None:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000852 _, errwrite = _subprocess.CreatePipe(None, 0)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000853 elif stderr == PIPE:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000854 errread, errwrite = _subprocess.CreatePipe(None, 0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000855 elif stderr == STDOUT:
856 errwrite = c2pwrite
Peter Astrandd38ddf42005-02-10 08:32:50 +0000857 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000858 errwrite = msvcrt.get_osfhandle(stderr)
859 else:
860 # Assuming file-like object
861 errwrite = msvcrt.get_osfhandle(stderr.fileno())
862 errwrite = self._make_inheritable(errwrite)
863
864 return (p2cread, p2cwrite,
865 c2pread, c2pwrite,
866 errread, errwrite)
867
868
869 def _make_inheritable(self, handle):
870 """Return a duplicate of handle, which is inheritable"""
Brian Curtin1ce6b582010-04-24 16:19:22 +0000871 return _subprocess.DuplicateHandle(_subprocess.GetCurrentProcess(),
872 handle, _subprocess.GetCurrentProcess(), 0, 1,
873 _subprocess.DUPLICATE_SAME_ACCESS)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000874
875
876 def _find_w9xpopen(self):
877 """Find and return absolut path to w9xpopen.exe"""
Brian Curtin1ce6b582010-04-24 16:19:22 +0000878 w9xpopen = os.path.join(
879 os.path.dirname(_subprocess.GetModuleFileName(0)),
Tim Peterse8374a52004-10-13 03:15:00 +0000880 "w9xpopen.exe")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000881 if not os.path.exists(w9xpopen):
882 # Eeek - file-not-found - possibly an embedding
883 # situation - see if we can locate it in sys.exec_prefix
Tim Peterse8374a52004-10-13 03:15:00 +0000884 w9xpopen = os.path.join(os.path.dirname(sys.exec_prefix),
885 "w9xpopen.exe")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000886 if not os.path.exists(w9xpopen):
Tim Peterse8374a52004-10-13 03:15:00 +0000887 raise RuntimeError("Cannot locate w9xpopen.exe, which is "
888 "needed for Popen to work with your "
889 "shell or platform.")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000890 return w9xpopen
891
Tim Peterse718f612004-10-12 21:51:32 +0000892
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000893 def _execute_child(self, args, executable, preexec_fn, close_fds,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000894 pass_fds, cwd, env, universal_newlines,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000895 startupinfo, creationflags, shell,
896 p2cread, p2cwrite,
897 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000898 errread, errwrite,
899 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000900 """Execute program (MS Windows version)"""
901
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000902 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000903
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000904 if not isinstance(args, str):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000905 args = list2cmdline(args)
906
Peter Astrandc1d65362004-11-07 14:30:34 +0000907 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +0000908 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000909 startupinfo = STARTUPINFO()
Victor Stinnerb3693582010-05-21 20:13:12 +0000910 if -1 not in (p2cread, c2pwrite, errwrite):
Brian Curtin1ce6b582010-04-24 16:19:22 +0000911 startupinfo.dwFlags |= _subprocess.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +0000912 startupinfo.hStdInput = p2cread
913 startupinfo.hStdOutput = c2pwrite
914 startupinfo.hStdError = errwrite
915
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000916 if shell:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000917 startupinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOW
918 startupinfo.wShowWindow = _subprocess.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000919 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +0000920 args = '{} /c "{}"'.format (comspec, args)
Brian Curtin1ce6b582010-04-24 16:19:22 +0000921 if (_subprocess.GetVersion() >= 0x80000000 or
Tim Peterse8374a52004-10-13 03:15:00 +0000922 os.path.basename(comspec).lower() == "command.com"):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000923 # Win9x, or using command.com on NT. We need to
924 # use the w9xpopen intermediate program. For more
925 # information, see KB Q150956
926 # (http://web.archive.org/web/20011105084002/http://support.microsoft.com/support/kb/articles/Q150/9/56.asp)
927 w9xpopen = self._find_w9xpopen()
928 args = '"%s" %s' % (w9xpopen, args)
929 # Not passing CREATE_NEW_CONSOLE has been known to
930 # cause random failures on win9x. Specifically a
931 # dialog: "Your program accessed mem currently in
932 # use at xxx" and a hopeful warning about the
Mark Dickinson934896d2009-02-21 20:59:32 +0000933 # stability of your system. Cost is Ctrl+C won't
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000934 # kill children.
Brian Curtin1ce6b582010-04-24 16:19:22 +0000935 creationflags |= _subprocess.CREATE_NEW_CONSOLE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000936
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000937 # Start the process
938 try:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000939 hp, ht, pid, tid = _subprocess.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +0000940 # no special security
941 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +0000942 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +0000943 creationflags,
944 env,
945 cwd,
946 startupinfo)
Guido van Rossumb940e112007-01-10 16:19:56 +0000947 except pywintypes.error as e:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000948 # Translate pywintypes.error to WindowsError, which is
949 # a subclass of OSError. FIXME: We should really
950 # translate errno using _sys_errlist (or simliar), but
951 # how can this be done from Python?
952 raise WindowsError(*e.args)
Tim Goldenad537f22010-08-08 11:18:16 +0000953 finally:
954 # Child is launched. Close the parent's copy of those pipe
955 # handles that only the child should have open. You need
956 # to make sure that no handles to the write end of the
957 # output pipe are maintained in this process or else the
958 # pipe will not close when the child process exits and the
959 # ReadFile will hang.
960 if p2cread != -1:
961 p2cread.Close()
962 if c2pwrite != -1:
963 c2pwrite.Close()
964 if errwrite != -1:
965 errwrite.Close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000966
967 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000968 self._child_created = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000969 self._handle = hp
970 self.pid = pid
971 ht.Close()
972
Brett Cannon84df1e62010-05-14 00:33:40 +0000973 def _internal_poll(self, _deadstate=None,
Victor Stinnerc807a612010-05-14 21:53:45 +0000974 _WaitForSingleObject=_subprocess.WaitForSingleObject,
975 _WAIT_OBJECT_0=_subprocess.WAIT_OBJECT_0,
976 _GetExitCodeProcess=_subprocess.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000977 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +0000978 attribute.
979
980 This method is called by __del__, so it can only refer to objects
981 in its local scope.
982
983 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000984 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +0000985 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
986 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000987 return self.returncode
988
989
990 def wait(self):
991 """Wait for child process to terminate. Returns returncode
992 attribute."""
Peter Astrandd38ddf42005-02-10 08:32:50 +0000993 if self.returncode is None:
Brian Curtin1ce6b582010-04-24 16:19:22 +0000994 _subprocess.WaitForSingleObject(self._handle,
995 _subprocess.INFINITE)
996 self.returncode = _subprocess.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000997 return self.returncode
998
999
1000 def _readerthread(self, fh, buffer):
1001 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001002 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001003
1004
Peter Astrand23109f02005-03-03 20:28:59 +00001005 def _communicate(self, input):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001006 stdout = None # Return
1007 stderr = None # Return
1008
1009 if self.stdout:
1010 stdout = []
Tim Peterse8374a52004-10-13 03:15:00 +00001011 stdout_thread = threading.Thread(target=self._readerthread,
1012 args=(self.stdout, stdout))
Benjamin Peterson632e0362008-08-18 19:08:51 +00001013 stdout_thread.daemon = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001014 stdout_thread.start()
1015 if self.stderr:
1016 stderr = []
Tim Peterse8374a52004-10-13 03:15:00 +00001017 stderr_thread = threading.Thread(target=self._readerthread,
1018 args=(self.stderr, stderr))
Benjamin Peterson632e0362008-08-18 19:08:51 +00001019 stderr_thread.daemon = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001020 stderr_thread.start()
1021
1022 if self.stdin:
Peter Astrandd38ddf42005-02-10 08:32:50 +00001023 if input is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001024 self.stdin.write(input)
1025 self.stdin.close()
1026
1027 if self.stdout:
1028 stdout_thread.join()
1029 if self.stderr:
1030 stderr_thread.join()
1031
1032 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001033 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001034 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001035 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001036 stderr = stderr[0]
1037
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001038 self.wait()
1039 return (stdout, stderr)
1040
Christian Heimesa342c012008-04-20 21:01:16 +00001041 def send_signal(self, sig):
1042 """Send a signal to the process
1043 """
1044 if sig == signal.SIGTERM:
1045 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001046 elif sig == signal.CTRL_C_EVENT:
1047 os.kill(self.pid, signal.CTRL_C_EVENT)
1048 elif sig == signal.CTRL_BREAK_EVENT:
1049 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001050 else:
Brian Curtin19651362010-09-07 13:24:38 +00001051 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001052
1053 def terminate(self):
1054 """Terminates the process
1055 """
Brian Curtin1ce6b582010-04-24 16:19:22 +00001056 _subprocess.TerminateProcess(self._handle, 1)
Christian Heimesa342c012008-04-20 21:01:16 +00001057
1058 kill = terminate
1059
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001060 else:
1061 #
1062 # POSIX methods
1063 #
1064 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001065 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001066 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1067 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001068 p2cread, p2cwrite = -1, -1
1069 c2pread, c2pwrite = -1, -1
1070 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001071
Peter Astrandd38ddf42005-02-10 08:32:50 +00001072 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001073 pass
1074 elif stdin == PIPE:
Gregory P. Smith51ee2702010-12-13 07:59:39 +00001075 p2cread, p2cwrite = _create_pipe()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001076 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001077 p2cread = stdin
1078 else:
1079 # Assuming file-like object
1080 p2cread = stdin.fileno()
1081
Peter Astrandd38ddf42005-02-10 08:32:50 +00001082 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001083 pass
1084 elif stdout == PIPE:
Gregory P. Smith51ee2702010-12-13 07:59:39 +00001085 c2pread, c2pwrite = _create_pipe()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001086 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001087 c2pwrite = stdout
1088 else:
1089 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001090 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001091
Peter Astrandd38ddf42005-02-10 08:32:50 +00001092 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001093 pass
1094 elif stderr == PIPE:
Gregory P. Smith51ee2702010-12-13 07:59:39 +00001095 errread, errwrite = _create_pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001096 elif stderr == STDOUT:
1097 errwrite = c2pwrite
Peter Astrandd38ddf42005-02-10 08:32:50 +00001098 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001099 errwrite = stderr
1100 else:
1101 # Assuming file-like object
1102 errwrite = stderr.fileno()
1103
1104 return (p2cread, p2cwrite,
1105 c2pread, c2pwrite,
1106 errread, errwrite)
1107
1108
Antoine Pitrou47f14ba2011-01-03 23:42:01 +00001109 def _close_fds(self, fds_to_keep):
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001110 start_fd = 3
Antoine Pitrou47f14ba2011-01-03 23:42:01 +00001111 for fd in sorted(fds_to_keep):
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001112 if fd >= start_fd:
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001113 os.closerange(start_fd, fd)
1114 start_fd = fd + 1
1115 if start_fd <= MAXFD:
1116 os.closerange(start_fd, MAXFD)
1117
1118
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001119 def _execute_child(self, args, executable, preexec_fn, close_fds,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001120 pass_fds, cwd, env, universal_newlines,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001121 startupinfo, creationflags, shell,
1122 p2cread, p2cwrite,
1123 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001124 errread, errwrite,
1125 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001126 """Execute program (POSIX version)"""
1127
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001128 if isinstance(args, str):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001129 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001130 else:
1131 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001132
1133 if shell:
1134 args = ["/bin/sh", "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001135 if executable:
1136 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001137
Peter Astrandd38ddf42005-02-10 08:32:50 +00001138 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001139 executable = args[0]
1140
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001141 # For transferring possible exec failure from child to parent.
1142 # Data format: "exception name:hex errno:description"
1143 # Pickle is not used; it is complex and involves memory allocation.
Gregory P. Smith51ee2702010-12-13 07:59:39 +00001144 errpipe_read, errpipe_write = _create_pipe()
Christian Heimesfdab48e2008-01-20 09:06:41 +00001145 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001146 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001147
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001148 if _posixsubprocess:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001149 # We must avoid complex work that could involve
1150 # malloc or free in the child process to avoid
1151 # potential deadlocks, thus we do all this here.
1152 # and pass it to fork_exec()
1153
1154 if env:
Victor Stinner449c4662010-05-08 11:10:09 +00001155 env_list = [os.fsencode(k) + b'=' + os.fsencode(v)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001156 for k, v in env.items()]
1157 else:
1158 env_list = None # Use execv instead of execve.
Victor Stinnerb745a742010-05-18 17:17:23 +00001159 executable = os.fsencode(executable)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001160 if os.path.dirname(executable):
Victor Stinnerb745a742010-05-18 17:17:23 +00001161 executable_list = (executable,)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001162 else:
1163 # This matches the behavior of os._execvpe().
Victor Stinnerb745a742010-05-18 17:17:23 +00001164 executable_list = tuple(
1165 os.path.join(os.fsencode(dir), executable)
1166 for dir in os.get_exec_path(env))
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001167 fds_to_keep = set(pass_fds)
1168 fds_to_keep.add(errpipe_write)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001169 self.pid = _posixsubprocess.fork_exec(
1170 args, executable_list,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001171 close_fds, sorted(fds_to_keep), cwd, env_list,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001172 p2cread, p2cwrite, c2pread, c2pwrite,
1173 errread, errwrite,
1174 errpipe_read, errpipe_write,
1175 restore_signals, start_new_session, preexec_fn)
1176 else:
1177 # Pure Python implementation: It is not thread safe.
1178 # This implementation may deadlock in the child if your
1179 # parent process has any other threads running.
1180
1181 gc_was_enabled = gc.isenabled()
1182 # Disable gc to avoid bug where gc -> file_dealloc ->
1183 # write to stderr -> hang. See issue1336
1184 gc.disable()
1185 try:
1186 self.pid = os.fork()
1187 except:
1188 if gc_was_enabled:
1189 gc.enable()
1190 raise
1191 self._child_created = True
1192 if self.pid == 0:
1193 # Child
1194 try:
1195 # Close parent's pipe ends
1196 if p2cwrite != -1:
1197 os.close(p2cwrite)
1198 if c2pread != -1:
1199 os.close(c2pread)
1200 if errread != -1:
1201 os.close(errread)
1202 os.close(errpipe_read)
1203
1204 # Dup fds for child
Antoine Pitrouc9c83ba2011-01-03 18:23:55 +00001205 def _dup2(a, b):
1206 # dup2() removes the CLOEXEC flag but
1207 # we must do it ourselves if dup2()
1208 # would be a no-op (issue #10806).
1209 if a == b:
1210 _set_cloexec(a, False)
1211 elif a != -1:
1212 os.dup2(a, b)
1213 _dup2(p2cread, 0)
1214 _dup2(c2pwrite, 1)
1215 _dup2(errwrite, 2)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001216
1217 # Close pipe fds. Make sure we don't close the
1218 # same fd more than once, or standard fds.
Antoine Pitrouc9c83ba2011-01-03 18:23:55 +00001219 closed = set()
1220 for fd in [p2cread, c2pwrite, errwrite]:
1221 if fd > 2 and fd not in closed:
1222 os.close(fd)
1223 closed.add(fd)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001224
1225 # Close all other fds, if asked for
1226 if close_fds:
Antoine Pitrou47f14ba2011-01-03 23:42:01 +00001227 fds_to_keep = set(pass_fds)
1228 fds_to_keep.add(errpipe_write)
1229 self._close_fds(fds_to_keep)
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001230
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001231
1232 if cwd is not None:
1233 os.chdir(cwd)
1234
1235 # This is a copy of Python/pythonrun.c
1236 # _Py_RestoreSignals(). If that were exposed
1237 # as a sys._py_restoresignals func it would be
1238 # better.. but this pure python implementation
1239 # isn't likely to be used much anymore.
1240 if restore_signals:
1241 signals = ('SIGPIPE', 'SIGXFZ', 'SIGXFSZ')
1242 for sig in signals:
1243 if hasattr(signal, sig):
1244 signal.signal(getattr(signal, sig),
1245 signal.SIG_DFL)
1246
1247 if start_new_session and hasattr(os, 'setsid'):
1248 os.setsid()
1249
1250 if preexec_fn:
1251 preexec_fn()
1252
1253 if env is None:
1254 os.execvp(executable, args)
1255 else:
1256 os.execvpe(executable, args, env)
1257
1258 except:
1259 try:
1260 exc_type, exc_value = sys.exc_info()[:2]
1261 if isinstance(exc_value, OSError):
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001262 errno_num = exc_value.errno
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001263 else:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001264 errno_num = 0
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001265 message = '%s:%x:%s' % (exc_type.__name__,
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001266 errno_num, exc_value)
Victor Stinner4d078042010-04-23 19:28:32 +00001267 message = message.encode(errors="surrogatepass")
1268 os.write(errpipe_write, message)
1269 except Exception:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001270 # We MUST not allow anything odd happening
1271 # above to prevent us from exiting below.
1272 pass
1273
1274 # This exitcode won't be reported to applications
1275 # so it really doesn't matter what we return.
1276 os._exit(255)
1277
1278 # Parent
Facundo Batista10706e22009-06-19 20:34:30 +00001279 if gc_was_enabled:
1280 gc.enable()
Facundo Batista10706e22009-06-19 20:34:30 +00001281 finally:
1282 # be sure the FD is closed no matter what
1283 os.close(errpipe_write)
1284
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001285 if p2cread != -1 and p2cwrite != -1:
Facundo Batista10706e22009-06-19 20:34:30 +00001286 os.close(p2cread)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001287 if c2pwrite != -1 and c2pread != -1:
Facundo Batista10706e22009-06-19 20:34:30 +00001288 os.close(c2pwrite)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001289 if errwrite != -1 and errread != -1:
Facundo Batista10706e22009-06-19 20:34:30 +00001290 os.close(errwrite)
1291
1292 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001293 # exception (limited in size)
1294 data = bytearray()
1295 while True:
1296 part = _eintr_retry_call(os.read, errpipe_read, 50000)
1297 data += part
1298 if not part or len(data) > 50000:
1299 break
Facundo Batista10706e22009-06-19 20:34:30 +00001300 finally:
1301 # be sure the FD is closed no matter what
1302 os.close(errpipe_read)
1303
Guido van Rossumaf2362a2007-05-15 22:32:02 +00001304 if data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001305 try:
1306 _eintr_retry_call(os.waitpid, self.pid, 0)
1307 except OSError as e:
1308 if e.errno != errno.ECHILD:
1309 raise
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001310 try:
1311 exception_name, hex_errno, err_msg = data.split(b':', 2)
1312 except ValueError:
1313 print('Bad exception data:', repr(data))
1314 exception_name = b'RuntimeError'
1315 hex_errno = b'0'
1316 err_msg = b'Unknown'
1317 child_exception_type = getattr(
1318 builtins, exception_name.decode('ascii'),
1319 RuntimeError)
Benjamin Petersond75fcb42009-02-19 04:22:03 +00001320 for fd in (p2cwrite, c2pread, errread):
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001321 if fd != -1:
Benjamin Petersond75fcb42009-02-19 04:22:03 +00001322 os.close(fd)
Victor Stinner4d078042010-04-23 19:28:32 +00001323 err_msg = err_msg.decode(errors="surrogatepass")
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001324 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001325 errno_num = int(hex_errno, 16)
1326 if errno_num != 0:
1327 err_msg = os.strerror(errno_num)
1328 if errno_num == errno.ENOENT:
Benjamin Peterson5f780402010-11-20 18:07:52 +00001329 err_msg += ': ' + repr(args[0])
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001330 raise child_exception_type(errno_num, err_msg)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001331 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001332
1333
Brett Cannon84df1e62010-05-14 00:33:40 +00001334 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1335 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
1336 _WEXITSTATUS=os.WEXITSTATUS):
1337 # This method is called (indirectly) by __del__, so it cannot
1338 # refer to anything outside of its local scope."""
1339 if _WIFSIGNALED(sts):
1340 self.returncode = -_WTERMSIG(sts)
1341 elif _WIFEXITED(sts):
1342 self.returncode = _WEXITSTATUS(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001343 else:
1344 # Should never happen
1345 raise RuntimeError("Unknown child exit status!")
1346
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001347
Brett Cannon84df1e62010-05-14 00:33:40 +00001348 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
1349 _WNOHANG=os.WNOHANG, _os_error=os.error):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001350 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001351 attribute.
1352
1353 This method is called by __del__, so it cannot reference anything
1354 outside of the local scope (nor can any methods it calls).
1355
1356 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001357 if self.returncode is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001358 try:
Brett Cannon84df1e62010-05-14 00:33:40 +00001359 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001360 if pid == self.pid:
1361 self._handle_exitstatus(sts)
Brett Cannon84df1e62010-05-14 00:33:40 +00001362 except _os_error:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001363 if _deadstate is not None:
1364 self.returncode = _deadstate
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001365 return self.returncode
1366
1367
1368 def wait(self):
1369 """Wait for child process to terminate. Returns returncode
1370 attribute."""
Peter Astrandd38ddf42005-02-10 08:32:50 +00001371 if self.returncode is None:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001372 try:
1373 pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0)
1374 except OSError as e:
1375 if e.errno != errno.ECHILD:
1376 raise
1377 # This happens if SIGCLD is set to be ignored or waiting
1378 # for child processes has otherwise been disabled for our
1379 # process. This child is dead, we can't get the status.
1380 sts = 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001381 self._handle_exitstatus(sts)
1382 return self.returncode
1383
1384
Peter Astrand23109f02005-03-03 20:28:59 +00001385 def _communicate(self, input):
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001386 if self.stdin:
1387 # Flush stdio buffer. This might block, if the user has
1388 # been writing to .stdin in an uncontrolled fashion.
1389 self.stdin.flush()
1390 if not input:
1391 self.stdin.close()
1392
1393 if _has_poll:
1394 stdout, stderr = self._communicate_with_poll(input)
1395 else:
1396 stdout, stderr = self._communicate_with_select(input)
1397
1398 # All data exchanged. Translate lists into strings.
1399 if stdout is not None:
1400 stdout = b''.join(stdout)
1401 if stderr is not None:
1402 stderr = b''.join(stderr)
1403
1404 # Translate newlines, if requested.
1405 # This also turns bytes into strings.
1406 if self.universal_newlines:
1407 if stdout is not None:
1408 stdout = self._translate_newlines(stdout,
1409 self.stdout.encoding)
1410 if stderr is not None:
1411 stderr = self._translate_newlines(stderr,
1412 self.stderr.encoding)
1413
1414 self.wait()
1415 return (stdout, stderr)
1416
1417
1418 def _communicate_with_poll(self, input):
1419 stdout = None # Return
1420 stderr = None # Return
1421 fd2file = {}
1422 fd2output = {}
1423
1424 poller = select.poll()
1425 def register_and_append(file_obj, eventmask):
1426 poller.register(file_obj.fileno(), eventmask)
1427 fd2file[file_obj.fileno()] = file_obj
1428
1429 def close_unregister_and_remove(fd):
1430 poller.unregister(fd)
1431 fd2file[fd].close()
1432 fd2file.pop(fd)
1433
1434 if self.stdin and input:
1435 register_and_append(self.stdin, select.POLLOUT)
1436
1437 select_POLLIN_POLLPRI = select.POLLIN | select.POLLPRI
1438 if self.stdout:
1439 register_and_append(self.stdout, select_POLLIN_POLLPRI)
1440 fd2output[self.stdout.fileno()] = stdout = []
1441 if self.stderr:
1442 register_and_append(self.stderr, select_POLLIN_POLLPRI)
1443 fd2output[self.stderr.fileno()] = stderr = []
1444
1445 input_offset = 0
1446 while fd2file:
1447 try:
1448 ready = poller.poll()
1449 except select.error as e:
1450 if e.args[0] == errno.EINTR:
1451 continue
1452 raise
1453
1454 # XXX Rewrite these to use non-blocking I/O on the
1455 # file objects; they are no longer using C stdio!
1456
1457 for fd, mode in ready:
1458 if mode & select.POLLOUT:
1459 chunk = input[input_offset : input_offset + _PIPE_BUF]
1460 input_offset += os.write(fd, chunk)
1461 if input_offset >= len(input):
1462 close_unregister_and_remove(fd)
1463 elif mode & select_POLLIN_POLLPRI:
1464 data = os.read(fd, 4096)
1465 if not data:
1466 close_unregister_and_remove(fd)
1467 fd2output[fd].append(data)
1468 else:
1469 # Ignore hang up or errors.
1470 close_unregister_and_remove(fd)
1471
1472 return (stdout, stderr)
1473
1474
1475 def _communicate_with_select(self, input):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001476 read_set = []
1477 write_set = []
1478 stdout = None # Return
1479 stderr = None # Return
1480
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001481 if self.stdin and input:
1482 write_set.append(self.stdin)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001483 if self.stdout:
1484 read_set.append(self.stdout)
Tim Peterse718f612004-10-12 21:51:32 +00001485 stdout = []
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001486 if self.stderr:
1487 read_set.append(self.stderr)
1488 stderr = []
1489
Thomas Wouters902d6eb2007-01-09 23:18:33 +00001490 input_offset = 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001491 while read_set or write_set:
Georg Brandl86b2fb92008-07-16 03:43:04 +00001492 try:
1493 rlist, wlist, xlist = select.select(read_set, write_set, [])
1494 except select.error as e:
1495 if e.args[0] == errno.EINTR:
1496 continue
1497 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001498
Guido van Rossum98297ee2007-11-06 21:34:58 +00001499 # XXX Rewrite these to use non-blocking I/O on the
1500 # file objects; they are no longer using C stdio!
1501
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001502 if self.stdin in wlist:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001503 chunk = input[input_offset : input_offset + _PIPE_BUF]
Guido van Rossumbae07c92007-10-08 02:46:15 +00001504 bytes_written = os.write(self.stdin.fileno(), chunk)
Thomas Wouters9fe394c2007-02-05 01:24:16 +00001505 input_offset += bytes_written
Thomas Wouters902d6eb2007-01-09 23:18:33 +00001506 if input_offset >= len(input):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001507 self.stdin.close()
1508 write_set.remove(self.stdin)
1509
1510 if self.stdout in rlist:
1511 data = os.read(self.stdout.fileno(), 1024)
Guido van Rossumc9e363c2007-05-15 23:18:55 +00001512 if not data:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001513 self.stdout.close()
1514 read_set.remove(self.stdout)
1515 stdout.append(data)
1516
1517 if self.stderr in rlist:
1518 data = os.read(self.stderr.fileno(), 1024)
Guido van Rossumc9e363c2007-05-15 23:18:55 +00001519 if not data:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001520 self.stderr.close()
1521 read_set.remove(self.stderr)
1522 stderr.append(data)
1523
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001524 return (stdout, stderr)
1525
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001526
Christian Heimesa342c012008-04-20 21:01:16 +00001527 def send_signal(self, sig):
1528 """Send a signal to the process
1529 """
1530 os.kill(self.pid, sig)
1531
1532 def terminate(self):
1533 """Terminate the process with SIGTERM
1534 """
1535 self.send_signal(signal.SIGTERM)
1536
1537 def kill(self):
1538 """Kill the process with SIGKILL
1539 """
1540 self.send_signal(signal.SIGKILL)
1541
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001542
1543def _demo_posix():
1544 #
1545 # Example 1: Simple redirection: Get process list
1546 #
1547 plist = Popen(["ps"], stdout=PIPE).communicate()[0]
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001548 print("Process list:")
1549 print(plist)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001550
1551 #
1552 # Example 2: Change uid before executing child
1553 #
1554 if os.getuid() == 0:
1555 p = Popen(["id"], preexec_fn=lambda: os.setuid(100))
1556 p.wait()
1557
1558 #
1559 # Example 3: Connecting several subprocesses
1560 #
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001561 print("Looking for 'hda'...")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001562 p1 = Popen(["dmesg"], stdout=PIPE)
1563 p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001564 print(repr(p2.communicate()[0]))
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001565
1566 #
1567 # Example 4: Catch execution error
1568 #
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001569 print()
1570 print("Trying a weird file...")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001571 try:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001572 print(Popen(["/this/path/does/not/exist"]).communicate())
Guido van Rossumb940e112007-01-10 16:19:56 +00001573 except OSError as e:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001574 if e.errno == errno.ENOENT:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001575 print("The file didn't exist. I thought so...")
1576 print("Child traceback:")
1577 print(e.child_traceback)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001578 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001579 print("Error", e.errno)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001580 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001581 print("Gosh. No error.", file=sys.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001582
1583
1584def _demo_windows():
1585 #
1586 # Example 1: Connecting several subprocesses
1587 #
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001588 print("Looking for 'PROMPT' in set output...")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001589 p1 = Popen("set", stdout=PIPE, shell=True)
1590 p2 = Popen('find "PROMPT"', stdin=p1.stdout, stdout=PIPE)
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001591 print(repr(p2.communicate()[0]))
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001592
1593 #
1594 # Example 2: Simple execution of program
1595 #
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001596 print("Executing calc...")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001597 p = Popen("calc")
1598 p.wait()
1599
1600
1601if __name__ == "__main__":
1602 if mswindows:
1603 _demo_windows()
1604 else:
1605 _demo_posix()