blob: 45e49a1db362b2bac3b29e05643a41c8e347711b [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):
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000131 Run command with arguments and return its output as a byte string.
132
133 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.
136
137 The arguments are the same as for the Popen constructor. Example:
138
Gregory P. Smith26576802008-12-05 02:27:01 +0000139 output = subprocess.check_output(["ls", "-l", "/dev/null"])
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000140
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000141Exceptions
142----------
143Exceptions raised in the child process, before the new program has
144started to execute, will be re-raised in the parent. Additionally,
145the exception object will have one extra attribute called
146'child_traceback', which is a string containing traceback information
147from the childs point of view.
148
149The most common exception raised is OSError. This occurs, for
150example, when trying to execute a non-existent file. Applications
151should prepare for OSErrors.
152
153A ValueError will be raised if Popen is called with invalid arguments.
154
Gregory P. Smith26576802008-12-05 02:27:01 +0000155check_call() and check_output() will raise CalledProcessError, if the
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000156called process returns a non-zero return code.
Peter Astrand454f7672005-01-01 09:36:35 +0000157
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000158
159Security
160--------
161Unlike some other popen functions, this implementation will never call
162/bin/sh implicitly. This means that all characters, including shell
163metacharacters, can safely be passed to child processes.
164
165
166Popen objects
167=============
168Instances of the Popen class have the following methods:
169
170poll()
171 Check if child process has terminated. Returns returncode
172 attribute.
173
174wait()
175 Wait for child process to terminate. Returns returncode attribute.
176
177communicate(input=None)
178 Interact with process: Send data to stdin. Read data from stdout
179 and stderr, until end-of-file is reached. Wait for process to
Neal Norwitza186ee22006-12-29 03:01:53 +0000180 terminate. The optional input argument should be a string to be
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000181 sent to the child process, or None, if no data should be sent to
182 the child.
Tim Peterse718f612004-10-12 21:51:32 +0000183
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000184 communicate() returns a tuple (stdout, stderr).
185
186 Note: The data read is buffered in memory, so do not use this
187 method if the data size is large or unlimited.
188
189The following attributes are also available:
190
191stdin
192 If the stdin argument is PIPE, this attribute is a file object
193 that provides input to the child process. Otherwise, it is None.
194
195stdout
196 If the stdout argument is PIPE, this attribute is a file object
197 that provides output from the child process. Otherwise, it is
198 None.
199
200stderr
201 If the stderr argument is PIPE, this attribute is file object that
202 provides error output from the child process. Otherwise, it is
203 None.
204
205pid
206 The process ID of the child process.
207
208returncode
209 The child return code. A None value indicates that the process
210 hasn't terminated yet. A negative value -N indicates that the
211 child was terminated by signal N (UNIX only).
212
213
214Replacing older functions with the subprocess module
215====================================================
216In this section, "a ==> b" means that b can be used as a replacement
217for a.
218
219Note: All functions in this section fail (more or less) silently if
220the executed program cannot be found; this module raises an OSError
221exception.
222
223In the following examples, we assume that the subprocess module is
224imported with "from subprocess import *".
225
226
227Replacing /bin/sh shell backquote
228---------------------------------
229output=`mycmd myarg`
230==>
231output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
232
233
234Replacing shell pipe line
235-------------------------
236output=`dmesg | grep hda`
237==>
238p1 = Popen(["dmesg"], stdout=PIPE)
Peter Astrand6fdf3cb2004-11-30 18:06:42 +0000239p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000240output = p2.communicate()[0]
241
242
243Replacing os.system()
244---------------------
245sts = os.system("mycmd" + " myarg")
246==>
247p = Popen("mycmd" + " myarg", shell=True)
Neal Norwitz84404832006-07-10 00:05:34 +0000248pid, sts = os.waitpid(p.pid, 0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000249
250Note:
251
252* Calling the program through the shell is usually not required.
253
254* It's easier to look at the returncode attribute than the
255 exitstatus.
256
257A more real-world example would look like this:
258
259try:
260 retcode = call("mycmd" + " myarg", shell=True)
261 if retcode < 0:
262 print >>sys.stderr, "Child was terminated by signal", -retcode
263 else:
264 print >>sys.stderr, "Child returned", retcode
265except OSError, e:
266 print >>sys.stderr, "Execution failed:", e
267
268
269Replacing os.spawn*
270-------------------
Tim Peterse718f612004-10-12 21:51:32 +0000271P_NOWAIT example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000272
273pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")
274==>
275pid = Popen(["/bin/mycmd", "myarg"]).pid
276
277
278P_WAIT example:
279
280retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg")
281==>
282retcode = call(["/bin/mycmd", "myarg"])
283
284
Tim Peterse718f612004-10-12 21:51:32 +0000285Vector example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000286
287os.spawnvp(os.P_NOWAIT, path, args)
288==>
289Popen([path] + args[1:])
290
291
Tim Peterse718f612004-10-12 21:51:32 +0000292Environment example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000293
294os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env)
295==>
296Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})
297
298
Tim Peterse718f612004-10-12 21:51:32 +0000299Replacing os.popen*
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000300-------------------
Philip Jenvey8b902042009-09-29 19:10:15 +0000301pipe = os.popen("cmd", mode='r', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000302==>
Philip Jenvey8b902042009-09-29 19:10:15 +0000303pipe = Popen("cmd", shell=True, bufsize=bufsize, stdout=PIPE).stdout
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000304
Philip Jenvey8b902042009-09-29 19:10:15 +0000305pipe = os.popen("cmd", mode='w', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000306==>
Philip Jenvey8b902042009-09-29 19:10:15 +0000307pipe = Popen("cmd", shell=True, bufsize=bufsize, stdin=PIPE).stdin
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000308
309
Philip Jenvey8b902042009-09-29 19:10:15 +0000310(child_stdin, child_stdout) = os.popen2("cmd", mode, bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000311==>
Philip Jenvey8b902042009-09-29 19:10:15 +0000312p = Popen("cmd", shell=True, bufsize=bufsize,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000313 stdin=PIPE, stdout=PIPE, close_fds=True)
314(child_stdin, child_stdout) = (p.stdin, p.stdout)
315
316
317(child_stdin,
318 child_stdout,
Philip Jenvey8b902042009-09-29 19:10:15 +0000319 child_stderr) = os.popen3("cmd", mode, bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000320==>
Philip Jenvey8b902042009-09-29 19:10:15 +0000321p = Popen("cmd", shell=True, bufsize=bufsize,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000322 stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
323(child_stdin,
324 child_stdout,
325 child_stderr) = (p.stdin, p.stdout, p.stderr)
326
327
Philip Jenvey8b902042009-09-29 19:10:15 +0000328(child_stdin, child_stdout_and_stderr) = os.popen4("cmd", mode,
329 bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000330==>
Philip Jenvey8b902042009-09-29 19:10:15 +0000331p = Popen("cmd", shell=True, bufsize=bufsize,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000332 stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
333(child_stdin, child_stdout_and_stderr) = (p.stdin, p.stdout)
334
Philip Jenvey8b902042009-09-29 19:10:15 +0000335On Unix, os.popen2, os.popen3 and os.popen4 also accept a sequence as
336the command to execute, in which case arguments will be passed
337directly to the program without shell intervention. This usage can be
338replaced as follows:
339
340(child_stdin, child_stdout) = os.popen2(["/bin/ls", "-l"], mode,
341 bufsize)
342==>
343p = Popen(["/bin/ls", "-l"], bufsize=bufsize, stdin=PIPE, stdout=PIPE)
344(child_stdin, child_stdout) = (p.stdin, p.stdout)
345
346Return code handling translates as follows:
347
348pipe = os.popen("cmd", 'w')
349...
350rc = pipe.close()
351if rc != None and rc % 256:
352 print "There were some errors"
353==>
354process = Popen("cmd", 'w', shell=True, stdin=PIPE)
355...
356process.stdin.close()
357if process.wait() != 0:
358 print "There were some errors"
359
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000360
361Replacing popen2.*
362------------------
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000363(child_stdout, child_stdin) = popen2.popen2("somestring", bufsize, mode)
364==>
365p = Popen(["somestring"], shell=True, bufsize=bufsize
366 stdin=PIPE, stdout=PIPE, close_fds=True)
367(child_stdout, child_stdin) = (p.stdout, p.stdin)
368
Philip Jenvey8b902042009-09-29 19:10:15 +0000369On Unix, popen2 also accepts a sequence as the command to execute, in
370which case arguments will be passed directly to the program without
371shell intervention. This usage can be replaced as follows:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000372
Philip Jenvey8b902042009-09-29 19:10:15 +0000373(child_stdout, child_stdin) = popen2.popen2(["mycmd", "myarg"], bufsize,
374 mode)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000375==>
376p = Popen(["mycmd", "myarg"], bufsize=bufsize,
377 stdin=PIPE, stdout=PIPE, close_fds=True)
378(child_stdout, child_stdin) = (p.stdout, p.stdin)
379
Neal Norwitzaa87fb62007-05-11 06:23:01 +0000380The popen2.Popen3 and popen2.Popen4 basically works as subprocess.Popen,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000381except that:
382
383* subprocess.Popen raises an exception if the execution fails
384* the capturestderr argument is replaced with the stderr argument.
385* stdin=PIPE and stdout=PIPE must be specified.
386* popen2 closes all filedescriptors by default, but you have to specify
Tim Peterse718f612004-10-12 21:51:32 +0000387 close_fds=True with subprocess.Popen.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000388"""
389
390import sys
391mswindows = (sys.platform == "win32")
392
393import os
Peter Astrandc26516b2005-02-21 08:13:02 +0000394import types
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000395import traceback
Gregory P. Smith87d49792008-01-19 20:57:59 +0000396import gc
Christian Heimese74c8f22008-04-19 02:23:57 +0000397import signal
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000398
Peter Astrand454f7672005-01-01 09:36:35 +0000399# Exception classes used by this module.
Peter Astrand7d1d4362006-07-14 14:04:45 +0000400class CalledProcessError(Exception):
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000401 """This exception is raised when a process run by check_call() or
Gregory P. Smith26576802008-12-05 02:27:01 +0000402 check_output() returns a non-zero exit status.
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000403 The exit status will be stored in the returncode attribute;
Gregory P. Smith26576802008-12-05 02:27:01 +0000404 check_output() will also store the output in the output attribute.
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000405 """
406 def __init__(self, returncode, cmd, output=None):
Peter Astrand7d1d4362006-07-14 14:04:45 +0000407 self.returncode = returncode
408 self.cmd = cmd
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000409 self.output = output
Peter Astrand7d1d4362006-07-14 14:04:45 +0000410 def __str__(self):
411 return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode)
Tim Peters73a9ead2006-07-18 21:55:15 +0000412
Peter Astrand454f7672005-01-01 09:36:35 +0000413
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000414if mswindows:
415 import threading
416 import msvcrt
Fredrik Lundh3e73a012004-10-13 18:19:18 +0000417 if 0: # <-- change this to use pywin32 instead of the _subprocess driver
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000418 import pywintypes
Tim Peterse8374a52004-10-13 03:15:00 +0000419 from win32api import GetStdHandle, STD_INPUT_HANDLE, \
420 STD_OUTPUT_HANDLE, STD_ERROR_HANDLE
421 from win32api import GetCurrentProcess, DuplicateHandle, \
422 GetModuleFileName, GetVersion
Peter Astrandc1d65362004-11-07 14:30:34 +0000423 from win32con import DUPLICATE_SAME_ACCESS, SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000424 from win32pipe import CreatePipe
Tim Peterse8374a52004-10-13 03:15:00 +0000425 from win32process import CreateProcess, STARTUPINFO, \
426 GetExitCodeProcess, STARTF_USESTDHANDLES, \
Peter Astrandc1d65362004-11-07 14:30:34 +0000427 STARTF_USESHOWWINDOW, CREATE_NEW_CONSOLE
Christian Heimese74c8f22008-04-19 02:23:57 +0000428 from win32process import TerminateProcess
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000429 from win32event import WaitForSingleObject, INFINITE, WAIT_OBJECT_0
Fredrik Lundh3e73a012004-10-13 18:19:18 +0000430 else:
431 from _subprocess import *
432 class STARTUPINFO:
433 dwFlags = 0
434 hStdInput = None
435 hStdOutput = None
436 hStdError = None
Georg Brandlad624892006-06-04 22:15:37 +0000437 wShowWindow = 0
Fredrik Lundh3e73a012004-10-13 18:19:18 +0000438 class pywintypes:
439 error = IOError
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000440else:
441 import select
Gregory P. Smithdd7ca242009-07-04 01:49:29 +0000442 _has_poll = hasattr(select, 'poll')
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000443 import errno
444 import fcntl
445 import pickle
446
Amaury Forgeot d'Arcce32eb72009-07-09 22:37:22 +0000447 # When select or poll has indicated that the file is writable,
448 # we can write up to _PIPE_BUF bytes without risk of blocking.
449 # POSIX defines PIPE_BUF as >= 512.
450 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
451
452
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000453__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call",
Gregory P. Smith26576802008-12-05 02:27:01 +0000454 "check_output", "CalledProcessError"]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000455
456try:
457 MAXFD = os.sysconf("SC_OPEN_MAX")
458except:
459 MAXFD = 256
460
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000461_active = []
462
463def _cleanup():
464 for inst in _active[:]:
Gregory P. Smitha36f8fe2008-08-04 00:13:29 +0000465 if inst._internal_poll(_deadstate=sys.maxint) >= 0:
Martin v. Löwis17de8ff2006-04-10 15:55:37 +0000466 try:
467 _active.remove(inst)
468 except ValueError:
469 # This can happen if two threads create a new Popen instance.
470 # It's harmless that it was already removed, so ignore.
471 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000472
473PIPE = -1
474STDOUT = -2
475
476
Peter Astrand5f5e1412004-12-05 20:15:36 +0000477def call(*popenargs, **kwargs):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000478 """Run command with arguments. Wait for command to complete, then
479 return the returncode attribute.
480
481 The arguments are the same as for the Popen constructor. Example:
482
483 retcode = call(["ls", "-l"])
484 """
Peter Astrand5f5e1412004-12-05 20:15:36 +0000485 return Popen(*popenargs, **kwargs).wait()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000486
487
Peter Astrand454f7672005-01-01 09:36:35 +0000488def check_call(*popenargs, **kwargs):
489 """Run command with arguments. Wait for command to complete. If
490 the exit code was zero then return, otherwise raise
491 CalledProcessError. The CalledProcessError object will have the
Peter Astrand7d1d4362006-07-14 14:04:45 +0000492 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000493
494 The arguments are the same as for the Popen constructor. Example:
495
496 check_call(["ls", "-l"])
497 """
498 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000499 if retcode:
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000500 cmd = kwargs.get("args")
501 if cmd is None:
502 cmd = popenargs[0]
Peter Astrand7d1d4362006-07-14 14:04:45 +0000503 raise CalledProcessError(retcode, cmd)
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000504 return 0
505
506
Gregory P. Smith26576802008-12-05 02:27:01 +0000507def check_output(*popenargs, **kwargs):
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000508 """Run command with arguments and return its output as a byte string.
509
510 If the exit code was non-zero it raises a CalledProcessError. The
511 CalledProcessError object will have the return code in the returncode
512 attribute and output in the output attribute.
513
514 The arguments are the same as for the Popen constructor. Example:
515
Gregory P. Smith26576802008-12-05 02:27:01 +0000516 >>> check_output(["ls", "-l", "/dev/null"])
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000517 'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
518
519 The stdout argument is not allowed as it is used internally.
520 To capture standard error in the result, use stderr=subprocess.STDOUT.
521
Gregory P. Smith26576802008-12-05 02:27:01 +0000522 >>> check_output(["/bin/sh", "-c",
Mark Dickinson3e4caeb2009-02-21 20:27:01 +0000523 "ls -l non_existent_file ; exit 0"],
Gregory P. Smith26576802008-12-05 02:27:01 +0000524 stderr=subprocess.STDOUT)
Mark Dickinson3e4caeb2009-02-21 20:27:01 +0000525 'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000526 """
527 if 'stdout' in kwargs:
528 raise ValueError('stdout argument not allowed, it will be overridden.')
Amaury Forgeot d'Arc5fe420e2009-06-18 22:32:50 +0000529 process = Popen(stdout=PIPE, *popenargs, **kwargs)
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000530 output, unused_err = process.communicate()
531 retcode = process.poll()
532 if retcode:
533 cmd = kwargs.get("args")
534 if cmd is None:
535 cmd = popenargs[0]
536 raise CalledProcessError(retcode, cmd, output=output)
537 return output
Peter Astrand454f7672005-01-01 09:36:35 +0000538
539
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000540def list2cmdline(seq):
541 """
542 Translate a sequence of arguments into a command line
543 string, using the same rules as the MS C runtime:
544
545 1) Arguments are delimited by white space, which is either a
546 space or a tab.
547
548 2) A string surrounded by double quotation marks is
549 interpreted as a single argument, regardless of white space
Gregory P. Smith70eb2f92008-01-19 22:49:37 +0000550 or pipe characters contained within. A quoted string can be
551 embedded in an argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000552
553 3) A double quotation mark preceded by a backslash is
554 interpreted as a literal double quotation mark.
555
556 4) Backslashes are interpreted literally, unless they
557 immediately precede a double quotation mark.
558
559 5) If backslashes immediately precede a double quotation mark,
560 every pair of backslashes is interpreted as a literal
561 backslash. If the number of backslashes is odd, the last
562 backslash escapes the next double quotation mark as
563 described in rule 3.
564 """
565
566 # See
567 # http://msdn.microsoft.com/library/en-us/vccelng/htm/progs_12.asp
568 result = []
569 needquote = False
570 for arg in seq:
571 bs_buf = []
572
573 # Add a space to separate this argument from the others
574 if result:
575 result.append(' ')
576
Gregory P. Smith70eb2f92008-01-19 22:49:37 +0000577 needquote = (" " in arg) or ("\t" in arg) or ("|" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000578 if needquote:
579 result.append('"')
580
581 for c in arg:
582 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000583 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000584 bs_buf.append(c)
585 elif c == '"':
Gregory P. Smithe047e6d2008-01-19 20:49:02 +0000586 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000587 result.append('\\' * len(bs_buf)*2)
588 bs_buf = []
589 result.append('\\"')
590 else:
591 # Normal char
592 if bs_buf:
593 result.extend(bs_buf)
594 bs_buf = []
595 result.append(c)
596
Gregory P. Smithe047e6d2008-01-19 20:49:02 +0000597 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000598 if bs_buf:
599 result.extend(bs_buf)
600
601 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000602 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000603 result.append('"')
604
605 return ''.join(result)
606
607
608class Popen(object):
609 def __init__(self, args, bufsize=0, executable=None,
610 stdin=None, stdout=None, stderr=None,
611 preexec_fn=None, close_fds=False, shell=False,
612 cwd=None, env=None, universal_newlines=False,
613 startupinfo=None, creationflags=0):
614 """Create new Popen instance."""
615 _cleanup()
616
Martin v. Löwis17de8ff2006-04-10 15:55:37 +0000617 self._child_created = False
Peter Astrand738131d2004-11-30 21:04:45 +0000618 if not isinstance(bufsize, (int, long)):
619 raise TypeError("bufsize must be an integer")
620
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000621 if mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000622 if preexec_fn is not None:
623 raise ValueError("preexec_fn is not supported on Windows "
624 "platforms")
Peter Astrand81a191b2007-05-26 22:18:20 +0000625 if close_fds and (stdin is not None or stdout is not None or
626 stderr is not None):
Tim Peterse8374a52004-10-13 03:15:00 +0000627 raise ValueError("close_fds is not supported on Windows "
Peter Astrand81a191b2007-05-26 22:18:20 +0000628 "platforms if you redirect stdin/stdout/stderr")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000629 else:
630 # POSIX
Tim Peterse8374a52004-10-13 03:15:00 +0000631 if startupinfo is not None:
632 raise ValueError("startupinfo is only supported on Windows "
633 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000634 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000635 raise ValueError("creationflags is only supported on Windows "
636 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000637
Tim Peterse718f612004-10-12 21:51:32 +0000638 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000639 self.stdout = None
640 self.stderr = None
641 self.pid = None
642 self.returncode = None
643 self.universal_newlines = universal_newlines
644
645 # Input and output objects. The general principle is like
646 # this:
647 #
648 # Parent Child
649 # ------ -----
650 # p2cwrite ---stdin---> p2cread
651 # c2pread <--stdout--- c2pwrite
652 # errread <--stderr--- errwrite
653 #
654 # On POSIX, the child objects are file descriptors. On
655 # Windows, these are Windows file handles. The parent objects
656 # are file descriptors on both platforms. The parent objects
657 # are None when not using PIPEs. The child objects are None
658 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000659
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000660 (p2cread, p2cwrite,
661 c2pread, c2pwrite,
662 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
663
664 self._execute_child(args, executable, preexec_fn, close_fds,
665 cwd, env, universal_newlines,
666 startupinfo, creationflags, shell,
667 p2cread, p2cwrite,
668 c2pread, c2pwrite,
669 errread, errwrite)
670
Peter Astrand5f9c6ae2007-02-06 15:37:50 +0000671 if mswindows:
Hirokazu Yamamotoeacbbdf2009-03-03 22:18:14 +0000672 if p2cwrite is not None:
673 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
674 if c2pread is not None:
675 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
676 if errread is not None:
677 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Peter Astrand5f9c6ae2007-02-06 15:37:50 +0000678
Peter Astrandf5400032007-02-02 19:06:36 +0000679 if p2cwrite is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000680 self.stdin = os.fdopen(p2cwrite, 'wb', bufsize)
Peter Astrandf5400032007-02-02 19:06:36 +0000681 if c2pread is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000682 if universal_newlines:
683 self.stdout = os.fdopen(c2pread, 'rU', bufsize)
684 else:
685 self.stdout = os.fdopen(c2pread, 'rb', bufsize)
Peter Astrandf5400032007-02-02 19:06:36 +0000686 if errread is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000687 if universal_newlines:
688 self.stderr = os.fdopen(errread, 'rU', bufsize)
689 else:
690 self.stderr = os.fdopen(errread, 'rb', bufsize)
Tim Peterse718f612004-10-12 21:51:32 +0000691
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000692
693 def _translate_newlines(self, data):
694 data = data.replace("\r\n", "\n")
695 data = data.replace("\r", "\n")
696 return data
697
Martin v. Löwis17de8ff2006-04-10 15:55:37 +0000698
Georg Brandl24522982007-04-21 20:35:38 +0000699 def __del__(self, sys=sys):
Martin v. Löwis17de8ff2006-04-10 15:55:37 +0000700 if not self._child_created:
701 # We didn't get to successfully create a child process.
702 return
703 # In case the child hasn't been waited on, check if it's done.
Gregory P. Smitha36f8fe2008-08-04 00:13:29 +0000704 self._internal_poll(_deadstate=sys.maxint)
Georg Brandl13cf38c2006-07-20 16:28:39 +0000705 if self.returncode is None and _active is not None:
Martin v. Löwis17de8ff2006-04-10 15:55:37 +0000706 # Child is still running, keep us alive until we can wait on it.
707 _active.append(self)
708
709
Peter Astrand23109f02005-03-03 20:28:59 +0000710 def communicate(self, input=None):
711 """Interact with process: Send data to stdin. Read data from
712 stdout and stderr, until end-of-file is reached. Wait for
713 process to terminate. The optional input argument should be a
714 string to be sent to the child process, or None, if no data
715 should be sent to the child.
Tim Peterseba28be2005-03-28 01:08:02 +0000716
Peter Astrand23109f02005-03-03 20:28:59 +0000717 communicate() returns a tuple (stdout, stderr)."""
718
719 # Optimization: If we are only using one pipe, or no pipe at
720 # all, using select() or threads is unnecessary.
721 if [self.stdin, self.stdout, self.stderr].count(None) >= 2:
Tim Peterseba28be2005-03-28 01:08:02 +0000722 stdout = None
723 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000724 if self.stdin:
725 if input:
726 self.stdin.write(input)
727 self.stdin.close()
728 elif self.stdout:
729 stdout = self.stdout.read()
Gregory P. Smith4036fd42008-05-26 20:22:14 +0000730 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000731 elif self.stderr:
732 stderr = self.stderr.read()
Gregory P. Smith4036fd42008-05-26 20:22:14 +0000733 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000734 self.wait()
735 return (stdout, stderr)
Tim Peterseba28be2005-03-28 01:08:02 +0000736
Peter Astrand23109f02005-03-03 20:28:59 +0000737 return self._communicate(input)
738
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000739
Gregory P. Smitha36f8fe2008-08-04 00:13:29 +0000740 def poll(self):
741 return self._internal_poll()
742
743
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000744 if mswindows:
745 #
746 # Windows methods
747 #
748 def _get_handles(self, stdin, stdout, stderr):
Amaury Forgeot d'Arc8318afa2009-07-10 16:47:42 +0000749 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000750 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
751 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000752 if stdin is None and stdout is None and stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000753 return (None, None, None, None, None, None)
Tim Peterse718f612004-10-12 21:51:32 +0000754
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000755 p2cread, p2cwrite = None, None
756 c2pread, c2pwrite = None, None
757 errread, errwrite = None, None
758
Peter Astrandd38ddf42005-02-10 08:32:50 +0000759 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000760 p2cread = GetStdHandle(STD_INPUT_HANDLE)
Hirokazu Yamamotoeacbbdf2009-03-03 22:18:14 +0000761 if p2cread is None:
762 p2cread, _ = CreatePipe(None, 0)
763 elif stdin == PIPE:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000764 p2cread, p2cwrite = CreatePipe(None, 0)
Peter Astrandd38ddf42005-02-10 08:32:50 +0000765 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000766 p2cread = msvcrt.get_osfhandle(stdin)
767 else:
768 # Assuming file-like object
769 p2cread = msvcrt.get_osfhandle(stdin.fileno())
770 p2cread = self._make_inheritable(p2cread)
771
Peter Astrandd38ddf42005-02-10 08:32:50 +0000772 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000773 c2pwrite = GetStdHandle(STD_OUTPUT_HANDLE)
Hirokazu Yamamotoeacbbdf2009-03-03 22:18:14 +0000774 if c2pwrite is None:
775 _, c2pwrite = CreatePipe(None, 0)
776 elif stdout == PIPE:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000777 c2pread, c2pwrite = CreatePipe(None, 0)
Peter Astrandd38ddf42005-02-10 08:32:50 +0000778 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000779 c2pwrite = msvcrt.get_osfhandle(stdout)
780 else:
781 # Assuming file-like object
782 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
783 c2pwrite = self._make_inheritable(c2pwrite)
784
Peter Astrandd38ddf42005-02-10 08:32:50 +0000785 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000786 errwrite = GetStdHandle(STD_ERROR_HANDLE)
Hirokazu Yamamotoeacbbdf2009-03-03 22:18:14 +0000787 if errwrite is None:
788 _, errwrite = CreatePipe(None, 0)
789 elif stderr == PIPE:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000790 errread, errwrite = CreatePipe(None, 0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000791 elif stderr == STDOUT:
792 errwrite = c2pwrite
Peter Astrandd38ddf42005-02-10 08:32:50 +0000793 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000794 errwrite = msvcrt.get_osfhandle(stderr)
795 else:
796 # Assuming file-like object
797 errwrite = msvcrt.get_osfhandle(stderr.fileno())
798 errwrite = self._make_inheritable(errwrite)
799
800 return (p2cread, p2cwrite,
801 c2pread, c2pwrite,
802 errread, errwrite)
803
804
805 def _make_inheritable(self, handle):
806 """Return a duplicate of handle, which is inheritable"""
807 return DuplicateHandle(GetCurrentProcess(), handle,
808 GetCurrentProcess(), 0, 1,
809 DUPLICATE_SAME_ACCESS)
810
811
812 def _find_w9xpopen(self):
813 """Find and return absolut path to w9xpopen.exe"""
Tim Peterse8374a52004-10-13 03:15:00 +0000814 w9xpopen = os.path.join(os.path.dirname(GetModuleFileName(0)),
815 "w9xpopen.exe")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000816 if not os.path.exists(w9xpopen):
817 # Eeek - file-not-found - possibly an embedding
818 # situation - see if we can locate it in sys.exec_prefix
Tim Peterse8374a52004-10-13 03:15:00 +0000819 w9xpopen = os.path.join(os.path.dirname(sys.exec_prefix),
820 "w9xpopen.exe")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000821 if not os.path.exists(w9xpopen):
Tim Peterse8374a52004-10-13 03:15:00 +0000822 raise RuntimeError("Cannot locate w9xpopen.exe, which is "
823 "needed for Popen to work with your "
824 "shell or platform.")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000825 return w9xpopen
826
Tim Peterse718f612004-10-12 21:51:32 +0000827
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000828 def _execute_child(self, args, executable, preexec_fn, close_fds,
829 cwd, env, universal_newlines,
830 startupinfo, creationflags, shell,
831 p2cread, p2cwrite,
832 c2pread, c2pwrite,
833 errread, errwrite):
834 """Execute program (MS Windows version)"""
835
Peter Astrandc26516b2005-02-21 08:13:02 +0000836 if not isinstance(args, types.StringTypes):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000837 args = list2cmdline(args)
838
Peter Astrandc1d65362004-11-07 14:30:34 +0000839 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +0000840 if startupinfo is None:
Georg Brandlad624892006-06-04 22:15:37 +0000841 startupinfo = STARTUPINFO()
842 if None not in (p2cread, c2pwrite, errwrite):
Peter Astrandc1d65362004-11-07 14:30:34 +0000843 startupinfo.dwFlags |= STARTF_USESTDHANDLES
844 startupinfo.hStdInput = p2cread
845 startupinfo.hStdOutput = c2pwrite
846 startupinfo.hStdError = errwrite
847
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000848 if shell:
Georg Brandlad624892006-06-04 22:15:37 +0000849 startupinfo.dwFlags |= STARTF_USESHOWWINDOW
850 startupinfo.wShowWindow = SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000851 comspec = os.environ.get("COMSPEC", "cmd.exe")
852 args = comspec + " /c " + args
Tim Peterse8374a52004-10-13 03:15:00 +0000853 if (GetVersion() >= 0x80000000L or
854 os.path.basename(comspec).lower() == "command.com"):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000855 # Win9x, or using command.com on NT. We need to
856 # use the w9xpopen intermediate program. For more
857 # information, see KB Q150956
858 # (http://web.archive.org/web/20011105084002/http://support.microsoft.com/support/kb/articles/Q150/9/56.asp)
859 w9xpopen = self._find_w9xpopen()
860 args = '"%s" %s' % (w9xpopen, args)
861 # Not passing CREATE_NEW_CONSOLE has been known to
862 # cause random failures on win9x. Specifically a
863 # dialog: "Your program accessed mem currently in
864 # use at xxx" and a hopeful warning about the
865 # stability of your system. Cost is Ctrl+C wont
866 # kill children.
867 creationflags |= CREATE_NEW_CONSOLE
868
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000869 # Start the process
870 try:
871 hp, ht, pid, tid = CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +0000872 # no special security
873 None, None,
Peter Astrand81a191b2007-05-26 22:18:20 +0000874 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +0000875 creationflags,
876 env,
877 cwd,
878 startupinfo)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000879 except pywintypes.error, e:
880 # Translate pywintypes.error to WindowsError, which is
881 # a subclass of OSError. FIXME: We should really
882 # translate errno using _sys_errlist (or simliar), but
883 # how can this be done from Python?
884 raise WindowsError(*e.args)
885
886 # Retain the process handle, but close the thread handle
Martin v. Löwis17de8ff2006-04-10 15:55:37 +0000887 self._child_created = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000888 self._handle = hp
889 self.pid = pid
890 ht.Close()
891
Andrew M. Kuchling51ee66e2004-10-12 16:38:42 +0000892 # Child is launched. Close the parent's copy of those pipe
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000893 # handles that only the child should have open. You need
894 # to make sure that no handles to the write end of the
895 # output pipe are maintained in this process or else the
896 # pipe will not close when the child process exits and the
897 # ReadFile will hang.
Peter Astrandd38ddf42005-02-10 08:32:50 +0000898 if p2cread is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000899 p2cread.Close()
Peter Astrandd38ddf42005-02-10 08:32:50 +0000900 if c2pwrite is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000901 c2pwrite.Close()
Peter Astrandd38ddf42005-02-10 08:32:50 +0000902 if errwrite is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000903 errwrite.Close()
904
Tim Peterse718f612004-10-12 21:51:32 +0000905
Gregory P. Smitha36f8fe2008-08-04 00:13:29 +0000906 def _internal_poll(self, _deadstate=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000907 """Check if child process has terminated. Returns returncode
908 attribute."""
Peter Astrandd38ddf42005-02-10 08:32:50 +0000909 if self.returncode is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000910 if WaitForSingleObject(self._handle, 0) == WAIT_OBJECT_0:
911 self.returncode = GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000912 return self.returncode
913
914
915 def wait(self):
916 """Wait for child process to terminate. Returns returncode
917 attribute."""
Peter Astrandd38ddf42005-02-10 08:32:50 +0000918 if self.returncode is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000919 obj = WaitForSingleObject(self._handle, INFINITE)
920 self.returncode = GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000921 return self.returncode
922
923
924 def _readerthread(self, fh, buffer):
925 buffer.append(fh.read())
926
927
Peter Astrand23109f02005-03-03 20:28:59 +0000928 def _communicate(self, input):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000929 stdout = None # Return
930 stderr = None # Return
931
932 if self.stdout:
933 stdout = []
Tim Peterse8374a52004-10-13 03:15:00 +0000934 stdout_thread = threading.Thread(target=self._readerthread,
935 args=(self.stdout, stdout))
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000936 stdout_thread.setDaemon(True)
937 stdout_thread.start()
938 if self.stderr:
939 stderr = []
Tim Peterse8374a52004-10-13 03:15:00 +0000940 stderr_thread = threading.Thread(target=self._readerthread,
941 args=(self.stderr, stderr))
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000942 stderr_thread.setDaemon(True)
943 stderr_thread.start()
944
945 if self.stdin:
Peter Astrandd38ddf42005-02-10 08:32:50 +0000946 if input is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000947 self.stdin.write(input)
948 self.stdin.close()
949
950 if self.stdout:
951 stdout_thread.join()
952 if self.stderr:
953 stderr_thread.join()
954
955 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +0000956 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000957 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +0000958 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000959 stderr = stderr[0]
960
961 # Translate newlines, if requested. We cannot let the file
962 # object do the translation: It is based on stdio, which is
963 # impossible to combine with select (unless forcing no
964 # buffering).
Neal Norwitza6d01ce2006-05-02 06:23:22 +0000965 if self.universal_newlines and hasattr(file, 'newlines'):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000966 if stdout:
967 stdout = self._translate_newlines(stdout)
968 if stderr:
969 stderr = self._translate_newlines(stderr)
970
971 self.wait()
972 return (stdout, stderr)
973
Christian Heimese74c8f22008-04-19 02:23:57 +0000974 def send_signal(self, sig):
975 """Send a signal to the process
976 """
977 if sig == signal.SIGTERM:
978 self.terminate()
979 else:
980 raise ValueError("Only SIGTERM is supported on Windows")
981
982 def terminate(self):
983 """Terminates the process
984 """
985 TerminateProcess(self._handle, 1)
986
987 kill = terminate
988
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000989 else:
990 #
991 # POSIX methods
992 #
993 def _get_handles(self, stdin, stdout, stderr):
Amaury Forgeot d'Arc8318afa2009-07-10 16:47:42 +0000994 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000995 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
996 """
997 p2cread, p2cwrite = None, None
998 c2pread, c2pwrite = None, None
999 errread, errwrite = None, None
1000
Peter Astrandd38ddf42005-02-10 08:32:50 +00001001 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001002 pass
1003 elif stdin == PIPE:
1004 p2cread, p2cwrite = os.pipe()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001005 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001006 p2cread = stdin
1007 else:
1008 # Assuming file-like object
1009 p2cread = stdin.fileno()
1010
Peter Astrandd38ddf42005-02-10 08:32:50 +00001011 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001012 pass
1013 elif stdout == PIPE:
1014 c2pread, c2pwrite = os.pipe()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001015 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001016 c2pwrite = stdout
1017 else:
1018 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001019 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001020
Peter Astrandd38ddf42005-02-10 08:32:50 +00001021 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001022 pass
1023 elif stderr == PIPE:
1024 errread, errwrite = os.pipe()
1025 elif stderr == STDOUT:
1026 errwrite = c2pwrite
Peter Astrandd38ddf42005-02-10 08:32:50 +00001027 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001028 errwrite = stderr
1029 else:
1030 # Assuming file-like object
1031 errwrite = stderr.fileno()
1032
1033 return (p2cread, p2cwrite,
1034 c2pread, c2pwrite,
1035 errread, errwrite)
1036
1037
1038 def _set_cloexec_flag(self, fd):
1039 try:
1040 cloexec_flag = fcntl.FD_CLOEXEC
1041 except AttributeError:
1042 cloexec_flag = 1
1043
1044 old = fcntl.fcntl(fd, fcntl.F_GETFD)
1045 fcntl.fcntl(fd, fcntl.F_SETFD, old | cloexec_flag)
1046
1047
1048 def _close_fds(self, but):
Amaury Forgeot d'Arc5fe420e2009-06-18 22:32:50 +00001049 if hasattr(os, 'closerange'):
1050 os.closerange(3, but)
1051 os.closerange(but + 1, MAXFD)
1052 else:
1053 for i in xrange(3, MAXFD):
1054 if i == but:
1055 continue
1056 try:
1057 os.close(i)
1058 except:
1059 pass
Tim Peterse718f612004-10-12 21:51:32 +00001060
1061
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001062 def _execute_child(self, args, executable, preexec_fn, close_fds,
1063 cwd, env, universal_newlines,
1064 startupinfo, creationflags, shell,
1065 p2cread, p2cwrite,
1066 c2pread, c2pwrite,
1067 errread, errwrite):
1068 """Execute program (POSIX version)"""
1069
Peter Astrandc26516b2005-02-21 08:13:02 +00001070 if isinstance(args, types.StringTypes):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001071 args = [args]
Georg Brandl6c0e1e82006-10-29 09:05:04 +00001072 else:
1073 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001074
1075 if shell:
1076 args = ["/bin/sh", "-c"] + args
1077
Peter Astrandd38ddf42005-02-10 08:32:50 +00001078 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001079 executable = args[0]
1080
1081 # For transferring possible exec failure from child to parent
1082 # The first char specifies the exception type: 0 means
1083 # OSError, 1 means some other error.
1084 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith87d49792008-01-19 20:57:59 +00001085 try:
Gregory P. Smith92ffc632008-01-19 22:23:56 +00001086 try:
Facundo Batista8c826b72009-06-19 18:02:28 +00001087 self._set_cloexec_flag(errpipe_write)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001088
Facundo Batista8c826b72009-06-19 18:02:28 +00001089 gc_was_enabled = gc.isenabled()
1090 # Disable gc to avoid bug where gc -> file_dealloc ->
1091 # write to stderr -> hang. http://bugs.python.org/issue1336
1092 gc.disable()
1093 try:
1094 self.pid = os.fork()
Georg Brandl3e8b8692009-07-16 21:47:51 +00001095 except:
Facundo Batista8c826b72009-06-19 18:02:28 +00001096 if gc_was_enabled:
1097 gc.enable()
Georg Brandl3e8b8692009-07-16 21:47:51 +00001098 raise
Facundo Batista8c826b72009-06-19 18:02:28 +00001099 self._child_created = True
1100 if self.pid == 0:
1101 # Child
1102 try:
1103 # Close parent's pipe ends
1104 if p2cwrite is not None:
1105 os.close(p2cwrite)
1106 if c2pread is not None:
1107 os.close(c2pread)
1108 if errread is not None:
1109 os.close(errread)
1110 os.close(errpipe_read)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001111
Facundo Batista8c826b72009-06-19 18:02:28 +00001112 # Dup fds for child
1113 if p2cread is not None:
1114 os.dup2(p2cread, 0)
1115 if c2pwrite is not None:
1116 os.dup2(c2pwrite, 1)
1117 if errwrite is not None:
1118 os.dup2(errwrite, 2)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001119
Facundo Batista8c826b72009-06-19 18:02:28 +00001120 # Close pipe fds. Make sure we don't close the same
1121 # fd more than once, or standard fds.
1122 if p2cread is not None and p2cread not in (0,):
1123 os.close(p2cread)
1124 if c2pwrite is not None and c2pwrite not in (p2cread, 1):
1125 os.close(c2pwrite)
1126 if errwrite is not None and errwrite not in (p2cread, c2pwrite, 2):
1127 os.close(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001128
Facundo Batista8c826b72009-06-19 18:02:28 +00001129 # Close all other fds, if asked for
1130 if close_fds:
1131 self._close_fds(but=errpipe_write)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001132
Facundo Batista8c826b72009-06-19 18:02:28 +00001133 if cwd is not None:
1134 os.chdir(cwd)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001135
Facundo Batista8c826b72009-06-19 18:02:28 +00001136 if preexec_fn:
1137 preexec_fn()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001138
Facundo Batista8c826b72009-06-19 18:02:28 +00001139 if env is None:
1140 os.execvp(executable, args)
1141 else:
1142 os.execvpe(executable, args, env)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001143
Facundo Batista8c826b72009-06-19 18:02:28 +00001144 except:
1145 exc_type, exc_value, tb = sys.exc_info()
1146 # Save the traceback and attach it to the exception object
1147 exc_lines = traceback.format_exception(exc_type,
1148 exc_value,
1149 tb)
1150 exc_value.child_traceback = ''.join(exc_lines)
1151 os.write(errpipe_write, pickle.dumps(exc_value))
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001152
Facundo Batista8c826b72009-06-19 18:02:28 +00001153 # This exitcode won't be reported to applications, so it
1154 # really doesn't matter what we return.
1155 os._exit(255)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001156
Facundo Batista8c826b72009-06-19 18:02:28 +00001157 # Parent
1158 if gc_was_enabled:
1159 gc.enable()
1160 finally:
1161 # be sure the FD is closed no matter what
1162 os.close(errpipe_write)
1163
1164 if p2cread is not None and p2cwrite is not None:
1165 os.close(p2cread)
1166 if c2pwrite is not None and c2pread is not None:
1167 os.close(c2pwrite)
1168 if errwrite is not None and errread is not None:
1169 os.close(errwrite)
1170
1171 # Wait for exec to fail or succeed; possibly raising exception
1172 data = os.read(errpipe_read, 1048576) # Exception limited to 1M
1173 finally:
1174 # be sure the FD is closed no matter what
1175 os.close(errpipe_read)
1176
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001177 if data != "":
Peter Astrandf791d7a2005-01-01 09:38:57 +00001178 os.waitpid(self.pid, 0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001179 child_exception = pickle.loads(data)
Georg Brandlf3715d22009-02-14 17:01:36 +00001180 for fd in (p2cwrite, c2pread, errread):
1181 if fd is not None:
1182 os.close(fd)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001183 raise child_exception
1184
1185
1186 def _handle_exitstatus(self, sts):
1187 if os.WIFSIGNALED(sts):
1188 self.returncode = -os.WTERMSIG(sts)
1189 elif os.WIFEXITED(sts):
1190 self.returncode = os.WEXITSTATUS(sts)
1191 else:
1192 # Should never happen
1193 raise RuntimeError("Unknown child exit status!")
1194
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001195
Gregory P. Smitha36f8fe2008-08-04 00:13:29 +00001196 def _internal_poll(self, _deadstate=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001197 """Check if child process has terminated. Returns returncode
1198 attribute."""
Peter Astrandd38ddf42005-02-10 08:32:50 +00001199 if self.returncode is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001200 try:
1201 pid, sts = os.waitpid(self.pid, os.WNOHANG)
1202 if pid == self.pid:
1203 self._handle_exitstatus(sts)
1204 except os.error:
Martin v. Löwis17de8ff2006-04-10 15:55:37 +00001205 if _deadstate is not None:
1206 self.returncode = _deadstate
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001207 return self.returncode
1208
1209
1210 def wait(self):
1211 """Wait for child process to terminate. Returns returncode
1212 attribute."""
Peter Astrandd38ddf42005-02-10 08:32:50 +00001213 if self.returncode is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001214 pid, sts = os.waitpid(self.pid, 0)
1215 self._handle_exitstatus(sts)
1216 return self.returncode
1217
1218
Peter Astrand23109f02005-03-03 20:28:59 +00001219 def _communicate(self, input):
Gregory P. Smithdd7ca242009-07-04 01:49:29 +00001220 if self.stdin:
1221 # Flush stdio buffer. This might block, if the user has
1222 # been writing to .stdin in an uncontrolled fashion.
1223 self.stdin.flush()
1224 if not input:
1225 self.stdin.close()
1226
1227 if _has_poll:
1228 stdout, stderr = self._communicate_with_poll(input)
1229 else:
1230 stdout, stderr = self._communicate_with_select(input)
1231
1232 # All data exchanged. Translate lists into strings.
1233 if stdout is not None:
1234 stdout = ''.join(stdout)
1235 if stderr is not None:
1236 stderr = ''.join(stderr)
1237
1238 # Translate newlines, if requested. We cannot let the file
1239 # object do the translation: It is based on stdio, which is
1240 # impossible to combine with select (unless forcing no
1241 # buffering).
1242 if self.universal_newlines and hasattr(file, 'newlines'):
1243 if stdout:
1244 stdout = self._translate_newlines(stdout)
1245 if stderr:
1246 stderr = self._translate_newlines(stderr)
1247
1248 self.wait()
1249 return (stdout, stderr)
1250
1251
1252 def _communicate_with_poll(self, input):
1253 stdout = None # Return
1254 stderr = None # Return
1255 fd2file = {}
1256 fd2output = {}
1257
1258 poller = select.poll()
1259 def register_and_append(file_obj, eventmask):
1260 poller.register(file_obj.fileno(), eventmask)
1261 fd2file[file_obj.fileno()] = file_obj
1262
1263 def close_unregister_and_remove(fd):
1264 poller.unregister(fd)
1265 fd2file[fd].close()
1266 fd2file.pop(fd)
1267
1268 if self.stdin and input:
1269 register_and_append(self.stdin, select.POLLOUT)
1270
1271 select_POLLIN_POLLPRI = select.POLLIN | select.POLLPRI
1272 if self.stdout:
1273 register_and_append(self.stdout, select_POLLIN_POLLPRI)
1274 fd2output[self.stdout.fileno()] = stdout = []
1275 if self.stderr:
1276 register_and_append(self.stderr, select_POLLIN_POLLPRI)
1277 fd2output[self.stderr.fileno()] = stderr = []
1278
1279 input_offset = 0
1280 while fd2file:
1281 try:
1282 ready = poller.poll()
1283 except select.error, e:
1284 if e.args[0] == errno.EINTR:
1285 continue
1286 raise
1287
1288 for fd, mode in ready:
1289 if mode & select.POLLOUT:
1290 chunk = input[input_offset : input_offset + _PIPE_BUF]
1291 input_offset += os.write(fd, chunk)
1292 if input_offset >= len(input):
1293 close_unregister_and_remove(fd)
1294 elif mode & select_POLLIN_POLLPRI:
1295 data = os.read(fd, 4096)
1296 if not data:
1297 close_unregister_and_remove(fd)
1298 fd2output[fd].append(data)
1299 else:
1300 # Ignore hang up or errors.
1301 close_unregister_and_remove(fd)
1302
1303 return (stdout, stderr)
1304
1305
1306 def _communicate_with_select(self, input):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001307 read_set = []
1308 write_set = []
1309 stdout = None # Return
1310 stderr = None # Return
1311
Gregory P. Smithdd7ca242009-07-04 01:49:29 +00001312 if self.stdin and input:
1313 write_set.append(self.stdin)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001314 if self.stdout:
1315 read_set.append(self.stdout)
Tim Peterse718f612004-10-12 21:51:32 +00001316 stdout = []
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001317 if self.stderr:
1318 read_set.append(self.stderr)
1319 stderr = []
1320
Peter Astrand1812f8c2007-01-07 14:34:16 +00001321 input_offset = 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001322 while read_set or write_set:
Gregory P. Smithf4140642008-07-06 07:16:40 +00001323 try:
1324 rlist, wlist, xlist = select.select(read_set, write_set, [])
1325 except select.error, e:
1326 if e.args[0] == errno.EINTR:
1327 continue
1328 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001329
1330 if self.stdin in wlist:
Gregory P. Smithdd7ca242009-07-04 01:49:29 +00001331 chunk = input[input_offset : input_offset + _PIPE_BUF]
Brett Cannon03446c42008-08-08 04:19:32 +00001332 bytes_written = os.write(self.stdin.fileno(), chunk)
Tim Petersf733abb2007-01-30 03:03:46 +00001333 input_offset += bytes_written
Peter Astrand1812f8c2007-01-07 14:34:16 +00001334 if input_offset >= len(input):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001335 self.stdin.close()
1336 write_set.remove(self.stdin)
1337
1338 if self.stdout in rlist:
1339 data = os.read(self.stdout.fileno(), 1024)
1340 if data == "":
1341 self.stdout.close()
1342 read_set.remove(self.stdout)
1343 stdout.append(data)
1344
1345 if self.stderr in rlist:
1346 data = os.read(self.stderr.fileno(), 1024)
1347 if data == "":
1348 self.stderr.close()
1349 read_set.remove(self.stderr)
1350 stderr.append(data)
1351
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001352 return (stdout, stderr)
1353
Gregory P. Smithdd7ca242009-07-04 01:49:29 +00001354
Christian Heimese74c8f22008-04-19 02:23:57 +00001355 def send_signal(self, sig):
1356 """Send a signal to the process
1357 """
1358 os.kill(self.pid, sig)
1359
1360 def terminate(self):
1361 """Terminate the process with SIGTERM
1362 """
1363 self.send_signal(signal.SIGTERM)
1364
1365 def kill(self):
1366 """Kill the process with SIGKILL
1367 """
1368 self.send_signal(signal.SIGKILL)
1369
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001370
1371def _demo_posix():
1372 #
1373 # Example 1: Simple redirection: Get process list
1374 #
1375 plist = Popen(["ps"], stdout=PIPE).communicate()[0]
1376 print "Process list:"
1377 print plist
1378
1379 #
1380 # Example 2: Change uid before executing child
1381 #
1382 if os.getuid() == 0:
1383 p = Popen(["id"], preexec_fn=lambda: os.setuid(100))
1384 p.wait()
1385
1386 #
1387 # Example 3: Connecting several subprocesses
1388 #
1389 print "Looking for 'hda'..."
1390 p1 = Popen(["dmesg"], stdout=PIPE)
1391 p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
1392 print repr(p2.communicate()[0])
1393
1394 #
1395 # Example 4: Catch execution error
1396 #
1397 print
1398 print "Trying a weird file..."
1399 try:
1400 print Popen(["/this/path/does/not/exist"]).communicate()
1401 except OSError, e:
1402 if e.errno == errno.ENOENT:
1403 print "The file didn't exist. I thought so..."
1404 print "Child traceback:"
1405 print e.child_traceback
1406 else:
1407 print "Error", e.errno
1408 else:
1409 print >>sys.stderr, "Gosh. No error."
1410
1411
1412def _demo_windows():
1413 #
1414 # Example 1: Connecting several subprocesses
1415 #
1416 print "Looking for 'PROMPT' in set output..."
1417 p1 = Popen("set", stdout=PIPE, shell=True)
1418 p2 = Popen('find "PROMPT"', stdin=p1.stdout, stdout=PIPE)
1419 print repr(p2.communicate()[0])
1420
1421 #
1422 # Example 2: Simple execution of program
1423 #
1424 print "Executing calc..."
1425 p = Popen("calc")
1426 p.wait()
1427
1428
1429if __name__ == "__main__":
1430 if mswindows:
1431 _demo_windows()
1432 else:
1433 _demo_posix()