blob: c8dcb56e21e0de3faa708127d895573acd839c95 [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-------------------
301pipe = os.popen(cmd, mode='r', bufsize)
302==>
303pipe = Popen(cmd, shell=True, bufsize=bufsize, stdout=PIPE).stdout
304
305pipe = os.popen(cmd, mode='w', bufsize)
306==>
307pipe = Popen(cmd, shell=True, bufsize=bufsize, stdin=PIPE).stdin
308
309
310(child_stdin, child_stdout) = os.popen2(cmd, mode, bufsize)
311==>
312p = Popen(cmd, shell=True, bufsize=bufsize,
313 stdin=PIPE, stdout=PIPE, close_fds=True)
314(child_stdin, child_stdout) = (p.stdin, p.stdout)
315
316
317(child_stdin,
318 child_stdout,
319 child_stderr) = os.popen3(cmd, mode, bufsize)
320==>
321p = Popen(cmd, shell=True, bufsize=bufsize,
322 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
328(child_stdin, child_stdout_and_stderr) = os.popen4(cmd, mode, bufsize)
329==>
330p = Popen(cmd, shell=True, bufsize=bufsize,
331 stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
332(child_stdin, child_stdout_and_stderr) = (p.stdin, p.stdout)
333
334
335Replacing popen2.*
336------------------
337Note: If the cmd argument to popen2 functions is a string, the command
338is executed through /bin/sh. If it is a list, the command is directly
339executed.
340
341(child_stdout, child_stdin) = popen2.popen2("somestring", bufsize, mode)
342==>
343p = Popen(["somestring"], shell=True, bufsize=bufsize
344 stdin=PIPE, stdout=PIPE, close_fds=True)
345(child_stdout, child_stdin) = (p.stdout, p.stdin)
346
347
348(child_stdout, child_stdin) = popen2.popen2(["mycmd", "myarg"], bufsize, mode)
349==>
350p = Popen(["mycmd", "myarg"], bufsize=bufsize,
351 stdin=PIPE, stdout=PIPE, close_fds=True)
352(child_stdout, child_stdin) = (p.stdout, p.stdin)
353
Neal Norwitzaa87fb62007-05-11 06:23:01 +0000354The popen2.Popen3 and popen2.Popen4 basically works as subprocess.Popen,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000355except that:
356
357* subprocess.Popen raises an exception if the execution fails
358* the capturestderr argument is replaced with the stderr argument.
359* stdin=PIPE and stdout=PIPE must be specified.
360* popen2 closes all filedescriptors by default, but you have to specify
Tim Peterse718f612004-10-12 21:51:32 +0000361 close_fds=True with subprocess.Popen.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000362"""
363
364import sys
365mswindows = (sys.platform == "win32")
366
367import os
Peter Astrandc26516b2005-02-21 08:13:02 +0000368import types
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000369import traceback
Gregory P. Smith87d49792008-01-19 20:57:59 +0000370import gc
Christian Heimese74c8f22008-04-19 02:23:57 +0000371import signal
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000372
Peter Astrand454f7672005-01-01 09:36:35 +0000373# Exception classes used by this module.
Peter Astrand7d1d4362006-07-14 14:04:45 +0000374class CalledProcessError(Exception):
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000375 """This exception is raised when a process run by check_call() or
Gregory P. Smith26576802008-12-05 02:27:01 +0000376 check_output() returns a non-zero exit status.
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000377 The exit status will be stored in the returncode attribute;
Gregory P. Smith26576802008-12-05 02:27:01 +0000378 check_output() will also store the output in the output attribute.
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000379 """
380 def __init__(self, returncode, cmd, output=None):
Peter Astrand7d1d4362006-07-14 14:04:45 +0000381 self.returncode = returncode
382 self.cmd = cmd
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000383 self.output = output
Peter Astrand7d1d4362006-07-14 14:04:45 +0000384 def __str__(self):
385 return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode)
Tim Peters73a9ead2006-07-18 21:55:15 +0000386
Peter Astrand454f7672005-01-01 09:36:35 +0000387
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000388if mswindows:
389 import threading
390 import msvcrt
Fredrik Lundh3e73a012004-10-13 18:19:18 +0000391 if 0: # <-- change this to use pywin32 instead of the _subprocess driver
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000392 import pywintypes
Tim Peterse8374a52004-10-13 03:15:00 +0000393 from win32api import GetStdHandle, STD_INPUT_HANDLE, \
394 STD_OUTPUT_HANDLE, STD_ERROR_HANDLE
395 from win32api import GetCurrentProcess, DuplicateHandle, \
396 GetModuleFileName, GetVersion
Peter Astrandc1d65362004-11-07 14:30:34 +0000397 from win32con import DUPLICATE_SAME_ACCESS, SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000398 from win32pipe import CreatePipe
Tim Peterse8374a52004-10-13 03:15:00 +0000399 from win32process import CreateProcess, STARTUPINFO, \
400 GetExitCodeProcess, STARTF_USESTDHANDLES, \
Peter Astrandc1d65362004-11-07 14:30:34 +0000401 STARTF_USESHOWWINDOW, CREATE_NEW_CONSOLE
Christian Heimese74c8f22008-04-19 02:23:57 +0000402 from win32process import TerminateProcess
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000403 from win32event import WaitForSingleObject, INFINITE, WAIT_OBJECT_0
Fredrik Lundh3e73a012004-10-13 18:19:18 +0000404 else:
405 from _subprocess import *
406 class STARTUPINFO:
407 dwFlags = 0
408 hStdInput = None
409 hStdOutput = None
410 hStdError = None
Georg Brandlad624892006-06-04 22:15:37 +0000411 wShowWindow = 0
Fredrik Lundh3e73a012004-10-13 18:19:18 +0000412 class pywintypes:
413 error = IOError
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000414else:
415 import select
Gregory P. Smithdd7ca242009-07-04 01:49:29 +0000416 _has_poll = hasattr(select, 'poll')
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000417 import errno
418 import fcntl
419 import pickle
420
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000421__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call",
Gregory P. Smith26576802008-12-05 02:27:01 +0000422 "check_output", "CalledProcessError"]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000423
424try:
425 MAXFD = os.sysconf("SC_OPEN_MAX")
426except:
427 MAXFD = 256
428
Gregory P. Smithdd7ca242009-07-04 01:49:29 +0000429# When select or poll has indicated that the file is writable,
430# we can write up to _PIPE_BUF bytes without risk of blocking.
431# POSIX defines PIPE_BUF as >= 512.
432_PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000433
434_active = []
435
436def _cleanup():
437 for inst in _active[:]:
Gregory P. Smitha36f8fe2008-08-04 00:13:29 +0000438 if inst._internal_poll(_deadstate=sys.maxint) >= 0:
Martin v. Löwis17de8ff2006-04-10 15:55:37 +0000439 try:
440 _active.remove(inst)
441 except ValueError:
442 # This can happen if two threads create a new Popen instance.
443 # It's harmless that it was already removed, so ignore.
444 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000445
446PIPE = -1
447STDOUT = -2
448
449
Peter Astrand5f5e1412004-12-05 20:15:36 +0000450def call(*popenargs, **kwargs):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000451 """Run command with arguments. Wait for command to complete, then
452 return the returncode attribute.
453
454 The arguments are the same as for the Popen constructor. Example:
455
456 retcode = call(["ls", "-l"])
457 """
Peter Astrand5f5e1412004-12-05 20:15:36 +0000458 return Popen(*popenargs, **kwargs).wait()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000459
460
Peter Astrand454f7672005-01-01 09:36:35 +0000461def check_call(*popenargs, **kwargs):
462 """Run command with arguments. Wait for command to complete. If
463 the exit code was zero then return, otherwise raise
464 CalledProcessError. The CalledProcessError object will have the
Peter Astrand7d1d4362006-07-14 14:04:45 +0000465 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000466
467 The arguments are the same as for the Popen constructor. Example:
468
469 check_call(["ls", "-l"])
470 """
471 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000472 if retcode:
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000473 cmd = kwargs.get("args")
474 if cmd is None:
475 cmd = popenargs[0]
Peter Astrand7d1d4362006-07-14 14:04:45 +0000476 raise CalledProcessError(retcode, cmd)
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000477 return 0
478
479
Gregory P. Smith26576802008-12-05 02:27:01 +0000480def check_output(*popenargs, **kwargs):
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000481 """Run command with arguments and return its output as a byte string.
482
483 If the exit code was non-zero it raises a CalledProcessError. The
484 CalledProcessError object will have the return code in the returncode
485 attribute and output in the output attribute.
486
487 The arguments are the same as for the Popen constructor. Example:
488
Gregory P. Smith26576802008-12-05 02:27:01 +0000489 >>> check_output(["ls", "-l", "/dev/null"])
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000490 'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
491
492 The stdout argument is not allowed as it is used internally.
493 To capture standard error in the result, use stderr=subprocess.STDOUT.
494
Gregory P. Smith26576802008-12-05 02:27:01 +0000495 >>> check_output(["/bin/sh", "-c",
Mark Dickinson3e4caeb2009-02-21 20:27:01 +0000496 "ls -l non_existent_file ; exit 0"],
Gregory P. Smith26576802008-12-05 02:27:01 +0000497 stderr=subprocess.STDOUT)
Mark Dickinson3e4caeb2009-02-21 20:27:01 +0000498 'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000499 """
500 if 'stdout' in kwargs:
501 raise ValueError('stdout argument not allowed, it will be overridden.')
Amaury Forgeot d'Arc5fe420e2009-06-18 22:32:50 +0000502 process = Popen(stdout=PIPE, *popenargs, **kwargs)
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000503 output, unused_err = process.communicate()
504 retcode = process.poll()
505 if retcode:
506 cmd = kwargs.get("args")
507 if cmd is None:
508 cmd = popenargs[0]
509 raise CalledProcessError(retcode, cmd, output=output)
510 return output
Peter Astrand454f7672005-01-01 09:36:35 +0000511
512
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000513def list2cmdline(seq):
514 """
515 Translate a sequence of arguments into a command line
516 string, using the same rules as the MS C runtime:
517
518 1) Arguments are delimited by white space, which is either a
519 space or a tab.
520
521 2) A string surrounded by double quotation marks is
522 interpreted as a single argument, regardless of white space
Gregory P. Smith70eb2f92008-01-19 22:49:37 +0000523 or pipe characters contained within. A quoted string can be
524 embedded in an argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000525
526 3) A double quotation mark preceded by a backslash is
527 interpreted as a literal double quotation mark.
528
529 4) Backslashes are interpreted literally, unless they
530 immediately precede a double quotation mark.
531
532 5) If backslashes immediately precede a double quotation mark,
533 every pair of backslashes is interpreted as a literal
534 backslash. If the number of backslashes is odd, the last
535 backslash escapes the next double quotation mark as
536 described in rule 3.
537 """
538
539 # See
540 # http://msdn.microsoft.com/library/en-us/vccelng/htm/progs_12.asp
541 result = []
542 needquote = False
543 for arg in seq:
544 bs_buf = []
545
546 # Add a space to separate this argument from the others
547 if result:
548 result.append(' ')
549
Gregory P. Smith70eb2f92008-01-19 22:49:37 +0000550 needquote = (" " in arg) or ("\t" in arg) or ("|" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000551 if needquote:
552 result.append('"')
553
554 for c in arg:
555 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000556 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000557 bs_buf.append(c)
558 elif c == '"':
Gregory P. Smithe047e6d2008-01-19 20:49:02 +0000559 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000560 result.append('\\' * len(bs_buf)*2)
561 bs_buf = []
562 result.append('\\"')
563 else:
564 # Normal char
565 if bs_buf:
566 result.extend(bs_buf)
567 bs_buf = []
568 result.append(c)
569
Gregory P. Smithe047e6d2008-01-19 20:49:02 +0000570 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000571 if bs_buf:
572 result.extend(bs_buf)
573
574 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000575 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000576 result.append('"')
577
578 return ''.join(result)
579
580
581class Popen(object):
582 def __init__(self, args, bufsize=0, executable=None,
583 stdin=None, stdout=None, stderr=None,
584 preexec_fn=None, close_fds=False, shell=False,
585 cwd=None, env=None, universal_newlines=False,
586 startupinfo=None, creationflags=0):
587 """Create new Popen instance."""
588 _cleanup()
589
Martin v. Löwis17de8ff2006-04-10 15:55:37 +0000590 self._child_created = False
Peter Astrand738131d2004-11-30 21:04:45 +0000591 if not isinstance(bufsize, (int, long)):
592 raise TypeError("bufsize must be an integer")
593
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000594 if mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000595 if preexec_fn is not None:
596 raise ValueError("preexec_fn is not supported on Windows "
597 "platforms")
Peter Astrand81a191b2007-05-26 22:18:20 +0000598 if close_fds and (stdin is not None or stdout is not None or
599 stderr is not None):
Tim Peterse8374a52004-10-13 03:15:00 +0000600 raise ValueError("close_fds is not supported on Windows "
Peter Astrand81a191b2007-05-26 22:18:20 +0000601 "platforms if you redirect stdin/stdout/stderr")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000602 else:
603 # POSIX
Tim Peterse8374a52004-10-13 03:15:00 +0000604 if startupinfo is not None:
605 raise ValueError("startupinfo is only supported on Windows "
606 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000607 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000608 raise ValueError("creationflags is only supported on Windows "
609 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000610
Tim Peterse718f612004-10-12 21:51:32 +0000611 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000612 self.stdout = None
613 self.stderr = None
614 self.pid = None
615 self.returncode = None
616 self.universal_newlines = universal_newlines
617
618 # Input and output objects. The general principle is like
619 # this:
620 #
621 # Parent Child
622 # ------ -----
623 # p2cwrite ---stdin---> p2cread
624 # c2pread <--stdout--- c2pwrite
625 # errread <--stderr--- errwrite
626 #
627 # On POSIX, the child objects are file descriptors. On
628 # Windows, these are Windows file handles. The parent objects
629 # are file descriptors on both platforms. The parent objects
630 # are None when not using PIPEs. The child objects are None
631 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000632
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000633 (p2cread, p2cwrite,
634 c2pread, c2pwrite,
635 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
636
637 self._execute_child(args, executable, preexec_fn, close_fds,
638 cwd, env, universal_newlines,
639 startupinfo, creationflags, shell,
640 p2cread, p2cwrite,
641 c2pread, c2pwrite,
642 errread, errwrite)
643
Peter Astrand5f9c6ae2007-02-06 15:37:50 +0000644 if mswindows:
Hirokazu Yamamotoeacbbdf2009-03-03 22:18:14 +0000645 if p2cwrite is not None:
646 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
647 if c2pread is not None:
648 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
649 if errread is not None:
650 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Peter Astrand5f9c6ae2007-02-06 15:37:50 +0000651
Peter Astrandf5400032007-02-02 19:06:36 +0000652 if p2cwrite is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000653 self.stdin = os.fdopen(p2cwrite, 'wb', bufsize)
Peter Astrandf5400032007-02-02 19:06:36 +0000654 if c2pread is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000655 if universal_newlines:
656 self.stdout = os.fdopen(c2pread, 'rU', bufsize)
657 else:
658 self.stdout = os.fdopen(c2pread, 'rb', bufsize)
Peter Astrandf5400032007-02-02 19:06:36 +0000659 if errread is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000660 if universal_newlines:
661 self.stderr = os.fdopen(errread, 'rU', bufsize)
662 else:
663 self.stderr = os.fdopen(errread, 'rb', bufsize)
Tim Peterse718f612004-10-12 21:51:32 +0000664
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000665
666 def _translate_newlines(self, data):
667 data = data.replace("\r\n", "\n")
668 data = data.replace("\r", "\n")
669 return data
670
Martin v. Löwis17de8ff2006-04-10 15:55:37 +0000671
Georg Brandl24522982007-04-21 20:35:38 +0000672 def __del__(self, sys=sys):
Martin v. Löwis17de8ff2006-04-10 15:55:37 +0000673 if not self._child_created:
674 # We didn't get to successfully create a child process.
675 return
676 # In case the child hasn't been waited on, check if it's done.
Gregory P. Smitha36f8fe2008-08-04 00:13:29 +0000677 self._internal_poll(_deadstate=sys.maxint)
Georg Brandl13cf38c2006-07-20 16:28:39 +0000678 if self.returncode is None and _active is not None:
Martin v. Löwis17de8ff2006-04-10 15:55:37 +0000679 # Child is still running, keep us alive until we can wait on it.
680 _active.append(self)
681
682
Peter Astrand23109f02005-03-03 20:28:59 +0000683 def communicate(self, input=None):
684 """Interact with process: Send data to stdin. Read data from
685 stdout and stderr, until end-of-file is reached. Wait for
686 process to terminate. The optional input argument should be a
687 string to be sent to the child process, or None, if no data
688 should be sent to the child.
Tim Peterseba28be2005-03-28 01:08:02 +0000689
Peter Astrand23109f02005-03-03 20:28:59 +0000690 communicate() returns a tuple (stdout, stderr)."""
691
692 # Optimization: If we are only using one pipe, or no pipe at
693 # all, using select() or threads is unnecessary.
694 if [self.stdin, self.stdout, self.stderr].count(None) >= 2:
Tim Peterseba28be2005-03-28 01:08:02 +0000695 stdout = None
696 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000697 if self.stdin:
698 if input:
699 self.stdin.write(input)
700 self.stdin.close()
701 elif self.stdout:
702 stdout = self.stdout.read()
Gregory P. Smith4036fd42008-05-26 20:22:14 +0000703 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000704 elif self.stderr:
705 stderr = self.stderr.read()
Gregory P. Smith4036fd42008-05-26 20:22:14 +0000706 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000707 self.wait()
708 return (stdout, stderr)
Tim Peterseba28be2005-03-28 01:08:02 +0000709
Peter Astrand23109f02005-03-03 20:28:59 +0000710 return self._communicate(input)
711
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000712
Gregory P. Smitha36f8fe2008-08-04 00:13:29 +0000713 def poll(self):
714 return self._internal_poll()
715
716
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000717 if mswindows:
718 #
719 # Windows methods
720 #
721 def _get_handles(self, stdin, stdout, stderr):
722 """Construct and return tupel with IO objects:
723 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
724 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000725 if stdin is None and stdout is None and stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000726 return (None, None, None, None, None, None)
Tim Peterse718f612004-10-12 21:51:32 +0000727
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000728 p2cread, p2cwrite = None, None
729 c2pread, c2pwrite = None, None
730 errread, errwrite = None, None
731
Peter Astrandd38ddf42005-02-10 08:32:50 +0000732 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000733 p2cread = GetStdHandle(STD_INPUT_HANDLE)
Hirokazu Yamamotoeacbbdf2009-03-03 22:18:14 +0000734 if p2cread is None:
735 p2cread, _ = CreatePipe(None, 0)
736 elif stdin == PIPE:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000737 p2cread, p2cwrite = CreatePipe(None, 0)
Peter Astrandd38ddf42005-02-10 08:32:50 +0000738 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000739 p2cread = msvcrt.get_osfhandle(stdin)
740 else:
741 # Assuming file-like object
742 p2cread = msvcrt.get_osfhandle(stdin.fileno())
743 p2cread = self._make_inheritable(p2cread)
744
Peter Astrandd38ddf42005-02-10 08:32:50 +0000745 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000746 c2pwrite = GetStdHandle(STD_OUTPUT_HANDLE)
Hirokazu Yamamotoeacbbdf2009-03-03 22:18:14 +0000747 if c2pwrite is None:
748 _, c2pwrite = CreatePipe(None, 0)
749 elif stdout == PIPE:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000750 c2pread, c2pwrite = CreatePipe(None, 0)
Peter Astrandd38ddf42005-02-10 08:32:50 +0000751 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000752 c2pwrite = msvcrt.get_osfhandle(stdout)
753 else:
754 # Assuming file-like object
755 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
756 c2pwrite = self._make_inheritable(c2pwrite)
757
Peter Astrandd38ddf42005-02-10 08:32:50 +0000758 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000759 errwrite = GetStdHandle(STD_ERROR_HANDLE)
Hirokazu Yamamotoeacbbdf2009-03-03 22:18:14 +0000760 if errwrite is None:
761 _, errwrite = CreatePipe(None, 0)
762 elif stderr == PIPE:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000763 errread, errwrite = CreatePipe(None, 0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000764 elif stderr == STDOUT:
765 errwrite = c2pwrite
Peter Astrandd38ddf42005-02-10 08:32:50 +0000766 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000767 errwrite = msvcrt.get_osfhandle(stderr)
768 else:
769 # Assuming file-like object
770 errwrite = msvcrt.get_osfhandle(stderr.fileno())
771 errwrite = self._make_inheritable(errwrite)
772
773 return (p2cread, p2cwrite,
774 c2pread, c2pwrite,
775 errread, errwrite)
776
777
778 def _make_inheritable(self, handle):
779 """Return a duplicate of handle, which is inheritable"""
780 return DuplicateHandle(GetCurrentProcess(), handle,
781 GetCurrentProcess(), 0, 1,
782 DUPLICATE_SAME_ACCESS)
783
784
785 def _find_w9xpopen(self):
786 """Find and return absolut path to w9xpopen.exe"""
Tim Peterse8374a52004-10-13 03:15:00 +0000787 w9xpopen = os.path.join(os.path.dirname(GetModuleFileName(0)),
788 "w9xpopen.exe")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000789 if not os.path.exists(w9xpopen):
790 # Eeek - file-not-found - possibly an embedding
791 # situation - see if we can locate it in sys.exec_prefix
Tim Peterse8374a52004-10-13 03:15:00 +0000792 w9xpopen = os.path.join(os.path.dirname(sys.exec_prefix),
793 "w9xpopen.exe")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000794 if not os.path.exists(w9xpopen):
Tim Peterse8374a52004-10-13 03:15:00 +0000795 raise RuntimeError("Cannot locate w9xpopen.exe, which is "
796 "needed for Popen to work with your "
797 "shell or platform.")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000798 return w9xpopen
799
Tim Peterse718f612004-10-12 21:51:32 +0000800
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000801 def _execute_child(self, args, executable, preexec_fn, close_fds,
802 cwd, env, universal_newlines,
803 startupinfo, creationflags, shell,
804 p2cread, p2cwrite,
805 c2pread, c2pwrite,
806 errread, errwrite):
807 """Execute program (MS Windows version)"""
808
Peter Astrandc26516b2005-02-21 08:13:02 +0000809 if not isinstance(args, types.StringTypes):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000810 args = list2cmdline(args)
811
Peter Astrandc1d65362004-11-07 14:30:34 +0000812 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +0000813 if startupinfo is None:
Georg Brandlad624892006-06-04 22:15:37 +0000814 startupinfo = STARTUPINFO()
815 if None not in (p2cread, c2pwrite, errwrite):
Peter Astrandc1d65362004-11-07 14:30:34 +0000816 startupinfo.dwFlags |= STARTF_USESTDHANDLES
817 startupinfo.hStdInput = p2cread
818 startupinfo.hStdOutput = c2pwrite
819 startupinfo.hStdError = errwrite
820
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000821 if shell:
Georg Brandlad624892006-06-04 22:15:37 +0000822 startupinfo.dwFlags |= STARTF_USESHOWWINDOW
823 startupinfo.wShowWindow = SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000824 comspec = os.environ.get("COMSPEC", "cmd.exe")
825 args = comspec + " /c " + args
Tim Peterse8374a52004-10-13 03:15:00 +0000826 if (GetVersion() >= 0x80000000L or
827 os.path.basename(comspec).lower() == "command.com"):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000828 # Win9x, or using command.com on NT. We need to
829 # use the w9xpopen intermediate program. For more
830 # information, see KB Q150956
831 # (http://web.archive.org/web/20011105084002/http://support.microsoft.com/support/kb/articles/Q150/9/56.asp)
832 w9xpopen = self._find_w9xpopen()
833 args = '"%s" %s' % (w9xpopen, args)
834 # Not passing CREATE_NEW_CONSOLE has been known to
835 # cause random failures on win9x. Specifically a
836 # dialog: "Your program accessed mem currently in
837 # use at xxx" and a hopeful warning about the
838 # stability of your system. Cost is Ctrl+C wont
839 # kill children.
840 creationflags |= CREATE_NEW_CONSOLE
841
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000842 # Start the process
843 try:
844 hp, ht, pid, tid = CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +0000845 # no special security
846 None, None,
Peter Astrand81a191b2007-05-26 22:18:20 +0000847 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +0000848 creationflags,
849 env,
850 cwd,
851 startupinfo)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000852 except pywintypes.error, e:
853 # Translate pywintypes.error to WindowsError, which is
854 # a subclass of OSError. FIXME: We should really
855 # translate errno using _sys_errlist (or simliar), but
856 # how can this be done from Python?
857 raise WindowsError(*e.args)
858
859 # Retain the process handle, but close the thread handle
Martin v. Löwis17de8ff2006-04-10 15:55:37 +0000860 self._child_created = True
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000861 self._handle = hp
862 self.pid = pid
863 ht.Close()
864
Andrew M. Kuchling51ee66e2004-10-12 16:38:42 +0000865 # Child is launched. Close the parent's copy of those pipe
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000866 # handles that only the child should have open. You need
867 # to make sure that no handles to the write end of the
868 # output pipe are maintained in this process or else the
869 # pipe will not close when the child process exits and the
870 # ReadFile will hang.
Peter Astrandd38ddf42005-02-10 08:32:50 +0000871 if p2cread is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000872 p2cread.Close()
Peter Astrandd38ddf42005-02-10 08:32:50 +0000873 if c2pwrite is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000874 c2pwrite.Close()
Peter Astrandd38ddf42005-02-10 08:32:50 +0000875 if errwrite is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000876 errwrite.Close()
877
Tim Peterse718f612004-10-12 21:51:32 +0000878
Gregory P. Smitha36f8fe2008-08-04 00:13:29 +0000879 def _internal_poll(self, _deadstate=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000880 """Check if child process has terminated. Returns returncode
881 attribute."""
Peter Astrandd38ddf42005-02-10 08:32:50 +0000882 if self.returncode is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000883 if WaitForSingleObject(self._handle, 0) == WAIT_OBJECT_0:
884 self.returncode = GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000885 return self.returncode
886
887
888 def wait(self):
889 """Wait for child process to terminate. Returns returncode
890 attribute."""
Peter Astrandd38ddf42005-02-10 08:32:50 +0000891 if self.returncode is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000892 obj = WaitForSingleObject(self._handle, INFINITE)
893 self.returncode = GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000894 return self.returncode
895
896
897 def _readerthread(self, fh, buffer):
898 buffer.append(fh.read())
899
900
Peter Astrand23109f02005-03-03 20:28:59 +0000901 def _communicate(self, input):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000902 stdout = None # Return
903 stderr = None # Return
904
905 if self.stdout:
906 stdout = []
Tim Peterse8374a52004-10-13 03:15:00 +0000907 stdout_thread = threading.Thread(target=self._readerthread,
908 args=(self.stdout, stdout))
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000909 stdout_thread.setDaemon(True)
910 stdout_thread.start()
911 if self.stderr:
912 stderr = []
Tim Peterse8374a52004-10-13 03:15:00 +0000913 stderr_thread = threading.Thread(target=self._readerthread,
914 args=(self.stderr, stderr))
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000915 stderr_thread.setDaemon(True)
916 stderr_thread.start()
917
918 if self.stdin:
Peter Astrandd38ddf42005-02-10 08:32:50 +0000919 if input is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000920 self.stdin.write(input)
921 self.stdin.close()
922
923 if self.stdout:
924 stdout_thread.join()
925 if self.stderr:
926 stderr_thread.join()
927
928 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +0000929 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000930 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +0000931 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000932 stderr = stderr[0]
933
934 # Translate newlines, if requested. We cannot let the file
935 # object do the translation: It is based on stdio, which is
936 # impossible to combine with select (unless forcing no
937 # buffering).
Neal Norwitza6d01ce2006-05-02 06:23:22 +0000938 if self.universal_newlines and hasattr(file, 'newlines'):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000939 if stdout:
940 stdout = self._translate_newlines(stdout)
941 if stderr:
942 stderr = self._translate_newlines(stderr)
943
944 self.wait()
945 return (stdout, stderr)
946
Christian Heimese74c8f22008-04-19 02:23:57 +0000947 def send_signal(self, sig):
948 """Send a signal to the process
949 """
950 if sig == signal.SIGTERM:
951 self.terminate()
952 else:
953 raise ValueError("Only SIGTERM is supported on Windows")
954
955 def terminate(self):
956 """Terminates the process
957 """
958 TerminateProcess(self._handle, 1)
959
960 kill = terminate
961
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000962 else:
963 #
964 # POSIX methods
965 #
966 def _get_handles(self, stdin, stdout, stderr):
967 """Construct and return tupel with IO objects:
968 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
969 """
970 p2cread, p2cwrite = None, None
971 c2pread, c2pwrite = None, None
972 errread, errwrite = None, None
973
Peter Astrandd38ddf42005-02-10 08:32:50 +0000974 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000975 pass
976 elif stdin == PIPE:
977 p2cread, p2cwrite = os.pipe()
Peter Astrandd38ddf42005-02-10 08:32:50 +0000978 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000979 p2cread = stdin
980 else:
981 # Assuming file-like object
982 p2cread = stdin.fileno()
983
Peter Astrandd38ddf42005-02-10 08:32:50 +0000984 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000985 pass
986 elif stdout == PIPE:
987 c2pread, c2pwrite = os.pipe()
Peter Astrandd38ddf42005-02-10 08:32:50 +0000988 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000989 c2pwrite = stdout
990 else:
991 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +0000992 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000993
Peter Astrandd38ddf42005-02-10 08:32:50 +0000994 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000995 pass
996 elif stderr == PIPE:
997 errread, errwrite = os.pipe()
998 elif stderr == STDOUT:
999 errwrite = c2pwrite
Peter Astrandd38ddf42005-02-10 08:32:50 +00001000 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001001 errwrite = stderr
1002 else:
1003 # Assuming file-like object
1004 errwrite = stderr.fileno()
1005
1006 return (p2cread, p2cwrite,
1007 c2pread, c2pwrite,
1008 errread, errwrite)
1009
1010
1011 def _set_cloexec_flag(self, fd):
1012 try:
1013 cloexec_flag = fcntl.FD_CLOEXEC
1014 except AttributeError:
1015 cloexec_flag = 1
1016
1017 old = fcntl.fcntl(fd, fcntl.F_GETFD)
1018 fcntl.fcntl(fd, fcntl.F_SETFD, old | cloexec_flag)
1019
1020
1021 def _close_fds(self, but):
Amaury Forgeot d'Arc5fe420e2009-06-18 22:32:50 +00001022 if hasattr(os, 'closerange'):
1023 os.closerange(3, but)
1024 os.closerange(but + 1, MAXFD)
1025 else:
1026 for i in xrange(3, MAXFD):
1027 if i == but:
1028 continue
1029 try:
1030 os.close(i)
1031 except:
1032 pass
Tim Peterse718f612004-10-12 21:51:32 +00001033
1034
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001035 def _execute_child(self, args, executable, preexec_fn, close_fds,
1036 cwd, env, universal_newlines,
1037 startupinfo, creationflags, shell,
1038 p2cread, p2cwrite,
1039 c2pread, c2pwrite,
1040 errread, errwrite):
1041 """Execute program (POSIX version)"""
1042
Peter Astrandc26516b2005-02-21 08:13:02 +00001043 if isinstance(args, types.StringTypes):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001044 args = [args]
Georg Brandl6c0e1e82006-10-29 09:05:04 +00001045 else:
1046 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001047
1048 if shell:
1049 args = ["/bin/sh", "-c"] + args
1050
Peter Astrandd38ddf42005-02-10 08:32:50 +00001051 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001052 executable = args[0]
1053
1054 # For transferring possible exec failure from child to parent
1055 # The first char specifies the exception type: 0 means
1056 # OSError, 1 means some other error.
1057 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith87d49792008-01-19 20:57:59 +00001058 try:
Gregory P. Smith92ffc632008-01-19 22:23:56 +00001059 try:
Facundo Batista8c826b72009-06-19 18:02:28 +00001060 self._set_cloexec_flag(errpipe_write)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001061
Facundo Batista8c826b72009-06-19 18:02:28 +00001062 gc_was_enabled = gc.isenabled()
1063 # Disable gc to avoid bug where gc -> file_dealloc ->
1064 # write to stderr -> hang. http://bugs.python.org/issue1336
1065 gc.disable()
1066 try:
1067 self.pid = os.fork()
1068 except:
1069 if gc_was_enabled:
1070 gc.enable()
1071 raise
1072 self._child_created = True
1073 if self.pid == 0:
1074 # Child
1075 try:
1076 # Close parent's pipe ends
1077 if p2cwrite is not None:
1078 os.close(p2cwrite)
1079 if c2pread is not None:
1080 os.close(c2pread)
1081 if errread is not None:
1082 os.close(errread)
1083 os.close(errpipe_read)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001084
Facundo Batista8c826b72009-06-19 18:02:28 +00001085 # Dup fds for child
1086 if p2cread is not None:
1087 os.dup2(p2cread, 0)
1088 if c2pwrite is not None:
1089 os.dup2(c2pwrite, 1)
1090 if errwrite is not None:
1091 os.dup2(errwrite, 2)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001092
Facundo Batista8c826b72009-06-19 18:02:28 +00001093 # Close pipe fds. Make sure we don't close the same
1094 # fd more than once, or standard fds.
1095 if p2cread is not None and p2cread not in (0,):
1096 os.close(p2cread)
1097 if c2pwrite is not None and c2pwrite not in (p2cread, 1):
1098 os.close(c2pwrite)
1099 if errwrite is not None and errwrite not in (p2cread, c2pwrite, 2):
1100 os.close(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001101
Facundo Batista8c826b72009-06-19 18:02:28 +00001102 # Close all other fds, if asked for
1103 if close_fds:
1104 self._close_fds(but=errpipe_write)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001105
Facundo Batista8c826b72009-06-19 18:02:28 +00001106 if cwd is not None:
1107 os.chdir(cwd)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001108
Facundo Batista8c826b72009-06-19 18:02:28 +00001109 if preexec_fn:
1110 preexec_fn()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001111
Facundo Batista8c826b72009-06-19 18:02:28 +00001112 if env is None:
1113 os.execvp(executable, args)
1114 else:
1115 os.execvpe(executable, args, env)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001116
Facundo Batista8c826b72009-06-19 18:02:28 +00001117 except:
1118 exc_type, exc_value, tb = sys.exc_info()
1119 # Save the traceback and attach it to the exception object
1120 exc_lines = traceback.format_exception(exc_type,
1121 exc_value,
1122 tb)
1123 exc_value.child_traceback = ''.join(exc_lines)
1124 os.write(errpipe_write, pickle.dumps(exc_value))
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001125
Facundo Batista8c826b72009-06-19 18:02:28 +00001126 # This exitcode won't be reported to applications, so it
1127 # really doesn't matter what we return.
1128 os._exit(255)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001129
Facundo Batista8c826b72009-06-19 18:02:28 +00001130 # Parent
1131 if gc_was_enabled:
1132 gc.enable()
1133 finally:
1134 # be sure the FD is closed no matter what
1135 os.close(errpipe_write)
1136
1137 if p2cread is not None and p2cwrite is not None:
1138 os.close(p2cread)
1139 if c2pwrite is not None and c2pread is not None:
1140 os.close(c2pwrite)
1141 if errwrite is not None and errread is not None:
1142 os.close(errwrite)
1143
1144 # Wait for exec to fail or succeed; possibly raising exception
1145 data = os.read(errpipe_read, 1048576) # Exception limited to 1M
1146 finally:
1147 # be sure the FD is closed no matter what
1148 os.close(errpipe_read)
1149
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001150 if data != "":
Peter Astrandf791d7a2005-01-01 09:38:57 +00001151 os.waitpid(self.pid, 0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001152 child_exception = pickle.loads(data)
Georg Brandlf3715d22009-02-14 17:01:36 +00001153 for fd in (p2cwrite, c2pread, errread):
1154 if fd is not None:
1155 os.close(fd)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001156 raise child_exception
1157
1158
1159 def _handle_exitstatus(self, sts):
1160 if os.WIFSIGNALED(sts):
1161 self.returncode = -os.WTERMSIG(sts)
1162 elif os.WIFEXITED(sts):
1163 self.returncode = os.WEXITSTATUS(sts)
1164 else:
1165 # Should never happen
1166 raise RuntimeError("Unknown child exit status!")
1167
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001168
Gregory P. Smitha36f8fe2008-08-04 00:13:29 +00001169 def _internal_poll(self, _deadstate=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001170 """Check if child process has terminated. Returns returncode
1171 attribute."""
Peter Astrandd38ddf42005-02-10 08:32:50 +00001172 if self.returncode is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001173 try:
1174 pid, sts = os.waitpid(self.pid, os.WNOHANG)
1175 if pid == self.pid:
1176 self._handle_exitstatus(sts)
1177 except os.error:
Martin v. Löwis17de8ff2006-04-10 15:55:37 +00001178 if _deadstate is not None:
1179 self.returncode = _deadstate
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001180 return self.returncode
1181
1182
1183 def wait(self):
1184 """Wait for child process to terminate. Returns returncode
1185 attribute."""
Peter Astrandd38ddf42005-02-10 08:32:50 +00001186 if self.returncode is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001187 pid, sts = os.waitpid(self.pid, 0)
1188 self._handle_exitstatus(sts)
1189 return self.returncode
1190
1191
Peter Astrand23109f02005-03-03 20:28:59 +00001192 def _communicate(self, input):
Gregory P. Smithdd7ca242009-07-04 01:49:29 +00001193 if self.stdin:
1194 # Flush stdio buffer. This might block, if the user has
1195 # been writing to .stdin in an uncontrolled fashion.
1196 self.stdin.flush()
1197 if not input:
1198 self.stdin.close()
1199
1200 if _has_poll:
1201 stdout, stderr = self._communicate_with_poll(input)
1202 else:
1203 stdout, stderr = self._communicate_with_select(input)
1204
1205 # All data exchanged. Translate lists into strings.
1206 if stdout is not None:
1207 stdout = ''.join(stdout)
1208 if stderr is not None:
1209 stderr = ''.join(stderr)
1210
1211 # Translate newlines, if requested. We cannot let the file
1212 # object do the translation: It is based on stdio, which is
1213 # impossible to combine with select (unless forcing no
1214 # buffering).
1215 if self.universal_newlines and hasattr(file, 'newlines'):
1216 if stdout:
1217 stdout = self._translate_newlines(stdout)
1218 if stderr:
1219 stderr = self._translate_newlines(stderr)
1220
1221 self.wait()
1222 return (stdout, stderr)
1223
1224
1225 def _communicate_with_poll(self, input):
1226 stdout = None # Return
1227 stderr = None # Return
1228 fd2file = {}
1229 fd2output = {}
1230
1231 poller = select.poll()
1232 def register_and_append(file_obj, eventmask):
1233 poller.register(file_obj.fileno(), eventmask)
1234 fd2file[file_obj.fileno()] = file_obj
1235
1236 def close_unregister_and_remove(fd):
1237 poller.unregister(fd)
1238 fd2file[fd].close()
1239 fd2file.pop(fd)
1240
1241 if self.stdin and input:
1242 register_and_append(self.stdin, select.POLLOUT)
1243
1244 select_POLLIN_POLLPRI = select.POLLIN | select.POLLPRI
1245 if self.stdout:
1246 register_and_append(self.stdout, select_POLLIN_POLLPRI)
1247 fd2output[self.stdout.fileno()] = stdout = []
1248 if self.stderr:
1249 register_and_append(self.stderr, select_POLLIN_POLLPRI)
1250 fd2output[self.stderr.fileno()] = stderr = []
1251
1252 input_offset = 0
1253 while fd2file:
1254 try:
1255 ready = poller.poll()
1256 except select.error, e:
1257 if e.args[0] == errno.EINTR:
1258 continue
1259 raise
1260
1261 for fd, mode in ready:
1262 if mode & select.POLLOUT:
1263 chunk = input[input_offset : input_offset + _PIPE_BUF]
1264 input_offset += os.write(fd, chunk)
1265 if input_offset >= len(input):
1266 close_unregister_and_remove(fd)
1267 elif mode & select_POLLIN_POLLPRI:
1268 data = os.read(fd, 4096)
1269 if not data:
1270 close_unregister_and_remove(fd)
1271 fd2output[fd].append(data)
1272 else:
1273 # Ignore hang up or errors.
1274 close_unregister_and_remove(fd)
1275
1276 return (stdout, stderr)
1277
1278
1279 def _communicate_with_select(self, input):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001280 read_set = []
1281 write_set = []
1282 stdout = None # Return
1283 stderr = None # Return
1284
Gregory P. Smithdd7ca242009-07-04 01:49:29 +00001285 if self.stdin and input:
1286 write_set.append(self.stdin)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001287 if self.stdout:
1288 read_set.append(self.stdout)
Tim Peterse718f612004-10-12 21:51:32 +00001289 stdout = []
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001290 if self.stderr:
1291 read_set.append(self.stderr)
1292 stderr = []
1293
Peter Astrand1812f8c2007-01-07 14:34:16 +00001294 input_offset = 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001295 while read_set or write_set:
Gregory P. Smithf4140642008-07-06 07:16:40 +00001296 try:
1297 rlist, wlist, xlist = select.select(read_set, write_set, [])
1298 except select.error, e:
1299 if e.args[0] == errno.EINTR:
1300 continue
1301 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001302
1303 if self.stdin in wlist:
Gregory P. Smithdd7ca242009-07-04 01:49:29 +00001304 chunk = input[input_offset : input_offset + _PIPE_BUF]
Brett Cannon03446c42008-08-08 04:19:32 +00001305 bytes_written = os.write(self.stdin.fileno(), chunk)
Tim Petersf733abb2007-01-30 03:03:46 +00001306 input_offset += bytes_written
Peter Astrand1812f8c2007-01-07 14:34:16 +00001307 if input_offset >= len(input):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001308 self.stdin.close()
1309 write_set.remove(self.stdin)
1310
1311 if self.stdout in rlist:
1312 data = os.read(self.stdout.fileno(), 1024)
1313 if data == "":
1314 self.stdout.close()
1315 read_set.remove(self.stdout)
1316 stdout.append(data)
1317
1318 if self.stderr in rlist:
1319 data = os.read(self.stderr.fileno(), 1024)
1320 if data == "":
1321 self.stderr.close()
1322 read_set.remove(self.stderr)
1323 stderr.append(data)
1324
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001325 return (stdout, stderr)
1326
Gregory P. Smithdd7ca242009-07-04 01:49:29 +00001327
Christian Heimese74c8f22008-04-19 02:23:57 +00001328 def send_signal(self, sig):
1329 """Send a signal to the process
1330 """
1331 os.kill(self.pid, sig)
1332
1333 def terminate(self):
1334 """Terminate the process with SIGTERM
1335 """
1336 self.send_signal(signal.SIGTERM)
1337
1338 def kill(self):
1339 """Kill the process with SIGKILL
1340 """
1341 self.send_signal(signal.SIGKILL)
1342
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001343
1344def _demo_posix():
1345 #
1346 # Example 1: Simple redirection: Get process list
1347 #
1348 plist = Popen(["ps"], stdout=PIPE).communicate()[0]
1349 print "Process list:"
1350 print plist
1351
1352 #
1353 # Example 2: Change uid before executing child
1354 #
1355 if os.getuid() == 0:
1356 p = Popen(["id"], preexec_fn=lambda: os.setuid(100))
1357 p.wait()
1358
1359 #
1360 # Example 3: Connecting several subprocesses
1361 #
1362 print "Looking for 'hda'..."
1363 p1 = Popen(["dmesg"], stdout=PIPE)
1364 p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
1365 print repr(p2.communicate()[0])
1366
1367 #
1368 # Example 4: Catch execution error
1369 #
1370 print
1371 print "Trying a weird file..."
1372 try:
1373 print Popen(["/this/path/does/not/exist"]).communicate()
1374 except OSError, e:
1375 if e.errno == errno.ENOENT:
1376 print "The file didn't exist. I thought so..."
1377 print "Child traceback:"
1378 print e.child_traceback
1379 else:
1380 print "Error", e.errno
1381 else:
1382 print >>sys.stderr, "Gosh. No error."
1383
1384
1385def _demo_windows():
1386 #
1387 # Example 1: Connecting several subprocesses
1388 #
1389 print "Looking for 'PROMPT' in set output..."
1390 p1 = Popen("set", stdout=PIPE, shell=True)
1391 p2 = Popen('find "PROMPT"', stdin=p1.stdout, stdout=PIPE)
1392 print repr(p2.communicate()[0])
1393
1394 #
1395 # Example 2: Simple execution of program
1396 #
1397 print "Executing calc..."
1398 p = Popen("calc")
1399 p.wait()
1400
1401
1402if __name__ == "__main__":
1403 if mswindows:
1404 _demo_windows()
1405 else:
1406 _demo_posix()