blob: 309f9a39728eddeb468d5c592cabe444f4d58556 [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 Astrandc26516b2005-02-21 08:13:02 +00005# This module should remain compatible with Python 2.2, see PEP 291.
6#
Peter Astrand3a708df2005-09-23 17:37:29 +00007# Copyright (c) 2003-2005 by Peter Astrand <astrand@lysator.liu.se>
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00008#
Peter Astrand69bf13f2005-02-14 08:56:32 +00009# Licensed to PSF under a Contributor Agreement.
Peter Astrand3a708df2005-09-23 17:37:29 +000010# See http://www.python.org/2.4/license for licensing details.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000011
Raymond Hettinger837dd932004-10-17 16:36:53 +000012r"""subprocess - Subprocesses with accessible I/O streams
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000013
Fredrik Lundh15aaacc2004-10-17 14:47:05 +000014This module allows you to spawn processes, connect to their
15input/output/error pipes, and obtain their return codes. This module
16intends to replace several other, older modules and functions, like:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000017
18os.system
19os.spawn*
20os.popen*
21popen2.*
22commands.*
23
24Information about how the subprocess module can be used to replace these
25modules and functions can be found below.
26
27
28
29Using the subprocess module
30===========================
31This module defines one class called Popen:
32
33class Popen(args, bufsize=0, executable=None,
34 stdin=None, stdout=None, stderr=None,
35 preexec_fn=None, close_fds=False, shell=False,
36 cwd=None, env=None, universal_newlines=False,
37 startupinfo=None, creationflags=0):
38
39
40Arguments are:
41
42args should be a string, or a sequence of program arguments. The
43program to execute is normally the first item in the args sequence or
44string, but can be explicitly set by using the executable argument.
45
46On UNIX, with shell=False (default): In this case, the Popen class
47uses os.execvp() to execute the child program. args should normally
48be a sequence. A string will be treated as a sequence with the string
49as the only item (the program to execute).
50
51On UNIX, with shell=True: If args is a string, it specifies the
52command string to execute through the shell. If args is a sequence,
53the first item specifies the command string, and any additional items
54will be treated as additional shell arguments.
55
56On Windows: the Popen class uses CreateProcess() to execute the child
57program, which operates on strings. If args is a sequence, it will be
58converted to a string using the list2cmdline method. Please note that
59not all MS Windows applications interpret the command line the same
60way: The list2cmdline is designed for applications using the same
61rules as the MS C runtime.
62
63bufsize, if given, has the same meaning as the corresponding argument
64to the built-in open() function: 0 means unbuffered, 1 means line
65buffered, any other positive value means use a buffer of
66(approximately) that size. A negative bufsize means to use the system
67default, which usually means fully buffered. The default value for
68bufsize is 0 (unbuffered).
69
70stdin, stdout and stderr specify the executed programs' standard
71input, standard output and standard error file handles, respectively.
72Valid values are PIPE, an existing file descriptor (a positive
73integer), an existing file object, and None. PIPE indicates that a
74new pipe to the child should be created. With None, no redirection
75will occur; the child's file handles will be inherited from the
76parent. Additionally, stderr can be STDOUT, which indicates that the
77stderr data from the applications should be captured into the same
78file handle as for stdout.
79
80If preexec_fn is set to a callable object, this object will be called
81in the child process just before the child is executed.
82
83If close_fds is true, all file descriptors except 0, 1 and 2 will be
84closed before the child process is executed.
85
86if shell is true, the specified command will be executed through the
87shell.
88
89If cwd is not None, the current directory will be changed to cwd
90before the child is executed.
91
92If env is not None, it defines the environment variables for the new
93process.
94
95If universal_newlines is true, the file objects stdout and stderr are
96opened as a text files, but lines may be terminated by any of '\n',
97the Unix end-of-line convention, '\r', the Macintosh convention or
98'\r\n', the Windows convention. All of these external representations
99are seen as '\n' by the Python program. Note: This feature is only
100available if Python is built with universal newline support (the
101default). Also, the newlines attribute of the file objects stdout,
102stdin and stderr are not updated by the communicate() method.
103
104The startupinfo and creationflags, if given, will be passed to the
105underlying CreateProcess() function. They can specify things such as
106appearance of the main window and priority for the new process.
107(Windows only)
108
109
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000110This module also defines some shortcut functions:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000111
Peter Astrand5f5e1412004-12-05 20:15:36 +0000112call(*popenargs, **kwargs):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000113 Run command with arguments. Wait for command to complete, then
114 return the returncode attribute.
115
116 The arguments are the same as for the Popen constructor. Example:
117
118 retcode = call(["ls", "-l"])
119
Peter Astrand454f7672005-01-01 09:36:35 +0000120check_call(*popenargs, **kwargs):
121 Run command with arguments. Wait for command to complete. If the
122 exit code was zero then return, otherwise raise
123 CalledProcessError. The CalledProcessError object will have the
Peter Astrand7d1d4362006-07-14 14:04:45 +0000124 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000125
126 The arguments are the same as for the Popen constructor. Example:
127
128 check_call(["ls", "-l"])
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000129
Gregory P. Smith26576802008-12-05 02:27:01 +0000130check_output(*popenargs, **kwargs):
Georg Brandl6ab5d082009-12-20 14:33:20 +0000131 Run command with arguments and return its output as a byte string.
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000132
Georg Brandl6ab5d082009-12-20 14:33:20 +0000133 If the exit code was non-zero it raises a CalledProcessError. The
134 CalledProcessError object will have the return code in the returncode
135 attribute and output in the output attribute.
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000136
Georg Brandl6ab5d082009-12-20 14:33:20 +0000137 The arguments are the same as for the Popen constructor. Example:
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000138
Georg Brandl02e7dfd2009-12-28 08:09:32 +0000139 output = check_output(["ls", "-l", "/dev/null"])
140
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000141
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000142Exceptions
143----------
144Exceptions raised in the child process, before the new program has
145started to execute, will be re-raised in the parent. Additionally,
146the exception object will have one extra attribute called
147'child_traceback', which is a string containing traceback information
148from the childs point of view.
149
150The most common exception raised is OSError. This occurs, for
151example, when trying to execute a non-existent file. Applications
152should prepare for OSErrors.
153
154A ValueError will be raised if Popen is called with invalid arguments.
155
Gregory P. Smith26576802008-12-05 02:27:01 +0000156check_call() and check_output() will raise CalledProcessError, if the
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000157called process returns a non-zero return code.
Peter Astrand454f7672005-01-01 09:36:35 +0000158
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000159
160Security
161--------
162Unlike some other popen functions, this implementation will never call
163/bin/sh implicitly. This means that all characters, including shell
164metacharacters, can safely be passed to child processes.
165
166
167Popen objects
168=============
169Instances of the Popen class have the following methods:
170
171poll()
172 Check if child process has terminated. Returns returncode
173 attribute.
174
175wait()
176 Wait for child process to terminate. Returns returncode attribute.
177
178communicate(input=None)
179 Interact with process: Send data to stdin. Read data from stdout
180 and stderr, until end-of-file is reached. Wait for process to
Neal Norwitza186ee22006-12-29 03:01:53 +0000181 terminate. The optional input argument should be a string to be
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000182 sent to the child process, or None, if no data should be sent to
183 the child.
Tim Peterse718f612004-10-12 21:51:32 +0000184
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000185 communicate() returns a tuple (stdout, stderr).
186
187 Note: The data read is buffered in memory, so do not use this
188 method if the data size is large or unlimited.
189
190The following attributes are also available:
191
192stdin
193 If the stdin argument is PIPE, this attribute is a file object
194 that provides input to the child process. Otherwise, it is None.
195
196stdout
197 If the stdout argument is PIPE, this attribute is a file object
198 that provides output from the child process. Otherwise, it is
199 None.
200
201stderr
202 If the stderr argument is PIPE, this attribute is file object that
203 provides error output from the child process. Otherwise, it is
204 None.
205
206pid
207 The process ID of the child process.
208
209returncode
210 The child return code. A None value indicates that the process
211 hasn't terminated yet. A negative value -N indicates that the
212 child was terminated by signal N (UNIX only).
213
214
215Replacing older functions with the subprocess module
216====================================================
217In this section, "a ==> b" means that b can be used as a replacement
218for a.
219
220Note: All functions in this section fail (more or less) silently if
221the executed program cannot be found; this module raises an OSError
222exception.
223
224In the following examples, we assume that the subprocess module is
225imported with "from subprocess import *".
226
227
228Replacing /bin/sh shell backquote
229---------------------------------
230output=`mycmd myarg`
231==>
232output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
233
234
235Replacing shell pipe line
236-------------------------
237output=`dmesg | grep hda`
238==>
239p1 = Popen(["dmesg"], stdout=PIPE)
Peter Astrand6fdf3cb2004-11-30 18:06:42 +0000240p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000241output = p2.communicate()[0]
242
243
244Replacing os.system()
245---------------------
246sts = os.system("mycmd" + " myarg")
247==>
248p = Popen("mycmd" + " myarg", shell=True)
Neal Norwitz84404832006-07-10 00:05:34 +0000249pid, sts = os.waitpid(p.pid, 0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000250
251Note:
252
253* Calling the program through the shell is usually not required.
254
255* It's easier to look at the returncode attribute than the
256 exitstatus.
257
258A more real-world example would look like this:
259
260try:
261 retcode = call("mycmd" + " myarg", shell=True)
262 if retcode < 0:
263 print >>sys.stderr, "Child was terminated by signal", -retcode
264 else:
265 print >>sys.stderr, "Child returned", retcode
266except OSError, e:
267 print >>sys.stderr, "Execution failed:", e
268
269
270Replacing os.spawn*
271-------------------
Tim Peterse718f612004-10-12 21:51:32 +0000272P_NOWAIT example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000273
274pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")
275==>
276pid = Popen(["/bin/mycmd", "myarg"]).pid
277
278
279P_WAIT example:
280
281retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg")
282==>
283retcode = call(["/bin/mycmd", "myarg"])
284
285
Tim Peterse718f612004-10-12 21:51:32 +0000286Vector example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000287
288os.spawnvp(os.P_NOWAIT, path, args)
289==>
290Popen([path] + args[1:])
291
292
Tim Peterse718f612004-10-12 21:51:32 +0000293Environment example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000294
295os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env)
296==>
297Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})
298
299
Tim Peterse718f612004-10-12 21:51:32 +0000300Replacing os.popen*
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000301-------------------
Philip Jenvey8b902042009-09-29 19:10:15 +0000302pipe = os.popen("cmd", mode='r', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000303==>
Philip Jenvey8b902042009-09-29 19:10:15 +0000304pipe = Popen("cmd", shell=True, bufsize=bufsize, stdout=PIPE).stdout
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000305
Philip Jenvey8b902042009-09-29 19:10:15 +0000306pipe = os.popen("cmd", mode='w', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000307==>
Philip Jenvey8b902042009-09-29 19:10:15 +0000308pipe = Popen("cmd", shell=True, bufsize=bufsize, stdin=PIPE).stdin
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000309
310
Philip Jenvey8b902042009-09-29 19:10:15 +0000311(child_stdin, child_stdout) = os.popen2("cmd", mode, bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000312==>
Philip Jenvey8b902042009-09-29 19:10:15 +0000313p = Popen("cmd", shell=True, bufsize=bufsize,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000314 stdin=PIPE, stdout=PIPE, close_fds=True)
315(child_stdin, child_stdout) = (p.stdin, p.stdout)
316
317
318(child_stdin,
319 child_stdout,
Philip Jenvey8b902042009-09-29 19:10:15 +0000320 child_stderr) = os.popen3("cmd", mode, bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000321==>
Philip Jenvey8b902042009-09-29 19:10:15 +0000322p = Popen("cmd", shell=True, bufsize=bufsize,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000323 stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
324(child_stdin,
325 child_stdout,
326 child_stderr) = (p.stdin, p.stdout, p.stderr)
327
328
Philip Jenvey8b902042009-09-29 19:10:15 +0000329(child_stdin, child_stdout_and_stderr) = os.popen4("cmd", mode,
330 bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000331==>
Philip Jenvey8b902042009-09-29 19:10:15 +0000332p = Popen("cmd", shell=True, bufsize=bufsize,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000333 stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
334(child_stdin, child_stdout_and_stderr) = (p.stdin, p.stdout)
335
Philip Jenvey8b902042009-09-29 19:10:15 +0000336On Unix, os.popen2, os.popen3 and os.popen4 also accept a sequence as
337the command to execute, in which case arguments will be passed
338directly to the program without shell intervention. This usage can be
339replaced as follows:
340
341(child_stdin, child_stdout) = os.popen2(["/bin/ls", "-l"], mode,
342 bufsize)
343==>
344p = Popen(["/bin/ls", "-l"], bufsize=bufsize, stdin=PIPE, stdout=PIPE)
345(child_stdin, child_stdout) = (p.stdin, p.stdout)
346
347Return code handling translates as follows:
348
349pipe = os.popen("cmd", 'w')
350...
351rc = pipe.close()
Florent Xiclunacf741ce2010-03-08 10:58:12 +0000352if rc is not None and rc % 256:
Philip Jenvey8b902042009-09-29 19:10:15 +0000353 print "There were some errors"
354==>
355process = Popen("cmd", 'w', shell=True, stdin=PIPE)
356...
357process.stdin.close()
358if process.wait() != 0:
359 print "There were some errors"
360
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000361
362Replacing popen2.*
363------------------
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000364(child_stdout, child_stdin) = popen2.popen2("somestring", bufsize, mode)
365==>
366p = Popen(["somestring"], shell=True, bufsize=bufsize
367 stdin=PIPE, stdout=PIPE, close_fds=True)
368(child_stdout, child_stdin) = (p.stdout, p.stdin)
369
Philip Jenvey8b902042009-09-29 19:10:15 +0000370On Unix, popen2 also accepts a sequence as the command to execute, in
371which case arguments will be passed directly to the program without
372shell intervention. This usage can be replaced as follows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000373
Philip Jenvey8b902042009-09-29 19:10:15 +0000374(child_stdout, child_stdin) = popen2.popen2(["mycmd", "myarg"], bufsize,
375 mode)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000376==>
377p = Popen(["mycmd", "myarg"], bufsize=bufsize,
378 stdin=PIPE, stdout=PIPE, close_fds=True)
379(child_stdout, child_stdin) = (p.stdout, p.stdin)
380
Neal Norwitzaa87fb62007-05-11 06:23:01 +0000381The popen2.Popen3 and popen2.Popen4 basically works as subprocess.Popen,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000382except that:
383
384* subprocess.Popen raises an exception if the execution fails
385* the capturestderr argument is replaced with the stderr argument.
386* stdin=PIPE and stdout=PIPE must be specified.
387* popen2 closes all filedescriptors by default, but you have to specify
Tim Peterse718f612004-10-12 21:51:32 +0000388 close_fds=True with subprocess.Popen.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000389"""
390
391import sys
392mswindows = (sys.platform == "win32")
393
394import os
Peter Astrandc26516b2005-02-21 08:13:02 +0000395import types
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000396import traceback
Gregory P. Smith87d49792008-01-19 20:57:59 +0000397import gc
Christian Heimese74c8f22008-04-19 02:23:57 +0000398import signal
Ross Lagerwall104c3f12011-04-05 15:24:34 +0200399import errno
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000400
Peter Astrand454f7672005-01-01 09:36:35 +0000401# Exception classes used by this module.
Peter Astrand7d1d4362006-07-14 14:04:45 +0000402class CalledProcessError(Exception):
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000403 """This exception is raised when a process run by check_call() or
Gregory P. Smith26576802008-12-05 02:27:01 +0000404 check_output() returns a non-zero exit status.
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000405 The exit status will be stored in the returncode attribute;
Gregory P. Smith26576802008-12-05 02:27:01 +0000406 check_output() will also store the output in the output attribute.
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000407 """
408 def __init__(self, returncode, cmd, output=None):
Peter Astrand7d1d4362006-07-14 14:04:45 +0000409 self.returncode = returncode
410 self.cmd = cmd
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000411 self.output = output
Peter Astrand7d1d4362006-07-14 14:04:45 +0000412 def __str__(self):
413 return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode)
Tim Peters73a9ead2006-07-18 21:55:15 +0000414
Peter Astrand454f7672005-01-01 09:36:35 +0000415
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000416if mswindows:
417 import threading
418 import msvcrt
Brian Curtina2936cf2010-04-24 15:40:11 +0000419 import _subprocess
420 class STARTUPINFO:
421 dwFlags = 0
422 hStdInput = None
423 hStdOutput = None
424 hStdError = None
425 wShowWindow = 0
426 class pywintypes:
427 error = IOError
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000428else:
429 import select
Gregory P. Smithdd7ca242009-07-04 01:49:29 +0000430 _has_poll = hasattr(select, 'poll')
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000431 import fcntl
432 import pickle
433
Amaury Forgeot d'Arcce32eb72009-07-09 22:37:22 +0000434 # When select or poll has indicated that the file is writable,
435 # we can write up to _PIPE_BUF bytes without risk of blocking.
436 # POSIX defines PIPE_BUF as >= 512.
437 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
438
439
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000440__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call",
Gregory P. Smith26576802008-12-05 02:27:01 +0000441 "check_output", "CalledProcessError"]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000442
Brian Curtina2936cf2010-04-24 15:40:11 +0000443if mswindows:
Brian Curtin77b75912011-04-29 16:21:51 -0500444 from _subprocess import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
445 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
446 STD_ERROR_HANDLE, SW_HIDE,
447 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW)
Brian Curtin20de4582011-04-29 16:28:52 -0500448
Brian Curtin77b75912011-04-29 16:21:51 -0500449 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
450 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
451 "STD_ERROR_HANDLE", "SW_HIDE",
452 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW"])
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000453try:
454 MAXFD = os.sysconf("SC_OPEN_MAX")
455except:
456 MAXFD = 256
457
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000458_active = []
459
460def _cleanup():
461 for inst in _active[:]:
Georg Brandl02e7dfd2009-12-28 08:09:32 +0000462 res = inst._internal_poll(_deadstate=sys.maxint)
Charles-François Natalib02302c2011-08-18 17:18:28 +0200463 if res is not None:
Martin v. Löwis17de8ff2006-04-10 15:55:37 +0000464 try:
465 _active.remove(inst)
466 except ValueError:
467 # This can happen if two threads create a new Popen instance.
468 # It's harmless that it was already removed, so ignore.
469 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000470
471PIPE = -1
472STDOUT = -2
473
474
Gregory P. Smithcce211f2010-03-01 00:05:08 +0000475def _eintr_retry_call(func, *args):
476 while True:
477 try:
478 return func(*args)
Victor Stinnere7901312011-07-05 14:08:01 +0200479 except (OSError, IOError) as e:
Gregory P. Smithcce211f2010-03-01 00:05:08 +0000480 if e.errno == errno.EINTR:
481 continue
482 raise
483
484
Kristján Valur Jónsson8927e8f2013-03-19 15:07:35 -0700485# XXX This function is only used by multiprocessing and the test suite,
486# but it's here so that it can be imported when Python is compiled without
487# threads.
488
489def _args_from_interpreter_flags():
490 """Return a list of command-line arguments reproducing the current
491 settings in sys.flags and sys.warnoptions."""
492 flag_opt_map = {
493 'debug': 'd',
494 # 'inspect': 'i',
495 # 'interactive': 'i',
496 'optimize': 'O',
497 'dont_write_bytecode': 'B',
498 'no_user_site': 's',
499 'no_site': 'S',
500 'ignore_environment': 'E',
501 'verbose': 'v',
502 'bytes_warning': 'b',
503 'hash_randomization': 'R',
504 'py3k_warning': '3',
505 }
506 args = []
507 for flag, opt in flag_opt_map.items():
508 v = getattr(sys.flags, flag)
509 if v > 0:
510 args.append('-' + opt * v)
511 for opt in sys.warnoptions:
512 args.append('-W' + opt)
513 return args
514
515
Peter Astrand5f5e1412004-12-05 20:15:36 +0000516def call(*popenargs, **kwargs):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000517 """Run command with arguments. Wait for command to complete, then
518 return the returncode attribute.
519
520 The arguments are the same as for the Popen constructor. Example:
521
522 retcode = call(["ls", "-l"])
523 """
Peter Astrand5f5e1412004-12-05 20:15:36 +0000524 return Popen(*popenargs, **kwargs).wait()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000525
526
Peter Astrand454f7672005-01-01 09:36:35 +0000527def check_call(*popenargs, **kwargs):
528 """Run command with arguments. Wait for command to complete. If
529 the exit code was zero then return, otherwise raise
530 CalledProcessError. The CalledProcessError object will have the
Peter Astrand7d1d4362006-07-14 14:04:45 +0000531 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000532
533 The arguments are the same as for the Popen constructor. Example:
534
535 check_call(["ls", "-l"])
536 """
537 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000538 if retcode:
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000539 cmd = kwargs.get("args")
540 if cmd is None:
541 cmd = popenargs[0]
Peter Astrand7d1d4362006-07-14 14:04:45 +0000542 raise CalledProcessError(retcode, cmd)
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000543 return 0
544
545
Gregory P. Smith26576802008-12-05 02:27:01 +0000546def check_output(*popenargs, **kwargs):
Georg Brandl6ab5d082009-12-20 14:33:20 +0000547 r"""Run command with arguments and return its output as a byte string.
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000548
549 If the exit code was non-zero it raises a CalledProcessError. The
550 CalledProcessError object will have the return code in the returncode
551 attribute and output in the output attribute.
552
553 The arguments are the same as for the Popen constructor. Example:
554
Gregory P. Smith26576802008-12-05 02:27:01 +0000555 >>> check_output(["ls", "-l", "/dev/null"])
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000556 'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
557
558 The stdout argument is not allowed as it is used internally.
Georg Brandl02e7dfd2009-12-28 08:09:32 +0000559 To capture standard error in the result, use stderr=STDOUT.
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000560
Gregory P. Smith26576802008-12-05 02:27:01 +0000561 >>> check_output(["/bin/sh", "-c",
Georg Brandl6ab5d082009-12-20 14:33:20 +0000562 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl02e7dfd2009-12-28 08:09:32 +0000563 ... stderr=STDOUT)
Mark Dickinson3e4caeb2009-02-21 20:27:01 +0000564 'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000565 """
566 if 'stdout' in kwargs:
567 raise ValueError('stdout argument not allowed, it will be overridden.')
Amaury Forgeot d'Arc5fe420e2009-06-18 22:32:50 +0000568 process = Popen(stdout=PIPE, *popenargs, **kwargs)
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000569 output, unused_err = process.communicate()
570 retcode = process.poll()
571 if retcode:
572 cmd = kwargs.get("args")
573 if cmd is None:
574 cmd = popenargs[0]
575 raise CalledProcessError(retcode, cmd, output=output)
576 return output
Peter Astrand454f7672005-01-01 09:36:35 +0000577
578
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000579def list2cmdline(seq):
580 """
581 Translate a sequence of arguments into a command line
582 string, using the same rules as the MS C runtime:
583
584 1) Arguments are delimited by white space, which is either a
585 space or a tab.
586
587 2) A string surrounded by double quotation marks is
588 interpreted as a single argument, regardless of white space
Jean-Paul Calderoneb33f0c12010-06-18 20:00:17 +0000589 contained within. A quoted string can be embedded in an
590 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000591
592 3) A double quotation mark preceded by a backslash is
593 interpreted as a literal double quotation mark.
594
595 4) Backslashes are interpreted literally, unless they
596 immediately precede a double quotation mark.
597
598 5) If backslashes immediately precede a double quotation mark,
599 every pair of backslashes is interpreted as a literal
600 backslash. If the number of backslashes is odd, the last
601 backslash escapes the next double quotation mark as
602 described in rule 3.
603 """
604
605 # See
Eric Smithd19915e2009-11-09 15:16:23 +0000606 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
607 # or search http://msdn.microsoft.com for
608 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000609 result = []
610 needquote = False
611 for arg in seq:
612 bs_buf = []
613
614 # Add a space to separate this argument from the others
615 if result:
616 result.append(' ')
617
Jean-Paul Calderoneb33f0c12010-06-18 20:00:17 +0000618 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000619 if needquote:
620 result.append('"')
621
622 for c in arg:
623 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000624 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000625 bs_buf.append(c)
626 elif c == '"':
Gregory P. Smithe047e6d2008-01-19 20:49:02 +0000627 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000628 result.append('\\' * len(bs_buf)*2)
629 bs_buf = []
630 result.append('\\"')
631 else:
632 # Normal char
633 if bs_buf:
634 result.extend(bs_buf)
635 bs_buf = []
636 result.append(c)
637
Gregory P. Smithe047e6d2008-01-19 20:49:02 +0000638 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000639 if bs_buf:
640 result.extend(bs_buf)
641
642 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000643 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000644 result.append('"')
645
646 return ''.join(result)
647
648
649class Popen(object):
650 def __init__(self, args, bufsize=0, executable=None,
651 stdin=None, stdout=None, stderr=None,
652 preexec_fn=None, close_fds=False, shell=False,
653 cwd=None, env=None, universal_newlines=False,
654 startupinfo=None, creationflags=0):
655 """Create new Popen instance."""
656 _cleanup()
657
Martin v. Löwis17de8ff2006-04-10 15:55:37 +0000658 self._child_created = False
Peter Astrand738131d2004-11-30 21:04:45 +0000659 if not isinstance(bufsize, (int, long)):
660 raise TypeError("bufsize must be an integer")
661
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000662 if mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000663 if preexec_fn is not None:
664 raise ValueError("preexec_fn is not supported on Windows "
665 "platforms")
Peter Astrand81a191b2007-05-26 22:18:20 +0000666 if close_fds and (stdin is not None or stdout is not None or
667 stderr is not None):
Tim Peterse8374a52004-10-13 03:15:00 +0000668 raise ValueError("close_fds is not supported on Windows "
Peter Astrand81a191b2007-05-26 22:18:20 +0000669 "platforms if you redirect stdin/stdout/stderr")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000670 else:
671 # POSIX
Tim Peterse8374a52004-10-13 03:15:00 +0000672 if startupinfo is not None:
673 raise ValueError("startupinfo is only supported on Windows "
674 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000675 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000676 raise ValueError("creationflags is only supported on Windows "
677 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000678
Tim Peterse718f612004-10-12 21:51:32 +0000679 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000680 self.stdout = None
681 self.stderr = None
682 self.pid = None
683 self.returncode = None
684 self.universal_newlines = universal_newlines
685
686 # Input and output objects. The general principle is like
687 # this:
688 #
689 # Parent Child
690 # ------ -----
691 # p2cwrite ---stdin---> p2cread
692 # c2pread <--stdout--- c2pwrite
693 # errread <--stderr--- errwrite
694 #
695 # On POSIX, the child objects are file descriptors. On
696 # Windows, these are Windows file handles. The parent objects
697 # are file descriptors on both platforms. The parent objects
698 # are None when not using PIPEs. The child objects are None
699 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000700
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000701 (p2cread, p2cwrite,
702 c2pread, c2pwrite,
703 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
704
Gregory P. Smith9d3b6e92012-11-10 22:49:03 -0800705 try:
706 self._execute_child(args, executable, preexec_fn, close_fds,
707 cwd, env, universal_newlines,
708 startupinfo, creationflags, shell,
709 p2cread, p2cwrite,
710 c2pread, c2pwrite,
711 errread, errwrite)
712 except Exception:
713 # Preserve original exception in case os.close raises.
714 exc_type, exc_value, exc_trace = sys.exc_info()
715
716 to_close = []
717 # Only close the pipes we created.
718 if stdin == PIPE:
719 to_close.extend((p2cread, p2cwrite))
720 if stdout == PIPE:
721 to_close.extend((c2pread, c2pwrite))
722 if stderr == PIPE:
723 to_close.extend((errread, errwrite))
724
725 for fd in to_close:
726 try:
727 os.close(fd)
728 except EnvironmentError:
729 pass
730
731 raise exc_type, exc_value, exc_trace
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000732
Peter Astrand5f9c6ae2007-02-06 15:37:50 +0000733 if mswindows:
Hirokazu Yamamotoeacbbdf2009-03-03 22:18:14 +0000734 if p2cwrite is not None:
735 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
736 if c2pread is not None:
737 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
738 if errread is not None:
739 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Peter Astrand5f9c6ae2007-02-06 15:37:50 +0000740
Peter Astrandf5400032007-02-02 19:06:36 +0000741 if p2cwrite is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000742 self.stdin = os.fdopen(p2cwrite, 'wb', bufsize)
Peter Astrandf5400032007-02-02 19:06:36 +0000743 if c2pread is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000744 if universal_newlines:
745 self.stdout = os.fdopen(c2pread, 'rU', bufsize)
746 else:
747 self.stdout = os.fdopen(c2pread, 'rb', bufsize)
Peter Astrandf5400032007-02-02 19:06:36 +0000748 if errread is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000749 if universal_newlines:
750 self.stderr = os.fdopen(errread, 'rU', bufsize)
751 else:
752 self.stderr = os.fdopen(errread, 'rb', bufsize)
Tim Peterse718f612004-10-12 21:51:32 +0000753
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000754
755 def _translate_newlines(self, data):
756 data = data.replace("\r\n", "\n")
757 data = data.replace("\r", "\n")
758 return data
759
Martin v. Löwis17de8ff2006-04-10 15:55:37 +0000760
Brett Cannon42a0ba72010-05-14 00:21:48 +0000761 def __del__(self, _maxint=sys.maxint, _active=_active):
Victor Stinner776e69b2011-06-01 01:03:00 +0200762 # If __init__ hasn't had a chance to execute (e.g. if it
763 # was passed an undeclared keyword argument), we don't
764 # have a _child_created attribute at all.
765 if not getattr(self, '_child_created', False):
Martin v. Löwis17de8ff2006-04-10 15:55:37 +0000766 # We didn't get to successfully create a child process.
767 return
768 # In case the child hasn't been waited on, check if it's done.
Brett Cannon42a0ba72010-05-14 00:21:48 +0000769 self._internal_poll(_deadstate=_maxint)
Georg Brandl13cf38c2006-07-20 16:28:39 +0000770 if self.returncode is None and _active is not None:
Martin v. Löwis17de8ff2006-04-10 15:55:37 +0000771 # Child is still running, keep us alive until we can wait on it.
772 _active.append(self)
773
774
Peter Astrand23109f02005-03-03 20:28:59 +0000775 def communicate(self, input=None):
776 """Interact with process: Send data to stdin. Read data from
777 stdout and stderr, until end-of-file is reached. Wait for
778 process to terminate. The optional input argument should be a
779 string to be sent to the child process, or None, if no data
780 should be sent to the child.
Tim Peterseba28be2005-03-28 01:08:02 +0000781
Peter Astrand23109f02005-03-03 20:28:59 +0000782 communicate() returns a tuple (stdout, stderr)."""
783
784 # Optimization: If we are only using one pipe, or no pipe at
785 # all, using select() or threads is unnecessary.
786 if [self.stdin, self.stdout, self.stderr].count(None) >= 2:
Tim Peterseba28be2005-03-28 01:08:02 +0000787 stdout = None
788 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000789 if self.stdin:
790 if input:
Ross Lagerwall104c3f12011-04-05 15:24:34 +0200791 try:
792 self.stdin.write(input)
793 except IOError as e:
794 if e.errno != errno.EPIPE and e.errno != errno.EINVAL:
795 raise
Peter Astrand23109f02005-03-03 20:28:59 +0000796 self.stdin.close()
797 elif self.stdout:
Victor Stinnere7901312011-07-05 14:08:01 +0200798 stdout = _eintr_retry_call(self.stdout.read)
Gregory P. Smith4036fd42008-05-26 20:22:14 +0000799 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000800 elif self.stderr:
Victor Stinnere7901312011-07-05 14:08:01 +0200801 stderr = _eintr_retry_call(self.stderr.read)
Gregory P. Smith4036fd42008-05-26 20:22:14 +0000802 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000803 self.wait()
804 return (stdout, stderr)
Tim Peterseba28be2005-03-28 01:08:02 +0000805
Peter Astrand23109f02005-03-03 20:28:59 +0000806 return self._communicate(input)
807
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000808
Gregory P. Smitha36f8fe2008-08-04 00:13:29 +0000809 def poll(self):
810 return self._internal_poll()
811
812
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000813 if mswindows:
814 #
815 # Windows methods
816 #
817 def _get_handles(self, stdin, stdout, stderr):
Amaury Forgeot d'Arc8318afa2009-07-10 16:47:42 +0000818 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000819 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
820 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000821 if stdin is None and stdout is None and stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000822 return (None, None, None, None, None, None)
Tim Peterse718f612004-10-12 21:51:32 +0000823
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000824 p2cread, p2cwrite = None, None
825 c2pread, c2pwrite = None, None
826 errread, errwrite = None, None
827
Peter Astrandd38ddf42005-02-10 08:32:50 +0000828 if stdin is None:
Brian Curtina2936cf2010-04-24 15:40:11 +0000829 p2cread = _subprocess.GetStdHandle(_subprocess.STD_INPUT_HANDLE)
Hirokazu Yamamotoeacbbdf2009-03-03 22:18:14 +0000830 if p2cread is None:
Brian Curtina2936cf2010-04-24 15:40:11 +0000831 p2cread, _ = _subprocess.CreatePipe(None, 0)
Hirokazu Yamamotoeacbbdf2009-03-03 22:18:14 +0000832 elif stdin == PIPE:
Brian Curtina2936cf2010-04-24 15:40:11 +0000833 p2cread, p2cwrite = _subprocess.CreatePipe(None, 0)
Peter Astrandd38ddf42005-02-10 08:32:50 +0000834 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000835 p2cread = msvcrt.get_osfhandle(stdin)
836 else:
837 # Assuming file-like object
838 p2cread = msvcrt.get_osfhandle(stdin.fileno())
839 p2cread = self._make_inheritable(p2cread)
840
Peter Astrandd38ddf42005-02-10 08:32:50 +0000841 if stdout is None:
Brian Curtina2936cf2010-04-24 15:40:11 +0000842 c2pwrite = _subprocess.GetStdHandle(_subprocess.STD_OUTPUT_HANDLE)
Hirokazu Yamamotoeacbbdf2009-03-03 22:18:14 +0000843 if c2pwrite is None:
Brian Curtina2936cf2010-04-24 15:40:11 +0000844 _, c2pwrite = _subprocess.CreatePipe(None, 0)
Hirokazu Yamamotoeacbbdf2009-03-03 22:18:14 +0000845 elif stdout == PIPE:
Brian Curtina2936cf2010-04-24 15:40:11 +0000846 c2pread, c2pwrite = _subprocess.CreatePipe(None, 0)
Peter Astrandd38ddf42005-02-10 08:32:50 +0000847 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000848 c2pwrite = msvcrt.get_osfhandle(stdout)
849 else:
850 # Assuming file-like object
851 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
852 c2pwrite = self._make_inheritable(c2pwrite)
853
Peter Astrandd38ddf42005-02-10 08:32:50 +0000854 if stderr is None:
Brian Curtina2936cf2010-04-24 15:40:11 +0000855 errwrite = _subprocess.GetStdHandle(_subprocess.STD_ERROR_HANDLE)
Hirokazu Yamamotoeacbbdf2009-03-03 22:18:14 +0000856 if errwrite is None:
Brian Curtina2936cf2010-04-24 15:40:11 +0000857 _, errwrite = _subprocess.CreatePipe(None, 0)
Hirokazu Yamamotoeacbbdf2009-03-03 22:18:14 +0000858 elif stderr == PIPE:
Brian Curtina2936cf2010-04-24 15:40:11 +0000859 errread, errwrite = _subprocess.CreatePipe(None, 0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000860 elif stderr == STDOUT:
861 errwrite = c2pwrite
Peter Astrandd38ddf42005-02-10 08:32:50 +0000862 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000863 errwrite = msvcrt.get_osfhandle(stderr)
864 else:
865 # Assuming file-like object
866 errwrite = msvcrt.get_osfhandle(stderr.fileno())
867 errwrite = self._make_inheritable(errwrite)
868
869 return (p2cread, p2cwrite,
870 c2pread, c2pwrite,
871 errread, errwrite)
872
873
874 def _make_inheritable(self, handle):
875 """Return a duplicate of handle, which is inheritable"""
Brian Curtina2936cf2010-04-24 15:40:11 +0000876 return _subprocess.DuplicateHandle(_subprocess.GetCurrentProcess(),
877 handle, _subprocess.GetCurrentProcess(), 0, 1,
878 _subprocess.DUPLICATE_SAME_ACCESS)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000879
880
881 def _find_w9xpopen(self):
882 """Find and return absolut path to w9xpopen.exe"""
Brian Curtina2936cf2010-04-24 15:40:11 +0000883 w9xpopen = os.path.join(
884 os.path.dirname(_subprocess.GetModuleFileName(0)),
Tim Peterse8374a52004-10-13 03:15:00 +0000885 "w9xpopen.exe")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000886 if not os.path.exists(w9xpopen):
887 # Eeek - file-not-found - possibly an embedding
888 # situation - see if we can locate it in sys.exec_prefix
Tim Peterse8374a52004-10-13 03:15:00 +0000889 w9xpopen = os.path.join(os.path.dirname(sys.exec_prefix),
890 "w9xpopen.exe")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000891 if not os.path.exists(w9xpopen):
Tim Peterse8374a52004-10-13 03:15:00 +0000892 raise RuntimeError("Cannot locate w9xpopen.exe, which is "
893 "needed for Popen to work with your "
894 "shell or platform.")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000895 return w9xpopen
896
Tim Peterse718f612004-10-12 21:51:32 +0000897
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000898 def _execute_child(self, args, executable, preexec_fn, close_fds,
899 cwd, env, universal_newlines,
900 startupinfo, creationflags, shell,
901 p2cread, p2cwrite,
902 c2pread, c2pwrite,
903 errread, errwrite):
904 """Execute program (MS Windows version)"""
905
Peter Astrandc26516b2005-02-21 08:13:02 +0000906 if not isinstance(args, types.StringTypes):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000907 args = list2cmdline(args)
908
Peter Astrandc1d65362004-11-07 14:30:34 +0000909 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +0000910 if startupinfo is None:
Georg Brandlad624892006-06-04 22:15:37 +0000911 startupinfo = STARTUPINFO()
912 if None not in (p2cread, c2pwrite, errwrite):
Brian Curtina2936cf2010-04-24 15:40:11 +0000913 startupinfo.dwFlags |= _subprocess.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +0000914 startupinfo.hStdInput = p2cread
915 startupinfo.hStdOutput = c2pwrite
916 startupinfo.hStdError = errwrite
917
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000918 if shell:
Brian Curtina2936cf2010-04-24 15:40:11 +0000919 startupinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOW
920 startupinfo.wShowWindow = _subprocess.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000921 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden8e4756c2010-08-12 11:00:35 +0000922 args = '{} /c "{}"'.format (comspec, args)
923 if (_subprocess.GetVersion() >= 0x80000000 or
Tim Peterse8374a52004-10-13 03:15:00 +0000924 os.path.basename(comspec).lower() == "command.com"):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000925 # Win9x, or using command.com on NT. We need to
926 # use the w9xpopen intermediate program. For more
927 # information, see KB Q150956
928 # (http://web.archive.org/web/20011105084002/http://support.microsoft.com/support/kb/articles/Q150/9/56.asp)
929 w9xpopen = self._find_w9xpopen()
930 args = '"%s" %s' % (w9xpopen, args)
931 # Not passing CREATE_NEW_CONSOLE has been known to
932 # cause random failures on win9x. Specifically a
933 # dialog: "Your program accessed mem currently in
934 # use at xxx" and a hopeful warning about the
935 # stability of your system. Cost is Ctrl+C wont
936 # kill children.
Brian Curtina2936cf2010-04-24 15:40:11 +0000937 creationflags |= _subprocess.CREATE_NEW_CONSOLE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000938
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000939 # Start the process
940 try:
Brian Curtina2936cf2010-04-24 15:40:11 +0000941 hp, ht, pid, tid = _subprocess.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +0000942 # no special security
943 None, None,
Peter Astrand81a191b2007-05-26 22:18:20 +0000944 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +0000945 creationflags,
946 env,
947 cwd,
948 startupinfo)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000949 except pywintypes.error, e:
950 # Translate pywintypes.error to WindowsError, which is
951 # a subclass of OSError. FIXME: We should really
Ezio Melottic2077b02011-03-16 12:34:31 +0200952 # translate errno using _sys_errlist (or similar), but
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000953 # how can this be done from Python?
954 raise WindowsError(*e.args)
Tim Golden431774f2010-08-08 11:17:56 +0000955 finally:
956 # Child is launched. Close the parent's copy of those pipe
957 # handles that only the child should have open. You need
958 # to make sure that no handles to the write end of the
959 # output pipe are maintained in this process or else the
960 # pipe will not close when the child process exits and the
961 # ReadFile will hang.
962 if p2cread is not None:
963 p2cread.Close()
964 if c2pwrite is not None:
965 c2pwrite.Close()
966 if errwrite is not None:
967 errwrite.Close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000968
969 # Retain the process handle, but close the thread handle
Martin v. Löwis17de8ff2006-04-10 15:55:37 +0000970 self._child_created = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000971 self._handle = hp
972 self.pid = pid
973 ht.Close()
974
Brett Cannon42a0ba72010-05-14 00:21:48 +0000975 def _internal_poll(self, _deadstate=None,
Victor Stinner2b271f72010-05-14 21:52:26 +0000976 _WaitForSingleObject=_subprocess.WaitForSingleObject,
977 _WAIT_OBJECT_0=_subprocess.WAIT_OBJECT_0,
978 _GetExitCodeProcess=_subprocess.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000979 """Check if child process has terminated. Returns returncode
Brett Cannon42a0ba72010-05-14 00:21:48 +0000980 attribute.
981
982 This method is called by __del__, so it can only refer to objects
983 in its local scope.
984
985 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000986 if self.returncode is None:
Brett Cannon42a0ba72010-05-14 00:21:48 +0000987 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
988 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000989 return self.returncode
990
991
992 def wait(self):
993 """Wait for child process to terminate. Returns returncode
994 attribute."""
Peter Astrandd38ddf42005-02-10 08:32:50 +0000995 if self.returncode is None:
Brian Curtina2936cf2010-04-24 15:40:11 +0000996 _subprocess.WaitForSingleObject(self._handle,
997 _subprocess.INFINITE)
998 self.returncode = _subprocess.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000999 return self.returncode
1000
1001
1002 def _readerthread(self, fh, buffer):
1003 buffer.append(fh.read())
1004
1005
Peter Astrand23109f02005-03-03 20:28:59 +00001006 def _communicate(self, input):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001007 stdout = None # Return
1008 stderr = None # Return
1009
1010 if self.stdout:
1011 stdout = []
Tim Peterse8374a52004-10-13 03:15:00 +00001012 stdout_thread = threading.Thread(target=self._readerthread,
1013 args=(self.stdout, stdout))
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001014 stdout_thread.setDaemon(True)
1015 stdout_thread.start()
1016 if self.stderr:
1017 stderr = []
Tim Peterse8374a52004-10-13 03:15:00 +00001018 stderr_thread = threading.Thread(target=self._readerthread,
1019 args=(self.stderr, stderr))
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001020 stderr_thread.setDaemon(True)
1021 stderr_thread.start()
1022
1023 if self.stdin:
Peter Astrandd38ddf42005-02-10 08:32:50 +00001024 if input is not None:
Ross Lagerwall104c3f12011-04-05 15:24:34 +02001025 try:
1026 self.stdin.write(input)
1027 except IOError as e:
1028 if e.errno != errno.EPIPE:
1029 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001030 self.stdin.close()
1031
1032 if self.stdout:
1033 stdout_thread.join()
1034 if self.stderr:
1035 stderr_thread.join()
1036
1037 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001038 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001039 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001040 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001041 stderr = stderr[0]
1042
1043 # Translate newlines, if requested. We cannot let the file
1044 # object do the translation: It is based on stdio, which is
1045 # impossible to combine with select (unless forcing no
1046 # buffering).
Neal Norwitza6d01ce2006-05-02 06:23:22 +00001047 if self.universal_newlines and hasattr(file, 'newlines'):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001048 if stdout:
1049 stdout = self._translate_newlines(stdout)
1050 if stderr:
1051 stderr = self._translate_newlines(stderr)
1052
1053 self.wait()
1054 return (stdout, stderr)
1055
Christian Heimese74c8f22008-04-19 02:23:57 +00001056 def send_signal(self, sig):
1057 """Send a signal to the process
1058 """
1059 if sig == signal.SIGTERM:
1060 self.terminate()
Brian Curtine5aa8862010-04-02 23:26:06 +00001061 elif sig == signal.CTRL_C_EVENT:
1062 os.kill(self.pid, signal.CTRL_C_EVENT)
1063 elif sig == signal.CTRL_BREAK_EVENT:
1064 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimese74c8f22008-04-19 02:23:57 +00001065 else:
Brian Curtine80513c2010-09-07 13:27:20 +00001066 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimese74c8f22008-04-19 02:23:57 +00001067
1068 def terminate(self):
1069 """Terminates the process
1070 """
Antoine Pitrouf60845b2012-03-11 19:29:12 +01001071 try:
1072 _subprocess.TerminateProcess(self._handle, 1)
1073 except OSError as e:
1074 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1075 # process already died.
1076 if e.winerror != 5:
1077 raise
1078 rc = _subprocess.GetExitCodeProcess(self._handle)
1079 if rc == _subprocess.STILL_ACTIVE:
1080 raise
1081 self.returncode = rc
Christian Heimese74c8f22008-04-19 02:23:57 +00001082
1083 kill = terminate
1084
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001085 else:
1086 #
1087 # POSIX methods
1088 #
1089 def _get_handles(self, stdin, stdout, stderr):
Amaury Forgeot d'Arc8318afa2009-07-10 16:47:42 +00001090 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001091 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1092 """
1093 p2cread, p2cwrite = None, None
1094 c2pread, c2pwrite = None, None
1095 errread, errwrite = None, None
1096
Peter Astrandd38ddf42005-02-10 08:32:50 +00001097 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001098 pass
1099 elif stdin == PIPE:
Charles-François Natali2a34eb32011-08-25 21:20:54 +02001100 p2cread, p2cwrite = self.pipe_cloexec()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001101 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001102 p2cread = stdin
1103 else:
1104 # Assuming file-like object
1105 p2cread = stdin.fileno()
1106
Peter Astrandd38ddf42005-02-10 08:32:50 +00001107 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001108 pass
1109 elif stdout == PIPE:
Charles-François Natali2a34eb32011-08-25 21:20:54 +02001110 c2pread, c2pwrite = self.pipe_cloexec()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001111 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001112 c2pwrite = stdout
1113 else:
1114 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001115 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001116
Peter Astrandd38ddf42005-02-10 08:32:50 +00001117 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001118 pass
1119 elif stderr == PIPE:
Charles-François Natali2a34eb32011-08-25 21:20:54 +02001120 errread, errwrite = self.pipe_cloexec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001121 elif stderr == STDOUT:
1122 errwrite = c2pwrite
Peter Astrandd38ddf42005-02-10 08:32:50 +00001123 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001124 errwrite = stderr
1125 else:
1126 # Assuming file-like object
1127 errwrite = stderr.fileno()
1128
1129 return (p2cread, p2cwrite,
1130 c2pread, c2pwrite,
1131 errread, errwrite)
1132
1133
Antoine Pitrou91ce0d92011-01-03 18:45:09 +00001134 def _set_cloexec_flag(self, fd, cloexec=True):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001135 try:
1136 cloexec_flag = fcntl.FD_CLOEXEC
1137 except AttributeError:
1138 cloexec_flag = 1
1139
1140 old = fcntl.fcntl(fd, fcntl.F_GETFD)
Antoine Pitrou91ce0d92011-01-03 18:45:09 +00001141 if cloexec:
1142 fcntl.fcntl(fd, fcntl.F_SETFD, old | cloexec_flag)
1143 else:
1144 fcntl.fcntl(fd, fcntl.F_SETFD, old & ~cloexec_flag)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001145
1146
Charles-François Natali2a34eb32011-08-25 21:20:54 +02001147 def pipe_cloexec(self):
1148 """Create a pipe with FDs set CLOEXEC."""
1149 # Pipes' FDs are set CLOEXEC by default because we don't want them
1150 # to be inherited by other subprocesses: the CLOEXEC flag is removed
1151 # from the child's FDs by _dup2(), between fork() and exec().
1152 # This is not atomic: we would need the pipe2() syscall for that.
1153 r, w = os.pipe()
1154 self._set_cloexec_flag(r)
1155 self._set_cloexec_flag(w)
1156 return r, w
1157
1158
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001159 def _close_fds(self, but):
Amaury Forgeot d'Arc5fe420e2009-06-18 22:32:50 +00001160 if hasattr(os, 'closerange'):
1161 os.closerange(3, but)
1162 os.closerange(but + 1, MAXFD)
1163 else:
1164 for i in xrange(3, MAXFD):
1165 if i == but:
1166 continue
1167 try:
1168 os.close(i)
1169 except:
1170 pass
Tim Peterse718f612004-10-12 21:51:32 +00001171
1172
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001173 def _execute_child(self, args, executable, preexec_fn, close_fds,
1174 cwd, env, universal_newlines,
1175 startupinfo, creationflags, shell,
1176 p2cread, p2cwrite,
1177 c2pread, c2pwrite,
1178 errread, errwrite):
1179 """Execute program (POSIX version)"""
1180
Peter Astrandc26516b2005-02-21 08:13:02 +00001181 if isinstance(args, types.StringTypes):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001182 args = [args]
Georg Brandl6c0e1e82006-10-29 09:05:04 +00001183 else:
1184 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001185
1186 if shell:
1187 args = ["/bin/sh", "-c"] + args
Stefan Krahe9a6a7d2010-07-19 14:41:08 +00001188 if executable:
1189 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001190
Peter Astrandd38ddf42005-02-10 08:32:50 +00001191 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001192 executable = args[0]
1193
1194 # For transferring possible exec failure from child to parent
1195 # The first char specifies the exception type: 0 means
1196 # OSError, 1 means some other error.
Charles-François Natali2a34eb32011-08-25 21:20:54 +02001197 errpipe_read, errpipe_write = self.pipe_cloexec()
Gregory P. Smith87d49792008-01-19 20:57:59 +00001198 try:
Gregory P. Smith92ffc632008-01-19 22:23:56 +00001199 try:
Facundo Batista8c826b72009-06-19 18:02:28 +00001200 gc_was_enabled = gc.isenabled()
1201 # Disable gc to avoid bug where gc -> file_dealloc ->
1202 # write to stderr -> hang. http://bugs.python.org/issue1336
1203 gc.disable()
1204 try:
1205 self.pid = os.fork()
Georg Brandl3e8b8692009-07-16 21:47:51 +00001206 except:
Facundo Batista8c826b72009-06-19 18:02:28 +00001207 if gc_was_enabled:
1208 gc.enable()
Georg Brandl3e8b8692009-07-16 21:47:51 +00001209 raise
Facundo Batista8c826b72009-06-19 18:02:28 +00001210 self._child_created = True
1211 if self.pid == 0:
1212 # Child
1213 try:
1214 # Close parent's pipe ends
1215 if p2cwrite is not None:
1216 os.close(p2cwrite)
1217 if c2pread is not None:
1218 os.close(c2pread)
1219 if errread is not None:
1220 os.close(errread)
1221 os.close(errpipe_read)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001222
Ross Lagerwalld8e39012011-07-27 18:54:53 +02001223 # When duping fds, if there arises a situation
1224 # where one of the fds is either 0, 1 or 2, it
1225 # is possible that it is overwritten (#12607).
1226 if c2pwrite == 0:
1227 c2pwrite = os.dup(c2pwrite)
1228 if errwrite == 0 or errwrite == 1:
1229 errwrite = os.dup(errwrite)
1230
Facundo Batista8c826b72009-06-19 18:02:28 +00001231 # Dup fds for child
Antoine Pitrou91ce0d92011-01-03 18:45:09 +00001232 def _dup2(a, b):
1233 # dup2() removes the CLOEXEC flag but
1234 # we must do it ourselves if dup2()
1235 # would be a no-op (issue #10806).
1236 if a == b:
1237 self._set_cloexec_flag(a, False)
1238 elif a is not None:
1239 os.dup2(a, b)
1240 _dup2(p2cread, 0)
1241 _dup2(c2pwrite, 1)
1242 _dup2(errwrite, 2)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001243
Antoine Pitrou91ce0d92011-01-03 18:45:09 +00001244 # Close pipe fds. Make sure we don't close the
1245 # same fd more than once, or standard fds.
1246 closed = { None }
1247 for fd in [p2cread, c2pwrite, errwrite]:
1248 if fd not in closed and fd > 2:
1249 os.close(fd)
1250 closed.add(fd)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001251
Facundo Batista8c826b72009-06-19 18:02:28 +00001252 # Close all other fds, if asked for
1253 if close_fds:
1254 self._close_fds(but=errpipe_write)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001255
Facundo Batista8c826b72009-06-19 18:02:28 +00001256 if cwd is not None:
1257 os.chdir(cwd)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001258
Facundo Batista8c826b72009-06-19 18:02:28 +00001259 if preexec_fn:
1260 preexec_fn()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001261
Facundo Batista8c826b72009-06-19 18:02:28 +00001262 if env is None:
1263 os.execvp(executable, args)
1264 else:
1265 os.execvpe(executable, args, env)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001266
Facundo Batista8c826b72009-06-19 18:02:28 +00001267 except:
1268 exc_type, exc_value, tb = sys.exc_info()
1269 # Save the traceback and attach it to the exception object
1270 exc_lines = traceback.format_exception(exc_type,
1271 exc_value,
1272 tb)
1273 exc_value.child_traceback = ''.join(exc_lines)
1274 os.write(errpipe_write, pickle.dumps(exc_value))
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001275
Facundo Batista8c826b72009-06-19 18:02:28 +00001276 # This exitcode won't be reported to applications, so it
1277 # really doesn't matter what we return.
1278 os._exit(255)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001279
Facundo Batista8c826b72009-06-19 18:02:28 +00001280 # Parent
1281 if gc_was_enabled:
1282 gc.enable()
1283 finally:
1284 # be sure the FD is closed no matter what
1285 os.close(errpipe_write)
1286
1287 if p2cread is not None and p2cwrite is not None:
1288 os.close(p2cread)
1289 if c2pwrite is not None and c2pread is not None:
1290 os.close(c2pwrite)
1291 if errwrite is not None and errread is not None:
1292 os.close(errwrite)
1293
1294 # Wait for exec to fail or succeed; possibly raising exception
Gregory P. Smithcce211f2010-03-01 00:05:08 +00001295 # Exception limited to 1M
1296 data = _eintr_retry_call(os.read, errpipe_read, 1048576)
Facundo Batista8c826b72009-06-19 18:02:28 +00001297 finally:
1298 # be sure the FD is closed no matter what
1299 os.close(errpipe_read)
1300
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001301 if data != "":
Gregory P. Smith312efbc2010-12-14 15:02:53 +00001302 try:
1303 _eintr_retry_call(os.waitpid, self.pid, 0)
1304 except OSError as e:
1305 if e.errno != errno.ECHILD:
1306 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001307 child_exception = pickle.loads(data)
1308 raise child_exception
1309
1310
Brett Cannon42a0ba72010-05-14 00:21:48 +00001311 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1312 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
1313 _WEXITSTATUS=os.WEXITSTATUS):
1314 # This method is called (indirectly) by __del__, so it cannot
1315 # refer to anything outside of its local scope."""
1316 if _WIFSIGNALED(sts):
1317 self.returncode = -_WTERMSIG(sts)
1318 elif _WIFEXITED(sts):
1319 self.returncode = _WEXITSTATUS(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001320 else:
1321 # Should never happen
1322 raise RuntimeError("Unknown child exit status!")
1323
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001324
Brett Cannon42a0ba72010-05-14 00:21:48 +00001325 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov332562f2012-12-24 20:09:27 +02001326 _WNOHANG=os.WNOHANG, _os_error=os.error, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001327 """Check if child process has terminated. Returns returncode
Brett Cannon42a0ba72010-05-14 00:21:48 +00001328 attribute.
1329
1330 This method is called by __del__, so it cannot reference anything
1331 outside of the local scope (nor can any methods it calls).
1332
1333 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001334 if self.returncode is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001335 try:
Brett Cannon42a0ba72010-05-14 00:21:48 +00001336 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001337 if pid == self.pid:
1338 self._handle_exitstatus(sts)
Gregory P. Smith0798cbc2012-09-29 12:02:48 -07001339 except _os_error as e:
Martin v. Löwis17de8ff2006-04-10 15:55:37 +00001340 if _deadstate is not None:
1341 self.returncode = _deadstate
Andrew Svetlov332562f2012-12-24 20:09:27 +02001342 if e.errno == _ECHILD:
Gregory P. Smith0798cbc2012-09-29 12:02:48 -07001343 # This happens if SIGCLD is set to be ignored or
1344 # waiting for child processes has otherwise been
1345 # disabled for our process. This child is dead, we
1346 # can't get the status.
1347 # http://bugs.python.org/issue15756
1348 self.returncode = 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001349 return self.returncode
1350
1351
1352 def wait(self):
1353 """Wait for child process to terminate. Returns returncode
1354 attribute."""
Gregory P. Smithf2705ae2012-11-10 21:13:20 -08001355 while self.returncode is None:
Gregory P. Smith312efbc2010-12-14 15:02:53 +00001356 try:
1357 pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0)
1358 except OSError as e:
1359 if e.errno != errno.ECHILD:
1360 raise
1361 # This happens if SIGCLD is set to be ignored or waiting
1362 # for child processes has otherwise been disabled for our
1363 # process. This child is dead, we can't get the status.
Gregory P. Smithf2705ae2012-11-10 21:13:20 -08001364 pid = self.pid
Gregory P. Smith312efbc2010-12-14 15:02:53 +00001365 sts = 0
Gregory P. Smithf2705ae2012-11-10 21:13:20 -08001366 # Check the pid and loop as waitpid has been known to return
1367 # 0 even without WNOHANG in odd situations. issue14396.
1368 if pid == self.pid:
1369 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001370 return self.returncode
1371
1372
Peter Astrand23109f02005-03-03 20:28:59 +00001373 def _communicate(self, input):
Gregory P. Smithdd7ca242009-07-04 01:49:29 +00001374 if self.stdin:
1375 # Flush stdio buffer. This might block, if the user has
1376 # been writing to .stdin in an uncontrolled fashion.
1377 self.stdin.flush()
1378 if not input:
1379 self.stdin.close()
1380
1381 if _has_poll:
1382 stdout, stderr = self._communicate_with_poll(input)
1383 else:
1384 stdout, stderr = self._communicate_with_select(input)
1385
1386 # All data exchanged. Translate lists into strings.
1387 if stdout is not None:
1388 stdout = ''.join(stdout)
1389 if stderr is not None:
1390 stderr = ''.join(stderr)
1391
1392 # Translate newlines, if requested. We cannot let the file
1393 # object do the translation: It is based on stdio, which is
1394 # impossible to combine with select (unless forcing no
1395 # buffering).
1396 if self.universal_newlines and hasattr(file, 'newlines'):
1397 if stdout:
1398 stdout = self._translate_newlines(stdout)
1399 if stderr:
1400 stderr = self._translate_newlines(stderr)
1401
1402 self.wait()
1403 return (stdout, stderr)
1404
1405
1406 def _communicate_with_poll(self, input):
1407 stdout = None # Return
1408 stderr = None # Return
1409 fd2file = {}
1410 fd2output = {}
1411
1412 poller = select.poll()
1413 def register_and_append(file_obj, eventmask):
1414 poller.register(file_obj.fileno(), eventmask)
1415 fd2file[file_obj.fileno()] = file_obj
1416
1417 def close_unregister_and_remove(fd):
1418 poller.unregister(fd)
1419 fd2file[fd].close()
1420 fd2file.pop(fd)
1421
1422 if self.stdin and input:
1423 register_and_append(self.stdin, select.POLLOUT)
1424
1425 select_POLLIN_POLLPRI = select.POLLIN | select.POLLPRI
1426 if self.stdout:
1427 register_and_append(self.stdout, select_POLLIN_POLLPRI)
1428 fd2output[self.stdout.fileno()] = stdout = []
1429 if self.stderr:
1430 register_and_append(self.stderr, select_POLLIN_POLLPRI)
1431 fd2output[self.stderr.fileno()] = stderr = []
1432
1433 input_offset = 0
1434 while fd2file:
1435 try:
1436 ready = poller.poll()
1437 except select.error, e:
1438 if e.args[0] == errno.EINTR:
1439 continue
1440 raise
1441
1442 for fd, mode in ready:
1443 if mode & select.POLLOUT:
1444 chunk = input[input_offset : input_offset + _PIPE_BUF]
Ross Lagerwall104c3f12011-04-05 15:24:34 +02001445 try:
1446 input_offset += os.write(fd, chunk)
1447 except OSError as e:
1448 if e.errno == errno.EPIPE:
1449 close_unregister_and_remove(fd)
1450 else:
1451 raise
1452 else:
1453 if input_offset >= len(input):
1454 close_unregister_and_remove(fd)
Gregory P. Smithdd7ca242009-07-04 01:49:29 +00001455 elif mode & select_POLLIN_POLLPRI:
1456 data = os.read(fd, 4096)
1457 if not data:
1458 close_unregister_and_remove(fd)
1459 fd2output[fd].append(data)
1460 else:
1461 # Ignore hang up or errors.
1462 close_unregister_and_remove(fd)
1463
1464 return (stdout, stderr)
1465
1466
1467 def _communicate_with_select(self, input):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001468 read_set = []
1469 write_set = []
1470 stdout = None # Return
1471 stderr = None # Return
1472
Gregory P. Smithdd7ca242009-07-04 01:49:29 +00001473 if self.stdin and input:
1474 write_set.append(self.stdin)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001475 if self.stdout:
1476 read_set.append(self.stdout)
Tim Peterse718f612004-10-12 21:51:32 +00001477 stdout = []
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001478 if self.stderr:
1479 read_set.append(self.stderr)
1480 stderr = []
1481
Peter Astrand1812f8c2007-01-07 14:34:16 +00001482 input_offset = 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001483 while read_set or write_set:
Gregory P. Smithf4140642008-07-06 07:16:40 +00001484 try:
1485 rlist, wlist, xlist = select.select(read_set, write_set, [])
1486 except select.error, e:
1487 if e.args[0] == errno.EINTR:
1488 continue
1489 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001490
1491 if self.stdin in wlist:
Gregory P. Smithdd7ca242009-07-04 01:49:29 +00001492 chunk = input[input_offset : input_offset + _PIPE_BUF]
Ross Lagerwall104c3f12011-04-05 15:24:34 +02001493 try:
1494 bytes_written = os.write(self.stdin.fileno(), chunk)
1495 except OSError as e:
1496 if e.errno == errno.EPIPE:
1497 self.stdin.close()
1498 write_set.remove(self.stdin)
1499 else:
1500 raise
1501 else:
1502 input_offset += bytes_written
1503 if input_offset >= len(input):
1504 self.stdin.close()
1505 write_set.remove(self.stdin)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001506
1507 if self.stdout in rlist:
1508 data = os.read(self.stdout.fileno(), 1024)
1509 if data == "":
1510 self.stdout.close()
1511 read_set.remove(self.stdout)
1512 stdout.append(data)
1513
1514 if self.stderr in rlist:
1515 data = os.read(self.stderr.fileno(), 1024)
1516 if data == "":
1517 self.stderr.close()
1518 read_set.remove(self.stderr)
1519 stderr.append(data)
1520
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001521 return (stdout, stderr)
1522
Gregory P. Smithdd7ca242009-07-04 01:49:29 +00001523
Christian Heimese74c8f22008-04-19 02:23:57 +00001524 def send_signal(self, sig):
1525 """Send a signal to the process
1526 """
1527 os.kill(self.pid, sig)
1528
1529 def terminate(self):
1530 """Terminate the process with SIGTERM
1531 """
1532 self.send_signal(signal.SIGTERM)
1533
1534 def kill(self):
1535 """Kill the process with SIGKILL
1536 """
1537 self.send_signal(signal.SIGKILL)
1538
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001539
1540def _demo_posix():
1541 #
1542 # Example 1: Simple redirection: Get process list
1543 #
1544 plist = Popen(["ps"], stdout=PIPE).communicate()[0]
1545 print "Process list:"
1546 print plist
1547
1548 #
1549 # Example 2: Change uid before executing child
1550 #
1551 if os.getuid() == 0:
1552 p = Popen(["id"], preexec_fn=lambda: os.setuid(100))
1553 p.wait()
1554
1555 #
1556 # Example 3: Connecting several subprocesses
1557 #
1558 print "Looking for 'hda'..."
1559 p1 = Popen(["dmesg"], stdout=PIPE)
1560 p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
1561 print repr(p2.communicate()[0])
1562
1563 #
1564 # Example 4: Catch execution error
1565 #
1566 print
1567 print "Trying a weird file..."
1568 try:
1569 print Popen(["/this/path/does/not/exist"]).communicate()
1570 except OSError, e:
1571 if e.errno == errno.ENOENT:
1572 print "The file didn't exist. I thought so..."
1573 print "Child traceback:"
1574 print e.child_traceback
1575 else:
1576 print "Error", e.errno
1577 else:
1578 print >>sys.stderr, "Gosh. No error."
1579
1580
1581def _demo_windows():
1582 #
1583 # Example 1: Connecting several subprocesses
1584 #
1585 print "Looking for 'PROMPT' in set output..."
1586 p1 = Popen("set", stdout=PIPE, shell=True)
1587 p2 = Popen('find "PROMPT"', stdin=p1.stdout, stdout=PIPE)
1588 print repr(p2.communicate()[0])
1589
1590 #
1591 # Example 2: Simple execution of program
1592 #
1593 print "Executing calc..."
1594 p = Popen("calc")
1595 p.wait()
1596
1597
1598if __name__ == "__main__":
1599 if mswindows:
1600 _demo_windows()
1601 else:
1602 _demo_posix()