blob: 30cbfcb684f3654884f39b057681d0ad45ab1610 [file] [log] [blame]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001# subprocess - Subprocesses with accessible I/O streams
2#
Tim Peterse718f612004-10-12 21:51:32 +00003# For more information about this module, see PEP 324.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00004#
Peter Astrand3a708df2005-09-23 17:37:29 +00005# Copyright (c) 2003-2005 by Peter Astrand <astrand@lysator.liu.se>
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00006#
Peter Astrand69bf13f2005-02-14 08:56:32 +00007# Licensed to PSF under a Contributor Agreement.
Peter Astrand3a708df2005-09-23 17:37:29 +00008# See http://www.python.org/2.4/license for licensing details.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00009
Raymond Hettinger837dd932004-10-17 16:36:53 +000010r"""subprocess - Subprocesses with accessible I/O streams
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000011
Fredrik Lundh15aaacc2004-10-17 14:47:05 +000012This module allows you to spawn processes, connect to their
13input/output/error pipes, and obtain their return codes. This module
14intends to replace several other, older modules and functions, like:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000015
16os.system
17os.spawn*
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000018
19Information about how the subprocess module can be used to replace these
20modules and functions can be found below.
21
22
23
24Using the subprocess module
25===========================
26This module defines one class called Popen:
27
28class Popen(args, bufsize=0, executable=None,
29 stdin=None, stdout=None, stderr=None,
30 preexec_fn=None, close_fds=False, shell=False,
31 cwd=None, env=None, universal_newlines=False,
32 startupinfo=None, creationflags=0):
33
34
35Arguments are:
36
37args should be a string, or a sequence of program arguments. The
38program to execute is normally the first item in the args sequence or
39string, but can be explicitly set by using the executable argument.
40
41On UNIX, with shell=False (default): In this case, the Popen class
42uses os.execvp() to execute the child program. args should normally
43be a sequence. A string will be treated as a sequence with the string
44as the only item (the program to execute).
45
46On UNIX, with shell=True: If args is a string, it specifies the
47command string to execute through the shell. If args is a sequence,
48the first item specifies the command string, and any additional items
49will be treated as additional shell arguments.
50
51On Windows: the Popen class uses CreateProcess() to execute the child
52program, which operates on strings. If args is a sequence, it will be
53converted to a string using the list2cmdline method. Please note that
54not all MS Windows applications interpret the command line the same
55way: The list2cmdline is designed for applications using the same
56rules as the MS C runtime.
57
58bufsize, if given, has the same meaning as the corresponding argument
59to the built-in open() function: 0 means unbuffered, 1 means line
60buffered, any other positive value means use a buffer of
61(approximately) that size. A negative bufsize means to use the system
62default, which usually means fully buffered. The default value for
63bufsize is 0 (unbuffered).
64
65stdin, stdout and stderr specify the executed programs' standard
66input, standard output and standard error file handles, respectively.
67Valid values are PIPE, an existing file descriptor (a positive
68integer), an existing file object, and None. PIPE indicates that a
69new pipe to the child should be created. With None, no redirection
70will occur; the child's file handles will be inherited from the
71parent. Additionally, stderr can be STDOUT, which indicates that the
72stderr data from the applications should be captured into the same
73file handle as for stdout.
74
75If preexec_fn is set to a callable object, this object will be called
76in the child process just before the child is executed.
77
78If close_fds is true, all file descriptors except 0, 1 and 2 will be
79closed before the child process is executed.
80
81if shell is true, the specified command will be executed through the
82shell.
83
84If cwd is not None, the current directory will be changed to cwd
85before the child is executed.
86
87If env is not None, it defines the environment variables for the new
88process.
89
90If universal_newlines is true, the file objects stdout and stderr are
91opened as a text files, but lines may be terminated by any of '\n',
92the Unix end-of-line convention, '\r', the Macintosh convention or
93'\r\n', the Windows convention. All of these external representations
94are seen as '\n' by the Python program. Note: This feature is only
95available if Python is built with universal newline support (the
96default). Also, the newlines attribute of the file objects stdout,
97stdin and stderr are not updated by the communicate() method.
98
99The startupinfo and creationflags, if given, will be passed to the
100underlying CreateProcess() function. They can specify things such as
101appearance of the main window and priority for the new process.
102(Windows only)
103
104
Georg Brandlf9734072008-12-07 15:30:06 +0000105This module also defines some shortcut functions:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000106
Peter Astrand5f5e1412004-12-05 20:15:36 +0000107call(*popenargs, **kwargs):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000108 Run command with arguments. Wait for command to complete, then
109 return the returncode attribute.
110
111 The arguments are the same as for the Popen constructor. Example:
112
113 retcode = call(["ls", "-l"])
114
Peter Astrand454f7672005-01-01 09:36:35 +0000115check_call(*popenargs, **kwargs):
116 Run command with arguments. Wait for command to complete. If the
117 exit code was zero then return, otherwise raise
118 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000119 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000120
121 The arguments are the same as for the Popen constructor. Example:
122
123 check_call(["ls", "-l"])
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000124
Brett Cannona23810f2008-05-26 19:04:21 +0000125getstatusoutput(cmd):
126 Return (status, output) of executing cmd in a shell.
127
128 Execute the string 'cmd' in a shell with os.popen() and return a 2-tuple
129 (status, output). cmd is actually run as '{ cmd ; } 2>&1', so that the
130 returned output will contain output or error messages. A trailing newline
131 is stripped from the output. The exit status for the command can be
132 interpreted according to the rules for the C function wait(). Example:
133
134 >>> import subprocess
135 >>> subprocess.getstatusoutput('ls /bin/ls')
136 (0, '/bin/ls')
137 >>> subprocess.getstatusoutput('cat /bin/junk')
138 (256, 'cat: /bin/junk: No such file or directory')
139 >>> subprocess.getstatusoutput('/bin/junk')
140 (256, 'sh: /bin/junk: not found')
141
142getoutput(cmd):
143 Return output (stdout or stderr) of executing cmd in a shell.
144
145 Like getstatusoutput(), except the exit status is ignored and the return
146 value is a string containing the command's output. Example:
147
148 >>> import subprocess
149 >>> subprocess.getoutput('ls /bin/ls')
150 '/bin/ls'
151
Georg Brandlf9734072008-12-07 15:30:06 +0000152check_output(*popenargs, **kwargs):
153 Run command with arguments and return its output as a byte string.
154
155 If the exit code was non-zero it raises a CalledProcessError. The
156 CalledProcessError object will have the return code in the returncode
157 attribute and output in the output attribute.
158
159 The arguments are the same as for the Popen constructor. Example:
160
161 output = subprocess.check_output(["ls", "-l", "/dev/null"])
162
Brett Cannona23810f2008-05-26 19:04:21 +0000163
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000164Exceptions
165----------
166Exceptions raised in the child process, before the new program has
167started to execute, will be re-raised in the parent. Additionally,
168the exception object will have one extra attribute called
169'child_traceback', which is a string containing traceback information
170from the childs point of view.
171
172The most common exception raised is OSError. This occurs, for
173example, when trying to execute a non-existent file. Applications
174should prepare for OSErrors.
175
176A ValueError will be raised if Popen is called with invalid arguments.
177
Georg Brandlf9734072008-12-07 15:30:06 +0000178check_call() and check_output() will raise CalledProcessError, if the
179called process returns a non-zero return code.
Peter Astrand454f7672005-01-01 09:36:35 +0000180
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000181
182Security
183--------
184Unlike some other popen functions, this implementation will never call
185/bin/sh implicitly. This means that all characters, including shell
186metacharacters, can safely be passed to child processes.
187
188
189Popen objects
190=============
191Instances of the Popen class have the following methods:
192
193poll()
194 Check if child process has terminated. Returns returncode
195 attribute.
196
197wait()
198 Wait for child process to terminate. Returns returncode attribute.
199
200communicate(input=None)
201 Interact with process: Send data to stdin. Read data from stdout
202 and stderr, until end-of-file is reached. Wait for process to
Thomas Wouters902d6eb2007-01-09 23:18:33 +0000203 terminate. The optional input argument should be a string to be
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000204 sent to the child process, or None, if no data should be sent to
205 the child.
Tim Peterse718f612004-10-12 21:51:32 +0000206
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000207 communicate() returns a tuple (stdout, stderr).
208
209 Note: The data read is buffered in memory, so do not use this
210 method if the data size is large or unlimited.
211
212The following attributes are also available:
213
214stdin
215 If the stdin argument is PIPE, this attribute is a file object
216 that provides input to the child process. Otherwise, it is None.
217
218stdout
219 If the stdout argument is PIPE, this attribute is a file object
220 that provides output from the child process. Otherwise, it is
221 None.
222
223stderr
224 If the stderr argument is PIPE, this attribute is file object that
225 provides error output from the child process. Otherwise, it is
226 None.
227
228pid
229 The process ID of the child process.
230
231returncode
232 The child return code. A None value indicates that the process
233 hasn't terminated yet. A negative value -N indicates that the
234 child was terminated by signal N (UNIX only).
235
236
237Replacing older functions with the subprocess module
238====================================================
239In this section, "a ==> b" means that b can be used as a replacement
240for a.
241
242Note: All functions in this section fail (more or less) silently if
243the executed program cannot be found; this module raises an OSError
244exception.
245
246In the following examples, we assume that the subprocess module is
247imported with "from subprocess import *".
248
249
250Replacing /bin/sh shell backquote
251---------------------------------
252output=`mycmd myarg`
253==>
254output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
255
256
257Replacing shell pipe line
258-------------------------
259output=`dmesg | grep hda`
260==>
261p1 = Popen(["dmesg"], stdout=PIPE)
Peter Astrand6fdf3cb2004-11-30 18:06:42 +0000262p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000263output = p2.communicate()[0]
264
265
266Replacing os.system()
267---------------------
268sts = os.system("mycmd" + " myarg")
269==>
270p = Popen("mycmd" + " myarg", shell=True)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000271pid, sts = os.waitpid(p.pid, 0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000272
273Note:
274
275* Calling the program through the shell is usually not required.
276
277* It's easier to look at the returncode attribute than the
278 exitstatus.
279
280A more real-world example would look like this:
281
282try:
283 retcode = call("mycmd" + " myarg", shell=True)
284 if retcode < 0:
Guido van Rossumc2f93dc2007-05-24 00:50:02 +0000285 print("Child was terminated by signal", -retcode, file=sys.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000286 else:
Guido van Rossumc2f93dc2007-05-24 00:50:02 +0000287 print("Child returned", retcode, file=sys.stderr)
288except OSError as e:
289 print("Execution failed:", e, file=sys.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000290
291
292Replacing os.spawn*
293-------------------
Tim Peterse718f612004-10-12 21:51:32 +0000294P_NOWAIT example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000295
296pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")
297==>
298pid = Popen(["/bin/mycmd", "myarg"]).pid
299
300
301P_WAIT example:
302
303retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg")
304==>
305retcode = call(["/bin/mycmd", "myarg"])
306
307
Tim Peterse718f612004-10-12 21:51:32 +0000308Vector example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000309
310os.spawnvp(os.P_NOWAIT, path, args)
311==>
312Popen([path] + args[1:])
313
314
Tim Peterse718f612004-10-12 21:51:32 +0000315Environment example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000316
317os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env)
318==>
319Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000320"""
321
322import sys
323mswindows = (sys.platform == "win32")
324
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000325import io
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000326import os
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000327import traceback
Christian Heimesfdab48e2008-01-20 09:06:41 +0000328import gc
Christian Heimesa342c012008-04-20 21:01:16 +0000329import signal
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000330
Peter Astrand454f7672005-01-01 09:36:35 +0000331# Exception classes used by this module.
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000332class CalledProcessError(Exception):
Georg Brandlf9734072008-12-07 15:30:06 +0000333 """This exception is raised when a process run by check_call() or
334 check_output() returns a non-zero exit status.
335 The exit status will be stored in the returncode attribute;
336 check_output() will also store the output in the output attribute.
337 """
338 def __init__(self, returncode, cmd, output=None):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000339 self.returncode = returncode
340 self.cmd = cmd
Georg Brandlf9734072008-12-07 15:30:06 +0000341 self.output = output
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000342 def __str__(self):
343 return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode)
344
Peter Astrand454f7672005-01-01 09:36:35 +0000345
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000346if mswindows:
347 import threading
348 import msvcrt
Fredrik Lundh3e73a012004-10-13 18:19:18 +0000349 if 0: # <-- change this to use pywin32 instead of the _subprocess driver
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000350 import pywintypes
Tim Peterse8374a52004-10-13 03:15:00 +0000351 from win32api import GetStdHandle, STD_INPUT_HANDLE, \
352 STD_OUTPUT_HANDLE, STD_ERROR_HANDLE
353 from win32api import GetCurrentProcess, DuplicateHandle, \
354 GetModuleFileName, GetVersion
Peter Astrandc1d65362004-11-07 14:30:34 +0000355 from win32con import DUPLICATE_SAME_ACCESS, SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000356 from win32pipe import CreatePipe
Tim Peterse8374a52004-10-13 03:15:00 +0000357 from win32process import CreateProcess, STARTUPINFO, \
358 GetExitCodeProcess, STARTF_USESTDHANDLES, \
Peter Astrandc1d65362004-11-07 14:30:34 +0000359 STARTF_USESHOWWINDOW, CREATE_NEW_CONSOLE
Christian Heimesa342c012008-04-20 21:01:16 +0000360 from win32process import TerminateProcess
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000361 from win32event import WaitForSingleObject, INFINITE, WAIT_OBJECT_0
Fredrik Lundh3e73a012004-10-13 18:19:18 +0000362 else:
363 from _subprocess import *
364 class STARTUPINFO:
365 dwFlags = 0
366 hStdInput = None
367 hStdOutput = None
368 hStdError = None
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000369 wShowWindow = 0
Fredrik Lundh3e73a012004-10-13 18:19:18 +0000370 class pywintypes:
371 error = IOError
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000372else:
373 import select
Georg Brandlae83d6e2009-08-13 09:04:31 +0000374 _has_poll = hasattr(select, 'poll')
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000375 import errno
376 import fcntl
377 import pickle
378
Gregory P. Smith10d29522009-08-13 18:33:30 +0000379 # When select or poll has indicated that the file is writable,
380 # we can write up to _PIPE_BUF bytes without risk of blocking.
381 # POSIX defines PIPE_BUF as >= 512.
382 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
383
384
Brett Cannona23810f2008-05-26 19:04:21 +0000385__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
Georg Brandlf9734072008-12-07 15:30:06 +0000386 "getoutput", "check_output", "CalledProcessError"]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000387
388try:
389 MAXFD = os.sysconf("SC_OPEN_MAX")
390except:
391 MAXFD = 256
392
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000393_active = []
394
395def _cleanup():
396 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000397 res = inst._internal_poll(_deadstate=sys.maxsize)
Guido van Rossumb5d47ef2006-08-24 02:27:45 +0000398 if res is not None and res >= 0:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000399 try:
400 _active.remove(inst)
401 except ValueError:
402 # This can happen if two threads create a new Popen instance.
403 # It's harmless that it was already removed, so ignore.
404 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000405
406PIPE = -1
407STDOUT = -2
408
409
Peter Astrand5f5e1412004-12-05 20:15:36 +0000410def call(*popenargs, **kwargs):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000411 """Run command with arguments. Wait for command to complete, then
412 return the returncode attribute.
413
414 The arguments are the same as for the Popen constructor. Example:
415
416 retcode = call(["ls", "-l"])
417 """
Peter Astrand5f5e1412004-12-05 20:15:36 +0000418 return Popen(*popenargs, **kwargs).wait()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000419
420
Peter Astrand454f7672005-01-01 09:36:35 +0000421def check_call(*popenargs, **kwargs):
422 """Run command with arguments. Wait for command to complete. If
423 the exit code was zero then return, otherwise raise
424 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000425 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000426
427 The arguments are the same as for the Popen constructor. Example:
428
429 check_call(["ls", "-l"])
430 """
431 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000432 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000433 cmd = kwargs.get("args")
434 if cmd is None:
435 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000436 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000437 return 0
438
439
440def check_output(*popenargs, **kwargs):
441 """Run command with arguments and return its output as a byte string.
442
443 If the exit code was non-zero it raises a CalledProcessError. The
444 CalledProcessError object will have the return code in the returncode
445 attribute and output in the output attribute.
446
447 The arguments are the same as for the Popen constructor. Example:
448
449 >>> check_output(["ls", "-l", "/dev/null"])
450 'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
451
452 The stdout argument is not allowed as it is used internally.
453 To capture standard error in the result, use stderr=subprocess.STDOUT.
454
455 >>> check_output(["/bin/sh", "-c",
Mark Dickinson934896d2009-02-21 20:59:32 +0000456 "ls -l non_existent_file ; exit 0"],
Georg Brandlf9734072008-12-07 15:30:06 +0000457 stderr=subprocess.STDOUT)
Mark Dickinson934896d2009-02-21 20:59:32 +0000458 'ls: non_existent_file: No such file or directory\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000459 """
460 if 'stdout' in kwargs:
461 raise ValueError('stdout argument not allowed, it will be overridden.')
462 process = Popen(*popenargs, stdout=PIPE, **kwargs)
463 output, unused_err = process.communicate()
464 retcode = process.poll()
465 if retcode:
466 cmd = kwargs.get("args")
467 if cmd is None:
468 cmd = popenargs[0]
469 raise CalledProcessError(retcode, cmd, output=output)
470 return output
Peter Astrand454f7672005-01-01 09:36:35 +0000471
472
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000473def list2cmdline(seq):
474 """
475 Translate a sequence of arguments into a command line
476 string, using the same rules as the MS C runtime:
477
478 1) Arguments are delimited by white space, which is either a
479 space or a tab.
480
481 2) A string surrounded by double quotation marks is
482 interpreted as a single argument, regardless of white space
Christian Heimesfdab48e2008-01-20 09:06:41 +0000483 or pipe characters contained within. A quoted string can be
484 embedded in an argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000485
486 3) A double quotation mark preceded by a backslash is
487 interpreted as a literal double quotation mark.
488
489 4) Backslashes are interpreted literally, unless they
490 immediately precede a double quotation mark.
491
492 5) If backslashes immediately precede a double quotation mark,
493 every pair of backslashes is interpreted as a literal
494 backslash. If the number of backslashes is odd, the last
495 backslash escapes the next double quotation mark as
496 described in rule 3.
497 """
498
499 # See
Eric Smith536d2992009-11-09 15:24:55 +0000500 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
501 # or search http://msdn.microsoft.com for
502 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000503 result = []
504 needquote = False
505 for arg in seq:
506 bs_buf = []
507
508 # Add a space to separate this argument from the others
509 if result:
510 result.append(' ')
511
Christian Heimesfdab48e2008-01-20 09:06:41 +0000512 needquote = (" " in arg) or ("\t" in arg) or ("|" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000513 if needquote:
514 result.append('"')
515
516 for c in arg:
517 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000518 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000519 bs_buf.append(c)
520 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000521 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000522 result.append('\\' * len(bs_buf)*2)
523 bs_buf = []
524 result.append('\\"')
525 else:
526 # Normal char
527 if bs_buf:
528 result.extend(bs_buf)
529 bs_buf = []
530 result.append(c)
531
Christian Heimesfdab48e2008-01-20 09:06:41 +0000532 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000533 if bs_buf:
534 result.extend(bs_buf)
535
536 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000537 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000538 result.append('"')
539
540 return ''.join(result)
541
542
Brett Cannona23810f2008-05-26 19:04:21 +0000543# Various tools for executing commands and looking at their output and status.
544#
545# NB This only works (and is only relevant) for UNIX.
546
547def getstatusoutput(cmd):
548 """Return (status, output) of executing cmd in a shell.
549
550 Execute the string 'cmd' in a shell with os.popen() and return a 2-tuple
551 (status, output). cmd is actually run as '{ cmd ; } 2>&1', so that the
552 returned output will contain output or error messages. A trailing newline
553 is stripped from the output. The exit status for the command can be
554 interpreted according to the rules for the C function wait(). Example:
555
556 >>> import subprocess
557 >>> subprocess.getstatusoutput('ls /bin/ls')
558 (0, '/bin/ls')
559 >>> subprocess.getstatusoutput('cat /bin/junk')
560 (256, 'cat: /bin/junk: No such file or directory')
561 >>> subprocess.getstatusoutput('/bin/junk')
562 (256, 'sh: /bin/junk: not found')
563 """
564 pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r')
565 text = pipe.read()
566 sts = pipe.close()
567 if sts is None: sts = 0
568 if text[-1:] == '\n': text = text[:-1]
569 return sts, text
570
571
572def getoutput(cmd):
573 """Return output (stdout or stderr) of executing cmd in a shell.
574
575 Like getstatusoutput(), except the exit status is ignored and the return
576 value is a string containing the command's output. Example:
577
578 >>> import subprocess
579 >>> subprocess.getoutput('ls /bin/ls')
580 '/bin/ls'
581 """
582 return getstatusoutput(cmd)[1]
583
584
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000585class Popen(object):
586 def __init__(self, args, bufsize=0, executable=None,
587 stdin=None, stdout=None, stderr=None,
588 preexec_fn=None, close_fds=False, shell=False,
589 cwd=None, env=None, universal_newlines=False,
590 startupinfo=None, creationflags=0):
591 """Create new Popen instance."""
592 _cleanup()
593
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000594 self._child_created = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000595 if bufsize is None:
596 bufsize = 0 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000597 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000598 raise TypeError("bufsize must be an integer")
599
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000600 if mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000601 if preexec_fn is not None:
602 raise ValueError("preexec_fn is not supported on Windows "
603 "platforms")
Guido van Rossume7ba4952007-06-06 23:52:48 +0000604 if close_fds and (stdin is not None or stdout is not None or
605 stderr is not None):
Tim Peterse8374a52004-10-13 03:15:00 +0000606 raise ValueError("close_fds is not supported on Windows "
Guido van Rossume7ba4952007-06-06 23:52:48 +0000607 "platforms if you redirect stdin/stdout/stderr")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000608 else:
609 # POSIX
Tim Peterse8374a52004-10-13 03:15:00 +0000610 if startupinfo is not None:
611 raise ValueError("startupinfo is only supported on Windows "
612 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000613 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000614 raise ValueError("creationflags is only supported on Windows "
615 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000616
Tim Peterse718f612004-10-12 21:51:32 +0000617 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000618 self.stdout = None
619 self.stderr = None
620 self.pid = None
621 self.returncode = None
622 self.universal_newlines = universal_newlines
623
624 # Input and output objects. The general principle is like
625 # this:
626 #
627 # Parent Child
628 # ------ -----
629 # p2cwrite ---stdin---> p2cread
630 # c2pread <--stdout--- c2pwrite
631 # errread <--stderr--- errwrite
632 #
633 # On POSIX, the child objects are file descriptors. On
634 # Windows, these are Windows file handles. The parent objects
635 # are file descriptors on both platforms. The parent objects
636 # are None when not using PIPEs. The child objects are None
637 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000638
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000639 (p2cread, p2cwrite,
640 c2pread, c2pwrite,
641 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
642
643 self._execute_child(args, executable, preexec_fn, close_fds,
644 cwd, env, universal_newlines,
645 startupinfo, creationflags, shell,
646 p2cread, p2cwrite,
647 c2pread, c2pwrite,
648 errread, errwrite)
649
Thomas Wouterscf297e42007-02-23 15:07:44 +0000650 if mswindows:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000651 if p2cwrite is not None:
652 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
653 if c2pread is not None:
654 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
655 if errread is not None:
656 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000657
Guido van Rossumc2f93dc2007-05-24 00:50:02 +0000658 if bufsize == 0:
659 bufsize = 1 # Nearly unbuffered (XXX for now)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000660 if p2cwrite is not None:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000661 self.stdin = io.open(p2cwrite, 'wb', bufsize)
662 if self.universal_newlines:
663 self.stdin = io.TextIOWrapper(self.stdin)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000664 if c2pread is not None:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000665 self.stdout = io.open(c2pread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000666 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000667 self.stdout = io.TextIOWrapper(self.stdout)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000668 if errread is not None:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000669 self.stderr = io.open(errread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000670 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000671 self.stderr = io.TextIOWrapper(self.stderr)
Tim Peterse718f612004-10-12 21:51:32 +0000672
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000673
Guido van Rossum98297ee2007-11-06 21:34:58 +0000674 def _translate_newlines(self, data, encoding):
675 data = data.replace(b"\r\n", b"\n").replace(b"\r", b"\n")
676 return data.decode(encoding)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000677
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000678
Guido van Rossumd8faa362007-04-27 19:54:29 +0000679 def __del__(self, sys=sys):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000680 if not self._child_created:
681 # We didn't get to successfully create a child process.
682 return
683 # In case the child hasn't been waited on, check if it's done.
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000684 self._internal_poll(_deadstate=sys.maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000685 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000686 # Child is still running, keep us alive until we can wait on it.
687 _active.append(self)
688
689
Peter Astrand23109f02005-03-03 20:28:59 +0000690 def communicate(self, input=None):
691 """Interact with process: Send data to stdin. Read data from
692 stdout and stderr, until end-of-file is reached. Wait for
693 process to terminate. The optional input argument should be a
694 string to be sent to the child process, or None, if no data
695 should be sent to the child.
Tim Peterseba28be2005-03-28 01:08:02 +0000696
Peter Astrand23109f02005-03-03 20:28:59 +0000697 communicate() returns a tuple (stdout, stderr)."""
698
699 # Optimization: If we are only using one pipe, or no pipe at
700 # all, using select() or threads is unnecessary.
701 if [self.stdin, self.stdout, self.stderr].count(None) >= 2:
Tim Peterseba28be2005-03-28 01:08:02 +0000702 stdout = None
703 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000704 if self.stdin:
705 if input:
706 self.stdin.write(input)
707 self.stdin.close()
708 elif self.stdout:
709 stdout = self.stdout.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000710 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000711 elif self.stderr:
712 stderr = self.stderr.read()
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000713 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000714 self.wait()
715 return (stdout, stderr)
Tim Peterseba28be2005-03-28 01:08:02 +0000716
Peter Astrand23109f02005-03-03 20:28:59 +0000717 return self._communicate(input)
718
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000719
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000720 def poll(self):
721 return self._internal_poll()
722
723
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000724 if mswindows:
725 #
726 # Windows methods
727 #
728 def _get_handles(self, stdin, stdout, stderr):
Georg Brandla85ee5c2009-08-13 12:13:42 +0000729 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000730 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
731 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000732 if stdin is None and stdout is None and stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000733 return (None, None, None, None, None, None)
Tim Peterse718f612004-10-12 21:51:32 +0000734
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000735 p2cread, p2cwrite = None, None
736 c2pread, c2pwrite = None, None
737 errread, errwrite = None, None
738
Peter Astrandd38ddf42005-02-10 08:32:50 +0000739 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000740 p2cread = GetStdHandle(STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000741 if p2cread is None:
742 p2cread, _ = CreatePipe(None, 0)
743 elif stdin == PIPE:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000744 p2cread, p2cwrite = CreatePipe(None, 0)
Peter Astrandd38ddf42005-02-10 08:32:50 +0000745 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000746 p2cread = msvcrt.get_osfhandle(stdin)
747 else:
748 # Assuming file-like object
749 p2cread = msvcrt.get_osfhandle(stdin.fileno())
750 p2cread = self._make_inheritable(p2cread)
751
Peter Astrandd38ddf42005-02-10 08:32:50 +0000752 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000753 c2pwrite = GetStdHandle(STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000754 if c2pwrite is None:
755 _, c2pwrite = CreatePipe(None, 0)
756 elif stdout == PIPE:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000757 c2pread, c2pwrite = CreatePipe(None, 0)
Peter Astrandd38ddf42005-02-10 08:32:50 +0000758 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000759 c2pwrite = msvcrt.get_osfhandle(stdout)
760 else:
761 # Assuming file-like object
762 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
763 c2pwrite = self._make_inheritable(c2pwrite)
764
Peter Astrandd38ddf42005-02-10 08:32:50 +0000765 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000766 errwrite = GetStdHandle(STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000767 if errwrite is None:
768 _, errwrite = CreatePipe(None, 0)
769 elif stderr == PIPE:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000770 errread, errwrite = CreatePipe(None, 0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000771 elif stderr == STDOUT:
772 errwrite = c2pwrite
Peter Astrandd38ddf42005-02-10 08:32:50 +0000773 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000774 errwrite = msvcrt.get_osfhandle(stderr)
775 else:
776 # Assuming file-like object
777 errwrite = msvcrt.get_osfhandle(stderr.fileno())
778 errwrite = self._make_inheritable(errwrite)
779
780 return (p2cread, p2cwrite,
781 c2pread, c2pwrite,
782 errread, errwrite)
783
784
785 def _make_inheritable(self, handle):
786 """Return a duplicate of handle, which is inheritable"""
787 return DuplicateHandle(GetCurrentProcess(), handle,
788 GetCurrentProcess(), 0, 1,
789 DUPLICATE_SAME_ACCESS)
790
791
792 def _find_w9xpopen(self):
793 """Find and return absolut path to w9xpopen.exe"""
Tim Peterse8374a52004-10-13 03:15:00 +0000794 w9xpopen = os.path.join(os.path.dirname(GetModuleFileName(0)),
795 "w9xpopen.exe")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000796 if not os.path.exists(w9xpopen):
797 # Eeek - file-not-found - possibly an embedding
798 # situation - see if we can locate it in sys.exec_prefix
Tim Peterse8374a52004-10-13 03:15:00 +0000799 w9xpopen = os.path.join(os.path.dirname(sys.exec_prefix),
800 "w9xpopen.exe")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000801 if not os.path.exists(w9xpopen):
Tim Peterse8374a52004-10-13 03:15:00 +0000802 raise RuntimeError("Cannot locate w9xpopen.exe, which is "
803 "needed for Popen to work with your "
804 "shell or platform.")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000805 return w9xpopen
806
Tim Peterse718f612004-10-12 21:51:32 +0000807
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000808 def _execute_child(self, args, executable, preexec_fn, close_fds,
809 cwd, env, universal_newlines,
810 startupinfo, creationflags, shell,
811 p2cread, p2cwrite,
812 c2pread, c2pwrite,
813 errread, errwrite):
814 """Execute program (MS Windows version)"""
815
Guido van Rossum3172c5d2007-10-16 18:12:55 +0000816 if not isinstance(args, str):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000817 args = list2cmdline(args)
818
Peter Astrandc1d65362004-11-07 14:30:34 +0000819 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +0000820 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000821 startupinfo = STARTUPINFO()
822 if None not in (p2cread, c2pwrite, errwrite):
Peter Astrandc1d65362004-11-07 14:30:34 +0000823 startupinfo.dwFlags |= STARTF_USESTDHANDLES
824 startupinfo.hStdInput = p2cread
825 startupinfo.hStdOutput = c2pwrite
826 startupinfo.hStdError = errwrite
827
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000828 if shell:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +0000829 startupinfo.dwFlags |= STARTF_USESHOWWINDOW
830 startupinfo.wShowWindow = SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000831 comspec = os.environ.get("COMSPEC", "cmd.exe")
832 args = comspec + " /c " + args
Guido van Rossume2a383d2007-01-15 16:59:06 +0000833 if (GetVersion() >= 0x80000000 or
Tim Peterse8374a52004-10-13 03:15:00 +0000834 os.path.basename(comspec).lower() == "command.com"):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000835 # Win9x, or using command.com on NT. We need to
836 # use the w9xpopen intermediate program. For more
837 # information, see KB Q150956
838 # (http://web.archive.org/web/20011105084002/http://support.microsoft.com/support/kb/articles/Q150/9/56.asp)
839 w9xpopen = self._find_w9xpopen()
840 args = '"%s" %s' % (w9xpopen, args)
841 # Not passing CREATE_NEW_CONSOLE has been known to
842 # cause random failures on win9x. Specifically a
843 # dialog: "Your program accessed mem currently in
844 # use at xxx" and a hopeful warning about the
Mark Dickinson934896d2009-02-21 20:59:32 +0000845 # stability of your system. Cost is Ctrl+C won't
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000846 # kill children.
847 creationflags |= CREATE_NEW_CONSOLE
848
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000849 # Start the process
850 try:
851 hp, ht, pid, tid = CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +0000852 # no special security
853 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +0000854 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +0000855 creationflags,
856 env,
857 cwd,
858 startupinfo)
Guido van Rossumb940e112007-01-10 16:19:56 +0000859 except pywintypes.error as e:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000860 # Translate pywintypes.error to WindowsError, which is
861 # a subclass of OSError. FIXME: We should really
862 # translate errno using _sys_errlist (or simliar), but
863 # how can this be done from Python?
864 raise WindowsError(*e.args)
865
866 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000867 self._child_created = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000868 self._handle = hp
869 self.pid = pid
870 ht.Close()
871
Andrew M. Kuchling51ee66e2004-10-12 16:38:42 +0000872 # Child is launched. Close the parent's copy of those pipe
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000873 # handles that only the child should have open. You need
874 # to make sure that no handles to the write end of the
875 # output pipe are maintained in this process or else the
876 # pipe will not close when the child process exits and the
877 # ReadFile will hang.
Peter Astrandd38ddf42005-02-10 08:32:50 +0000878 if p2cread is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000879 p2cread.Close()
Peter Astrandd38ddf42005-02-10 08:32:50 +0000880 if c2pwrite is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000881 c2pwrite.Close()
Peter Astrandd38ddf42005-02-10 08:32:50 +0000882 if errwrite is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000883 errwrite.Close()
884
Tim Peterse718f612004-10-12 21:51:32 +0000885
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000886 def _internal_poll(self, _deadstate=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000887 """Check if child process has terminated. Returns returncode
888 attribute."""
Peter Astrandd38ddf42005-02-10 08:32:50 +0000889 if self.returncode is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000890 if WaitForSingleObject(self._handle, 0) == WAIT_OBJECT_0:
891 self.returncode = GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000892 return self.returncode
893
894
895 def wait(self):
896 """Wait for child process to terminate. Returns returncode
897 attribute."""
Peter Astrandd38ddf42005-02-10 08:32:50 +0000898 if self.returncode is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000899 obj = WaitForSingleObject(self._handle, INFINITE)
900 self.returncode = GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000901 return self.returncode
902
903
904 def _readerthread(self, fh, buffer):
905 buffer.append(fh.read())
906
907
Peter Astrand23109f02005-03-03 20:28:59 +0000908 def _communicate(self, input):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000909 stdout = None # Return
910 stderr = None # Return
911
912 if self.stdout:
913 stdout = []
Tim Peterse8374a52004-10-13 03:15:00 +0000914 stdout_thread = threading.Thread(target=self._readerthread,
915 args=(self.stdout, stdout))
Benjamin Peterson632e0362008-08-18 19:08:51 +0000916 stdout_thread.daemon = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000917 stdout_thread.start()
918 if self.stderr:
919 stderr = []
Tim Peterse8374a52004-10-13 03:15:00 +0000920 stderr_thread = threading.Thread(target=self._readerthread,
921 args=(self.stderr, stderr))
Benjamin Peterson632e0362008-08-18 19:08:51 +0000922 stderr_thread.daemon = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000923 stderr_thread.start()
924
925 if self.stdin:
Peter Astrandd38ddf42005-02-10 08:32:50 +0000926 if input is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000927 self.stdin.write(input)
928 self.stdin.close()
929
930 if self.stdout:
931 stdout_thread.join()
932 if self.stderr:
933 stderr_thread.join()
934
935 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +0000936 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000937 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +0000938 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000939 stderr = stderr[0]
940
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000941 self.wait()
942 return (stdout, stderr)
943
Christian Heimesa342c012008-04-20 21:01:16 +0000944 def send_signal(self, sig):
945 """Send a signal to the process
946 """
947 if sig == signal.SIGTERM:
948 self.terminate()
949 else:
950 raise ValueError("Only SIGTERM is supported on Windows")
951
952 def terminate(self):
953 """Terminates the process
954 """
955 TerminateProcess(self._handle, 1)
956
957 kill = terminate
958
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000959 else:
960 #
961 # POSIX methods
962 #
963 def _get_handles(self, stdin, stdout, stderr):
Georg Brandla85ee5c2009-08-13 12:13:42 +0000964 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000965 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
966 """
967 p2cread, p2cwrite = None, None
968 c2pread, c2pwrite = None, None
969 errread, errwrite = None, None
970
Peter Astrandd38ddf42005-02-10 08:32:50 +0000971 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000972 pass
973 elif stdin == PIPE:
974 p2cread, p2cwrite = os.pipe()
Peter Astrandd38ddf42005-02-10 08:32:50 +0000975 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000976 p2cread = stdin
977 else:
978 # Assuming file-like object
979 p2cread = stdin.fileno()
980
Peter Astrandd38ddf42005-02-10 08:32:50 +0000981 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000982 pass
983 elif stdout == PIPE:
984 c2pread, c2pwrite = os.pipe()
Peter Astrandd38ddf42005-02-10 08:32:50 +0000985 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000986 c2pwrite = stdout
987 else:
988 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +0000989 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000990
Peter Astrandd38ddf42005-02-10 08:32:50 +0000991 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000992 pass
993 elif stderr == PIPE:
994 errread, errwrite = os.pipe()
995 elif stderr == STDOUT:
996 errwrite = c2pwrite
Peter Astrandd38ddf42005-02-10 08:32:50 +0000997 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000998 errwrite = stderr
999 else:
1000 # Assuming file-like object
1001 errwrite = stderr.fileno()
1002
1003 return (p2cread, p2cwrite,
1004 c2pread, c2pwrite,
1005 errread, errwrite)
1006
1007
1008 def _set_cloexec_flag(self, fd):
1009 try:
1010 cloexec_flag = fcntl.FD_CLOEXEC
1011 except AttributeError:
1012 cloexec_flag = 1
1013
1014 old = fcntl.fcntl(fd, fcntl.F_GETFD)
1015 fcntl.fcntl(fd, fcntl.F_SETFD, old | cloexec_flag)
1016
1017
1018 def _close_fds(self, but):
Christian Heimesfdab48e2008-01-20 09:06:41 +00001019 os.closerange(3, but)
1020 os.closerange(but + 1, MAXFD)
Tim Peterse718f612004-10-12 21:51:32 +00001021
1022
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001023 def _execute_child(self, args, executable, preexec_fn, close_fds,
1024 cwd, env, universal_newlines,
1025 startupinfo, creationflags, shell,
1026 p2cread, p2cwrite,
1027 c2pread, c2pwrite,
1028 errread, errwrite):
1029 """Execute program (POSIX version)"""
1030
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001031 if isinstance(args, str):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001032 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001033 else:
1034 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001035
1036 if shell:
1037 args = ["/bin/sh", "-c"] + args
1038
Peter Astrandd38ddf42005-02-10 08:32:50 +00001039 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001040 executable = args[0]
1041
1042 # For transferring possible exec failure from child to parent
1043 # The first char specifies the exception type: 0 means
1044 # OSError, 1 means some other error.
1045 errpipe_read, errpipe_write = os.pipe()
Christian Heimesfdab48e2008-01-20 09:06:41 +00001046 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001047 try:
Facundo Batista10706e22009-06-19 20:34:30 +00001048 self._set_cloexec_flag(errpipe_write)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001049
Facundo Batista10706e22009-06-19 20:34:30 +00001050 gc_was_enabled = gc.isenabled()
1051 # Disable gc to avoid bug where gc -> file_dealloc ->
1052 # write to stderr -> hang. http://bugs.python.org/issue1336
1053 gc.disable()
1054 try:
1055 self.pid = os.fork()
1056 except:
1057 if gc_was_enabled:
1058 gc.enable()
1059 raise
1060 self._child_created = True
1061 if self.pid == 0:
1062 # Child
1063 try:
1064 # Close parent's pipe ends
1065 if p2cwrite is not None:
1066 os.close(p2cwrite)
1067 if c2pread is not None:
1068 os.close(c2pread)
1069 if errread is not None:
1070 os.close(errread)
1071 os.close(errpipe_read)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001072
Facundo Batista10706e22009-06-19 20:34:30 +00001073 # Dup fds for child
1074 if p2cread is not None:
1075 os.dup2(p2cread, 0)
1076 if c2pwrite is not None:
1077 os.dup2(c2pwrite, 1)
1078 if errwrite is not None:
1079 os.dup2(errwrite, 2)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001080
Facundo Batista10706e22009-06-19 20:34:30 +00001081 # Close pipe fds. Make sure we don't close the
1082 # same fd more than once, or standard fds.
1083 if p2cread is not None and p2cread not in (0,):
1084 os.close(p2cread)
1085 if c2pwrite is not None and \
1086 c2pwrite not in (p2cread, 1):
1087 os.close(c2pwrite)
1088 if (errwrite is not None and
1089 errwrite not in (p2cread, c2pwrite, 2)):
1090 os.close(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001091
Facundo Batista10706e22009-06-19 20:34:30 +00001092 # Close all other fds, if asked for
1093 if close_fds:
1094 self._close_fds(but=errpipe_write)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001095
Facundo Batista10706e22009-06-19 20:34:30 +00001096 if cwd is not None:
1097 os.chdir(cwd)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001098
Facundo Batista10706e22009-06-19 20:34:30 +00001099 if preexec_fn:
1100 preexec_fn()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001101
Facundo Batista10706e22009-06-19 20:34:30 +00001102 if env is None:
1103 os.execvp(executable, args)
1104 else:
1105 os.execvpe(executable, args, env)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001106
Facundo Batista10706e22009-06-19 20:34:30 +00001107 except:
1108 exc_type, exc_value, tb = sys.exc_info()
1109 # Save the traceback and attach it to the exception
1110 # object
1111 exc_lines = traceback.format_exception(exc_type,
1112 exc_value,
1113 tb)
1114 exc_value.child_traceback = ''.join(exc_lines)
1115 os.write(errpipe_write, pickle.dumps(exc_value))
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001116
Facundo Batista10706e22009-06-19 20:34:30 +00001117 # This exitcode won't be reported to applications, so
1118 # it really doesn't matter what we return.
1119 os._exit(255)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001120
Facundo Batista10706e22009-06-19 20:34:30 +00001121 # Parent
1122 if gc_was_enabled:
1123 gc.enable()
1124 finally:
1125 # be sure the FD is closed no matter what
1126 os.close(errpipe_write)
1127
1128 if p2cread is not None and p2cwrite is not None:
1129 os.close(p2cread)
1130 if c2pwrite is not None and c2pread is not None:
1131 os.close(c2pwrite)
1132 if errwrite is not None and errread is not None:
1133 os.close(errwrite)
1134
1135 # Wait for exec to fail or succeed; possibly raising an
1136 # exception (limited to 1 MB)
1137 data = os.read(errpipe_read, 1048576)
1138 finally:
1139 # be sure the FD is closed no matter what
1140 os.close(errpipe_read)
1141
Guido van Rossumaf2362a2007-05-15 22:32:02 +00001142 if data:
Peter Astrandf791d7a2005-01-01 09:38:57 +00001143 os.waitpid(self.pid, 0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001144 child_exception = pickle.loads(data)
Benjamin Petersond75fcb42009-02-19 04:22:03 +00001145 for fd in (p2cwrite, c2pread, errread):
1146 if fd is not None:
1147 os.close(fd)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001148 raise child_exception
1149
1150
1151 def _handle_exitstatus(self, sts):
1152 if os.WIFSIGNALED(sts):
1153 self.returncode = -os.WTERMSIG(sts)
1154 elif os.WIFEXITED(sts):
1155 self.returncode = os.WEXITSTATUS(sts)
1156 else:
1157 # Should never happen
1158 raise RuntimeError("Unknown child exit status!")
1159
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001160
Georg Brandl6aa2d1f2008-08-12 08:35:52 +00001161 def _internal_poll(self, _deadstate=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001162 """Check if child process has terminated. Returns returncode
1163 attribute."""
Peter Astrandd38ddf42005-02-10 08:32:50 +00001164 if self.returncode is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001165 try:
1166 pid, sts = os.waitpid(self.pid, os.WNOHANG)
1167 if pid == self.pid:
1168 self._handle_exitstatus(sts)
1169 except os.error:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001170 if _deadstate is not None:
1171 self.returncode = _deadstate
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001172 return self.returncode
1173
1174
1175 def wait(self):
1176 """Wait for child process to terminate. Returns returncode
1177 attribute."""
Peter Astrandd38ddf42005-02-10 08:32:50 +00001178 if self.returncode is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001179 pid, sts = os.waitpid(self.pid, 0)
1180 self._handle_exitstatus(sts)
1181 return self.returncode
1182
1183
Peter Astrand23109f02005-03-03 20:28:59 +00001184 def _communicate(self, input):
Georg Brandlae83d6e2009-08-13 09:04:31 +00001185 if self.stdin:
1186 # Flush stdio buffer. This might block, if the user has
1187 # been writing to .stdin in an uncontrolled fashion.
1188 self.stdin.flush()
1189 if not input:
1190 self.stdin.close()
1191
1192 if _has_poll:
1193 stdout, stderr = self._communicate_with_poll(input)
1194 else:
1195 stdout, stderr = self._communicate_with_select(input)
1196
1197 # All data exchanged. Translate lists into strings.
1198 if stdout is not None:
1199 stdout = b''.join(stdout)
1200 if stderr is not None:
1201 stderr = b''.join(stderr)
1202
1203 # Translate newlines, if requested.
1204 # This also turns bytes into strings.
1205 if self.universal_newlines:
1206 if stdout is not None:
1207 stdout = self._translate_newlines(stdout,
1208 self.stdout.encoding)
1209 if stderr is not None:
1210 stderr = self._translate_newlines(stderr,
1211 self.stderr.encoding)
1212
1213 self.wait()
1214 return (stdout, stderr)
1215
1216
1217 def _communicate_with_poll(self, input):
1218 stdout = None # Return
1219 stderr = None # Return
1220 fd2file = {}
1221 fd2output = {}
1222
1223 poller = select.poll()
1224 def register_and_append(file_obj, eventmask):
1225 poller.register(file_obj.fileno(), eventmask)
1226 fd2file[file_obj.fileno()] = file_obj
1227
1228 def close_unregister_and_remove(fd):
1229 poller.unregister(fd)
1230 fd2file[fd].close()
1231 fd2file.pop(fd)
1232
1233 if self.stdin and input:
1234 register_and_append(self.stdin, select.POLLOUT)
1235
1236 select_POLLIN_POLLPRI = select.POLLIN | select.POLLPRI
1237 if self.stdout:
1238 register_and_append(self.stdout, select_POLLIN_POLLPRI)
1239 fd2output[self.stdout.fileno()] = stdout = []
1240 if self.stderr:
1241 register_and_append(self.stderr, select_POLLIN_POLLPRI)
1242 fd2output[self.stderr.fileno()] = stderr = []
1243
1244 input_offset = 0
1245 while fd2file:
1246 try:
1247 ready = poller.poll()
1248 except select.error as e:
1249 if e.args[0] == errno.EINTR:
1250 continue
1251 raise
1252
1253 # XXX Rewrite these to use non-blocking I/O on the
1254 # file objects; they are no longer using C stdio!
1255
1256 for fd, mode in ready:
1257 if mode & select.POLLOUT:
1258 chunk = input[input_offset : input_offset + _PIPE_BUF]
1259 input_offset += os.write(fd, chunk)
1260 if input_offset >= len(input):
1261 close_unregister_and_remove(fd)
1262 elif mode & select_POLLIN_POLLPRI:
1263 data = os.read(fd, 4096)
1264 if not data:
1265 close_unregister_and_remove(fd)
1266 fd2output[fd].append(data)
1267 else:
1268 # Ignore hang up or errors.
1269 close_unregister_and_remove(fd)
1270
1271 return (stdout, stderr)
1272
1273
1274 def _communicate_with_select(self, input):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001275 read_set = []
1276 write_set = []
1277 stdout = None # Return
1278 stderr = None # Return
1279
Georg Brandlae83d6e2009-08-13 09:04:31 +00001280 if self.stdin and input:
1281 write_set.append(self.stdin)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001282 if self.stdout:
1283 read_set.append(self.stdout)
Tim Peterse718f612004-10-12 21:51:32 +00001284 stdout = []
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001285 if self.stderr:
1286 read_set.append(self.stderr)
1287 stderr = []
1288
Thomas Wouters902d6eb2007-01-09 23:18:33 +00001289 input_offset = 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001290 while read_set or write_set:
Georg Brandl86b2fb92008-07-16 03:43:04 +00001291 try:
1292 rlist, wlist, xlist = select.select(read_set, write_set, [])
1293 except select.error as e:
1294 if e.args[0] == errno.EINTR:
1295 continue
1296 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001297
Guido van Rossum98297ee2007-11-06 21:34:58 +00001298 # XXX Rewrite these to use non-blocking I/O on the
1299 # file objects; they are no longer using C stdio!
1300
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001301 if self.stdin in wlist:
Georg Brandlae83d6e2009-08-13 09:04:31 +00001302 chunk = input[input_offset : input_offset + _PIPE_BUF]
Guido van Rossumbae07c92007-10-08 02:46:15 +00001303 bytes_written = os.write(self.stdin.fileno(), chunk)
Thomas Wouters9fe394c2007-02-05 01:24:16 +00001304 input_offset += bytes_written
Thomas Wouters902d6eb2007-01-09 23:18:33 +00001305 if input_offset >= len(input):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001306 self.stdin.close()
1307 write_set.remove(self.stdin)
1308
1309 if self.stdout in rlist:
1310 data = os.read(self.stdout.fileno(), 1024)
Guido van Rossumc9e363c2007-05-15 23:18:55 +00001311 if not data:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001312 self.stdout.close()
1313 read_set.remove(self.stdout)
1314 stdout.append(data)
1315
1316 if self.stderr in rlist:
1317 data = os.read(self.stderr.fileno(), 1024)
Guido van Rossumc9e363c2007-05-15 23:18:55 +00001318 if not data:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001319 self.stderr.close()
1320 read_set.remove(self.stderr)
1321 stderr.append(data)
1322
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001323 return (stdout, stderr)
1324
Georg Brandlae83d6e2009-08-13 09:04:31 +00001325
Christian Heimesa342c012008-04-20 21:01:16 +00001326 def send_signal(self, sig):
1327 """Send a signal to the process
1328 """
1329 os.kill(self.pid, sig)
1330
1331 def terminate(self):
1332 """Terminate the process with SIGTERM
1333 """
1334 self.send_signal(signal.SIGTERM)
1335
1336 def kill(self):
1337 """Kill the process with SIGKILL
1338 """
1339 self.send_signal(signal.SIGKILL)
1340
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001341
1342def _demo_posix():
1343 #
1344 # Example 1: Simple redirection: Get process list
1345 #
1346 plist = Popen(["ps"], stdout=PIPE).communicate()[0]
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001347 print("Process list:")
1348 print(plist)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001349
1350 #
1351 # Example 2: Change uid before executing child
1352 #
1353 if os.getuid() == 0:
1354 p = Popen(["id"], preexec_fn=lambda: os.setuid(100))
1355 p.wait()
1356
1357 #
1358 # Example 3: Connecting several subprocesses
1359 #
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001360 print("Looking for 'hda'...")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001361 p1 = Popen(["dmesg"], stdout=PIPE)
1362 p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001363 print(repr(p2.communicate()[0]))
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001364
1365 #
1366 # Example 4: Catch execution error
1367 #
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001368 print()
1369 print("Trying a weird file...")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001370 try:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001371 print(Popen(["/this/path/does/not/exist"]).communicate())
Guido van Rossumb940e112007-01-10 16:19:56 +00001372 except OSError as e:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001373 if e.errno == errno.ENOENT:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001374 print("The file didn't exist. I thought so...")
1375 print("Child traceback:")
1376 print(e.child_traceback)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001377 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001378 print("Error", e.errno)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001379 else:
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001380 print("Gosh. No error.", file=sys.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001381
1382
1383def _demo_windows():
1384 #
1385 # Example 1: Connecting several subprocesses
1386 #
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001387 print("Looking for 'PROMPT' in set output...")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001388 p1 = Popen("set", stdout=PIPE, shell=True)
1389 p2 = Popen('find "PROMPT"', stdin=p1.stdout, stdout=PIPE)
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001390 print(repr(p2.communicate()[0]))
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001391
1392 #
1393 # Example 2: Simple execution of program
1394 #
Guido van Rossumbe19ed72007-02-09 05:37:30 +00001395 print("Executing calc...")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001396 p = Popen("calc")
1397 p.wait()
1398
1399
1400if __name__ == "__main__":
1401 if mswindows:
1402 _demo_windows()
1403 else:
1404 _demo_posix()