blob: 6f2d55b145b090f8fd7b4bb0b4f44059bcd987f7 [file] [log] [blame]
Georg Brandl8ec7f652007-08-15 14:28:01 +00001
2:mod:`subprocess` --- Subprocess management
3===========================================
4
5.. module:: subprocess
6 :synopsis: Subprocess management.
7.. moduleauthor:: Peter Åstrand <astrand@lysator.liu.se>
8.. sectionauthor:: Peter Åstrand <astrand@lysator.liu.se>
9
10
11.. versionadded:: 2.4
12
13The :mod:`subprocess` module allows you to spawn new processes, connect to their
14input/output/error pipes, and obtain their return codes. This module intends to
15replace several other, older modules and functions, such as::
16
17 os.system
18 os.spawn*
19 os.popen*
20 popen2.*
21 commands.*
22
23Information about how the :mod:`subprocess` module can be used to replace these
24modules and functions can be found in the following sections.
25
Georg Brandl68b4e742008-07-01 19:59:00 +000026.. seealso::
27
28 :pep:`324` -- PEP proposing the subprocess module
29
Georg Brandl8ec7f652007-08-15 14:28:01 +000030
31Using the subprocess Module
32---------------------------
33
34This module defines one class called :class:`Popen`:
35
36
37.. class:: Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)
38
39 Arguments are:
40
Benjamin Petersonfff5cf62008-07-27 15:22:14 +000041 *args* should be a string, or a sequence of program arguments. The program
R. David Murray9f8a51c2009-06-25 17:40:52 +000042 to execute is normally the first item in the args sequence or the string if
43 a string is given, but can be explicitly set by using the *executable*
44 argument. When *executable* is given, the first item in the args sequence
45 is still treated by most programs as the command name, which can then be
46 different from the actual executable name. On Unix, it becomes the display
47 name for the executing program in utilities such as :program:`ps`.
Georg Brandl8ec7f652007-08-15 14:28:01 +000048
49 On Unix, with *shell=False* (default): In this case, the Popen class uses
50 :meth:`os.execvp` to execute the child program. *args* should normally be a
R. David Murray2d95c3a2010-02-04 16:35:33 +000051 sequence. If a string is specified for *args*, it will be used as the name
52 or path of the program to execute; this will only work if the program is
53 being given no arguments.
Georg Brandl8ec7f652007-08-15 14:28:01 +000054
R. David Murray2d95c3a2010-02-04 16:35:33 +000055 .. note::
56
57 :meth:`shlex.split` can be useful when determining the correct
58 tokenization for *args*, especially in complex cases::
59
60 >>> import shlex, subprocess
61 >>> command_line = raw_input()
62 /bin/vikings -input eggs.txt -output "spam spam.txt" -cmd "echo '$MONEY'"
63 >>> args = shlex.split(command_line)
64 >>> print args
65 ['/bin/vikings', '-input', 'eggs.txt', '-output', 'spam spam.txt', '-cmd', "echo '$MONEY'"]
66 >>> p = subprocess.Popen(args) # Success!
67
68 Note in particular that options (such as *-input*) and arguments (such
69 as *eggs.txt*) that are separated by whitespace in the shell go in separate
70 list elements, while arguments that need quoting or backslash escaping when
71 used in the shell (such as filenames containing spaces or the *echo* command
72 shown above) are single list elements.
73
74 On Unix, with *shell=True*: If args is a string, it specifies the command
75 string to execute through the shell. This means that the string must be
76 formatted exactly as it would be when typed at the shell prompt. This
77 includes, for example, quoting or backslash escaping filenames with spaces in
78 them. If *args* is a sequence, the first item specifies the command string, and
79 any additional items will be treated as additional arguments to the shell
80 itself. That is to say, *Popen* does the equivalent of::
81
82 Popen(['/bin/sh', '-c', args[0], args[1], ...])
Georg Brandl8ec7f652007-08-15 14:28:01 +000083
84 On Windows: the :class:`Popen` class uses CreateProcess() to execute the child
85 program, which operates on strings. If *args* is a sequence, it will be
86 converted to a string using the :meth:`list2cmdline` method. Please note that
87 not all MS Windows applications interpret the command line the same way:
88 :meth:`list2cmdline` is designed for applications using the same rules as the MS
89 C runtime.
90
91 *bufsize*, if given, has the same meaning as the corresponding argument to the
92 built-in open() function: :const:`0` means unbuffered, :const:`1` means line
93 buffered, any other positive value means use a buffer of (approximately) that
94 size. A negative *bufsize* means to use the system default, which usually means
95 fully buffered. The default value for *bufsize* is :const:`0` (unbuffered).
96
Antoine Pitroub56b50d2010-06-02 17:10:45 +000097 .. note::
98
99 If you experience performance issues, it is recommended that you try to
100 enable buffering by setting *bufsize* to either -1 or a large enough
101 positive value (such as 4096).
102
Georg Brandl8ec7f652007-08-15 14:28:01 +0000103 The *executable* argument specifies the program to execute. It is very seldom
104 needed: Usually, the program to execute is defined by the *args* argument. If
105 ``shell=True``, the *executable* argument specifies which shell to use. On Unix,
106 the default shell is :file:`/bin/sh`. On Windows, the default shell is
Georg Brandlf18d5ce2009-10-27 14:29:22 +0000107 specified by the :envvar:`COMSPEC` environment variable. The only reason you
108 would need to specify ``shell=True`` on Windows is where the command you
109 wish to execute is actually built in to the shell, eg ``dir``, ``copy``.
110 You don't need ``shell=True`` to run a batch file, nor to run a console-based
111 executable.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000112
113 *stdin*, *stdout* and *stderr* specify the executed programs' standard input,
Georg Brandlf3a0b862008-12-07 14:47:12 +0000114 standard output and standard error file handles, respectively. Valid values
115 are :data:`PIPE`, an existing file descriptor (a positive integer), an
116 existing file object, and ``None``. :data:`PIPE` indicates that a new pipe
117 to the child should be created. With ``None``, no redirection will occur;
118 the child's file handles will be inherited from the parent. Additionally,
119 *stderr* can be :data:`STDOUT`, which indicates that the stderr data from the
120 applications should be captured into the same file handle as for stdout.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000121
122 If *preexec_fn* is set to a callable object, this object will be called in the
123 child process just before the child is executed. (Unix only)
124
125 If *close_fds* is true, all file descriptors except :const:`0`, :const:`1` and
126 :const:`2` will be closed before the child process is executed. (Unix only).
127 Or, on Windows, if *close_fds* is true then no handles will be inherited by the
128 child process. Note that on Windows, you cannot set *close_fds* to true and
129 also redirect the standard handles by setting *stdin*, *stdout* or *stderr*.
130
131 If *shell* is :const:`True`, the specified command will be executed through the
132 shell.
133
134 If *cwd* is not ``None``, the child's current directory will be changed to *cwd*
135 before it is executed. Note that this directory is not considered when
136 searching the executable, so you can't specify the program's path relative to
137 *cwd*.
138
Georg Brandlf801b0f2008-04-19 16:58:49 +0000139 If *env* is not ``None``, it must be a mapping that defines the environment
140 variables for the new process; these are used instead of inheriting the current
141 process' environment, which is the default behavior.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000142
R. David Murrayb7291352009-04-16 18:17:55 +0000143 .. note::
R. David Murray0ec63512009-04-15 22:34:30 +0000144
R. David Murrayb7291352009-04-16 18:17:55 +0000145 If specified, *env* must provide any variables required
146 for the program to execute. On Windows, in order to run a
147 `side-by-side assembly`_ the specified *env* **must** include a valid
R. David Murray0ec63512009-04-15 22:34:30 +0000148 :envvar:`SystemRoot`.
149
R. David Murrayb7291352009-04-16 18:17:55 +0000150 .. _side-by-side assembly: http://en.wikipedia.org/wiki/Side-by-Side_Assembly
151
Georg Brandl8ec7f652007-08-15 14:28:01 +0000152 If *universal_newlines* is :const:`True`, the file objects stdout and stderr are
153 opened as text files, but lines may be terminated by any of ``'\n'``, the Unix
Georg Brandl9af94982008-09-13 17:41:16 +0000154 end-of-line convention, ``'\r'``, the old Macintosh convention or ``'\r\n'``, the
Georg Brandl8ec7f652007-08-15 14:28:01 +0000155 Windows convention. All of these external representations are seen as ``'\n'``
156 by the Python program.
157
158 .. note::
159
Georg Brandl953fe5f2010-03-21 19:06:51 +0000160 This feature is only available if Python is built with universal newline
161 support (the default). Also, the newlines attribute of the file objects
162 :attr:`stdout`, :attr:`stdin` and :attr:`stderr` are not updated by the
163 communicate() method.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000164
165 The *startupinfo* and *creationflags*, if given, will be passed to the
166 underlying CreateProcess() function. They can specify things such as appearance
167 of the main window and priority for the new process. (Windows only)
168
169
Georg Brandlf3a0b862008-12-07 14:47:12 +0000170.. data:: PIPE
171
172 Special value that can be used as the *stdin*, *stdout* or *stderr* argument
173 to :class:`Popen` and indicates that a pipe to the standard stream should be
174 opened.
175
176
177.. data:: STDOUT
178
179 Special value that can be used as the *stderr* argument to :class:`Popen` and
180 indicates that standard error should go into the same handle as standard
181 output.
Georg Brandl734373c2009-01-03 21:55:17 +0000182
Georg Brandlf3a0b862008-12-07 14:47:12 +0000183
Georg Brandl8ec7f652007-08-15 14:28:01 +0000184Convenience Functions
185^^^^^^^^^^^^^^^^^^^^^
186
187This module also defines two shortcut functions:
188
189
190.. function:: call(*popenargs, **kwargs)
191
192 Run command with arguments. Wait for command to complete, then return the
193 :attr:`returncode` attribute.
194
Georg Brandl5296e4b2010-05-19 14:11:55 +0000195 The arguments are the same as for the :class:`Popen` constructor. Example::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000196
Georg Brandl953fe5f2010-03-21 19:06:51 +0000197 >>> retcode = subprocess.call(["ls", "-l"])
Georg Brandl8ec7f652007-08-15 14:28:01 +0000198
199
200.. function:: check_call(*popenargs, **kwargs)
201
202 Run command with arguments. Wait for command to complete. If the exit code was
Andrew M. Kuchlingcad8da82008-09-30 13:01:46 +0000203 zero then return, otherwise raise :exc:`CalledProcessError`. The
Georg Brandl8ec7f652007-08-15 14:28:01 +0000204 :exc:`CalledProcessError` object will have the return code in the
205 :attr:`returncode` attribute.
206
Georg Brandl5296e4b2010-05-19 14:11:55 +0000207 The arguments are the same as for the :class:`Popen` constructor. Example::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000208
Georg Brandl953fe5f2010-03-21 19:06:51 +0000209 >>> subprocess.check_call(["ls", "-l"])
210 0
Georg Brandl8ec7f652007-08-15 14:28:01 +0000211
212 .. versionadded:: 2.5
213
214
215Exceptions
216^^^^^^^^^^
217
218Exceptions raised in the child process, before the new program has started to
219execute, will be re-raised in the parent. Additionally, the exception object
220will have one extra attribute called :attr:`child_traceback`, which is a string
221containing traceback information from the childs point of view.
222
223The most common exception raised is :exc:`OSError`. This occurs, for example,
224when trying to execute a non-existent file. Applications should prepare for
225:exc:`OSError` exceptions.
226
227A :exc:`ValueError` will be raised if :class:`Popen` is called with invalid
228arguments.
229
230check_call() will raise :exc:`CalledProcessError`, if the called process returns
231a non-zero return code.
232
233
234Security
235^^^^^^^^
236
237Unlike some other popen functions, this implementation will never call /bin/sh
238implicitly. This means that all characters, including shell metacharacters, can
239safely be passed to child processes.
240
241
242Popen Objects
243-------------
244
245Instances of the :class:`Popen` class have the following methods:
246
247
248.. method:: Popen.poll()
249
Georg Brandl2cb103f2008-01-06 16:01:26 +0000250 Check if child process has terminated. Set and return :attr:`returncode`
251 attribute.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000252
253
254.. method:: Popen.wait()
255
Georg Brandl2cb103f2008-01-06 16:01:26 +0000256 Wait for child process to terminate. Set and return :attr:`returncode`
257 attribute.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000258
Georg Brandl143de622008-08-04 06:29:36 +0000259 .. warning::
260
261 This will deadlock if the child process generates enough output to a
Gregory P. Smith33ede082008-08-04 18:34:07 +0000262 stdout or stderr pipe such that it blocks waiting for the OS pipe buffer
263 to accept more data. Use :meth:`communicate` to avoid that.
Gregory P. Smith08792502008-08-04 01:03:50 +0000264
Georg Brandl8ec7f652007-08-15 14:28:01 +0000265
266.. method:: Popen.communicate(input=None)
267
268 Interact with process: Send data to stdin. Read data from stdout and stderr,
269 until end-of-file is reached. Wait for process to terminate. The optional
270 *input* argument should be a string to be sent to the child process, or
271 ``None``, if no data should be sent to the child.
272
Georg Brandlfa71a902008-12-05 09:08:28 +0000273 :meth:`communicate` returns a tuple ``(stdoutdata, stderrdata)``.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000274
Georg Brandl439f2502007-11-24 11:31:46 +0000275 Note that if you want to send data to the process's stdin, you need to create
276 the Popen object with ``stdin=PIPE``. Similarly, to get anything other than
277 ``None`` in the result tuple, you need to give ``stdout=PIPE`` and/or
278 ``stderr=PIPE`` too.
279
Georg Brandl2cb103f2008-01-06 16:01:26 +0000280 .. note::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000281
Georg Brandl2cb103f2008-01-06 16:01:26 +0000282 The data read is buffered in memory, so do not use this method if the data
283 size is large or unlimited.
284
Georg Brandl8ec7f652007-08-15 14:28:01 +0000285
Christian Heimese74c8f22008-04-19 02:23:57 +0000286.. method:: Popen.send_signal(signal)
287
288 Sends the signal *signal* to the child.
289
290 .. note::
291
292 On Windows only SIGTERM is supported so far. It's an alias for
Georg Brandl734de682008-04-19 08:23:59 +0000293 :meth:`terminate`.
294
295 .. versionadded:: 2.6
Christian Heimese74c8f22008-04-19 02:23:57 +0000296
297
298.. method:: Popen.terminate()
299
300 Stop the child. On Posix OSs the method sends SIGTERM to the
Andrew M. Kuchling64c6a0e2008-04-21 02:08:00 +0000301 child. On Windows the Win32 API function :cfunc:`TerminateProcess` is called
Christian Heimese74c8f22008-04-19 02:23:57 +0000302 to stop the child.
303
Georg Brandl734de682008-04-19 08:23:59 +0000304 .. versionadded:: 2.6
305
Christian Heimese74c8f22008-04-19 02:23:57 +0000306
307.. method:: Popen.kill()
308
309 Kills the child. On Posix OSs the function sends SIGKILL to the child.
Georg Brandl734de682008-04-19 08:23:59 +0000310 On Windows :meth:`kill` is an alias for :meth:`terminate`.
311
312 .. versionadded:: 2.6
Christian Heimese74c8f22008-04-19 02:23:57 +0000313
314
Georg Brandl8ec7f652007-08-15 14:28:01 +0000315The following attributes are also available:
316
Georg Brandl143de622008-08-04 06:29:36 +0000317.. warning::
318
Georg Brandl38853142009-04-28 18:23:28 +0000319 Use :meth:`communicate` rather than :attr:`.stdin.write <stdin>`,
320 :attr:`.stdout.read <stdout>` or :attr:`.stderr.read <stderr>` to avoid
321 deadlocks due to any of the other OS pipe buffers filling up and blocking the
322 child process.
Georg Brandl143de622008-08-04 06:29:36 +0000323
324
Georg Brandl8ec7f652007-08-15 14:28:01 +0000325.. attribute:: Popen.stdin
326
Georg Brandlf3a0b862008-12-07 14:47:12 +0000327 If the *stdin* argument was :data:`PIPE`, this attribute is a file object
328 that provides input to the child process. Otherwise, it is ``None``.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000329
330
331.. attribute:: Popen.stdout
332
Georg Brandlf3a0b862008-12-07 14:47:12 +0000333 If the *stdout* argument was :data:`PIPE`, this attribute is a file object
334 that provides output from the child process. Otherwise, it is ``None``.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000335
336
337.. attribute:: Popen.stderr
338
Georg Brandlf3a0b862008-12-07 14:47:12 +0000339 If the *stderr* argument was :data:`PIPE`, this attribute is a file object
340 that provides error output from the child process. Otherwise, it is
341 ``None``.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000342
343
344.. attribute:: Popen.pid
345
346 The process ID of the child process.
347
Georg Brandl4c86cb32010-03-21 19:34:26 +0000348 Note that if you set the *shell* argument to ``True``, this is the process ID
349 of the spawned shell.
350
Georg Brandl8ec7f652007-08-15 14:28:01 +0000351
352.. attribute:: Popen.returncode
353
Georg Brandl2cb103f2008-01-06 16:01:26 +0000354 The child return code, set by :meth:`poll` and :meth:`wait` (and indirectly
355 by :meth:`communicate`). A ``None`` value indicates that the process
356 hasn't terminated yet.
Georg Brandl734373c2009-01-03 21:55:17 +0000357
Georg Brandl2cb103f2008-01-06 16:01:26 +0000358 A negative value ``-N`` indicates that the child was terminated by signal
359 ``N`` (Unix only).
Georg Brandl8ec7f652007-08-15 14:28:01 +0000360
361
Georg Brandl0ba92b22008-06-22 09:05:29 +0000362.. _subprocess-replacements:
363
Georg Brandl8ec7f652007-08-15 14:28:01 +0000364Replacing Older Functions with the subprocess Module
365----------------------------------------------------
366
367In this section, "a ==> b" means that b can be used as a replacement for a.
368
369.. note::
370
371 All functions in this section fail (more or less) silently if the executed
372 program cannot be found; this module raises an :exc:`OSError` exception.
373
374In the following examples, we assume that the subprocess module is imported with
375"from subprocess import \*".
376
377
378Replacing /bin/sh shell backquote
379^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
380
381::
382
383 output=`mycmd myarg`
384 ==>
385 output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
386
387
Georg Brandl4aef7032008-11-07 08:56:27 +0000388Replacing shell pipeline
389^^^^^^^^^^^^^^^^^^^^^^^^
Georg Brandl8ec7f652007-08-15 14:28:01 +0000390
391::
392
393 output=`dmesg | grep hda`
394 ==>
395 p1 = Popen(["dmesg"], stdout=PIPE)
396 p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
397 output = p2.communicate()[0]
398
399
R. David Murray9f8a51c2009-06-25 17:40:52 +0000400Replacing :func:`os.system`
401^^^^^^^^^^^^^^^^^^^^^^^^^^^
Georg Brandl8ec7f652007-08-15 14:28:01 +0000402
403::
404
405 sts = os.system("mycmd" + " myarg")
406 ==>
407 p = Popen("mycmd" + " myarg", shell=True)
Georg Brandlcda25a12009-10-27 14:34:21 +0000408 sts = os.waitpid(p.pid, 0)[1]
Georg Brandl8ec7f652007-08-15 14:28:01 +0000409
410Notes:
411
412* Calling the program through the shell is usually not required.
413
414* It's easier to look at the :attr:`returncode` attribute than the exit status.
415
416A more realistic example would look like this::
417
418 try:
419 retcode = call("mycmd" + " myarg", shell=True)
420 if retcode < 0:
421 print >>sys.stderr, "Child was terminated by signal", -retcode
422 else:
423 print >>sys.stderr, "Child returned", retcode
424 except OSError, e:
425 print >>sys.stderr, "Execution failed:", e
426
427
R. David Murray9f8a51c2009-06-25 17:40:52 +0000428Replacing the :func:`os.spawn <os.spawnl>` family
429^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Georg Brandl8ec7f652007-08-15 14:28:01 +0000430
431P_NOWAIT example::
432
433 pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")
434 ==>
435 pid = Popen(["/bin/mycmd", "myarg"]).pid
436
437P_WAIT example::
438
439 retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg")
440 ==>
441 retcode = call(["/bin/mycmd", "myarg"])
442
443Vector example::
444
445 os.spawnvp(os.P_NOWAIT, path, args)
446 ==>
447 Popen([path] + args[1:])
448
449Environment example::
450
451 os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env)
452 ==>
453 Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})
454
455
R. David Murray9f8a51c2009-06-25 17:40:52 +0000456Replacing :func:`os.popen`, :func:`os.popen2`, :func:`os.popen3`
457^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Georg Brandl8ec7f652007-08-15 14:28:01 +0000458
459::
460
Philip Jenvey78652962009-09-29 19:18:11 +0000461 pipe = os.popen("cmd", 'r', bufsize)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000462 ==>
Philip Jenvey78652962009-09-29 19:18:11 +0000463 pipe = Popen("cmd", shell=True, bufsize=bufsize, stdout=PIPE).stdout
Georg Brandl8ec7f652007-08-15 14:28:01 +0000464
465::
466
Philip Jenvey78652962009-09-29 19:18:11 +0000467 pipe = os.popen("cmd", 'w', bufsize)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000468 ==>
Philip Jenvey78652962009-09-29 19:18:11 +0000469 pipe = Popen("cmd", shell=True, bufsize=bufsize, stdin=PIPE).stdin
Georg Brandl8ec7f652007-08-15 14:28:01 +0000470
471::
472
Philip Jenvey78652962009-09-29 19:18:11 +0000473 (child_stdin, child_stdout) = os.popen2("cmd", mode, bufsize)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000474 ==>
Philip Jenvey78652962009-09-29 19:18:11 +0000475 p = Popen("cmd", shell=True, bufsize=bufsize,
Georg Brandl8ec7f652007-08-15 14:28:01 +0000476 stdin=PIPE, stdout=PIPE, close_fds=True)
477 (child_stdin, child_stdout) = (p.stdin, p.stdout)
478
479::
480
481 (child_stdin,
482 child_stdout,
Philip Jenvey78652962009-09-29 19:18:11 +0000483 child_stderr) = os.popen3("cmd", mode, bufsize)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000484 ==>
Philip Jenvey78652962009-09-29 19:18:11 +0000485 p = Popen("cmd", shell=True, bufsize=bufsize,
Georg Brandl8ec7f652007-08-15 14:28:01 +0000486 stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
487 (child_stdin,
488 child_stdout,
489 child_stderr) = (p.stdin, p.stdout, p.stderr)
490
491::
492
Philip Jenvey78652962009-09-29 19:18:11 +0000493 (child_stdin, child_stdout_and_stderr) = os.popen4("cmd", mode,
494 bufsize)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000495 ==>
Philip Jenvey78652962009-09-29 19:18:11 +0000496 p = Popen("cmd", shell=True, bufsize=bufsize,
Georg Brandl8ec7f652007-08-15 14:28:01 +0000497 stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
498 (child_stdin, child_stdout_and_stderr) = (p.stdin, p.stdout)
499
Philip Jenvey78652962009-09-29 19:18:11 +0000500On Unix, os.popen2, os.popen3 and os.popen4 also accept a sequence as
501the command to execute, in which case arguments will be passed
502directly to the program without shell intervention. This usage can be
503replaced as follows::
504
505 (child_stdin, child_stdout) = os.popen2(["/bin/ls", "-l"], mode,
506 bufsize)
507 ==>
508 p = Popen(["/bin/ls", "-l"], bufsize=bufsize, stdin=PIPE, stdout=PIPE)
509 (child_stdin, child_stdout) = (p.stdin, p.stdout)
510
R. David Murray9f8a51c2009-06-25 17:40:52 +0000511Return code handling translates as follows::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000512
Philip Jenvey78652962009-09-29 19:18:11 +0000513 pipe = os.popen("cmd", 'w')
R. David Murray9f8a51c2009-06-25 17:40:52 +0000514 ...
515 rc = pipe.close()
Stefan Krah3e4b1a22010-07-14 10:13:49 +0000516 if rc is not None and rc >> 8:
R. David Murray9f8a51c2009-06-25 17:40:52 +0000517 print "There were some errors"
518 ==>
Philip Jenvey78652962009-09-29 19:18:11 +0000519 process = Popen("cmd", 'w', shell=True, stdin=PIPE)
R. David Murray9f8a51c2009-06-25 17:40:52 +0000520 ...
521 process.stdin.close()
522 if process.wait() != 0:
523 print "There were some errors"
524
525
526Replacing functions from the :mod:`popen2` module
527^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Georg Brandl8ec7f652007-08-15 14:28:01 +0000528
Georg Brandl8ec7f652007-08-15 14:28:01 +0000529::
530
531 (child_stdout, child_stdin) = popen2.popen2("somestring", bufsize, mode)
532 ==>
533 p = Popen(["somestring"], shell=True, bufsize=bufsize,
534 stdin=PIPE, stdout=PIPE, close_fds=True)
535 (child_stdout, child_stdin) = (p.stdout, p.stdin)
536
Philip Jenvey78652962009-09-29 19:18:11 +0000537On Unix, popen2 also accepts a sequence as the command to execute, in
538which case arguments will be passed directly to the program without
539shell intervention. This usage can be replaced as follows::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000540
Philip Jenvey78652962009-09-29 19:18:11 +0000541 (child_stdout, child_stdin) = popen2.popen2(["mycmd", "myarg"], bufsize,
542 mode)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000543 ==>
544 p = Popen(["mycmd", "myarg"], bufsize=bufsize,
545 stdin=PIPE, stdout=PIPE, close_fds=True)
546 (child_stdout, child_stdin) = (p.stdout, p.stdin)
547
Georg Brandlf3a0b862008-12-07 14:47:12 +0000548:class:`popen2.Popen3` and :class:`popen2.Popen4` basically work as
549:class:`subprocess.Popen`, except that:
Georg Brandl8ec7f652007-08-15 14:28:01 +0000550
Georg Brandlf3a0b862008-12-07 14:47:12 +0000551* :class:`Popen` raises an exception if the execution fails.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000552
553* the *capturestderr* argument is replaced with the *stderr* argument.
554
Georg Brandlf3a0b862008-12-07 14:47:12 +0000555* ``stdin=PIPE`` and ``stdout=PIPE`` must be specified.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000556
557* popen2 closes all file descriptors by default, but you have to specify
Georg Brandlf3a0b862008-12-07 14:47:12 +0000558 ``close_fds=True`` with :class:`Popen`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000559