blob: 425c5261637763c63f79bd7b677f06b13cb22dec [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 Murrayfe6e7842009-05-29 19:30:27 +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
Nick Coghlan7dfc9e12010-02-04 12:43:58 +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
Nick Coghlan7dfc9e12010-02-04 12:43:58 +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
R. David Murray6e4300c2010-11-12 00:39:09 +000084 .. warning::
85
86 Executing shell commands that incorporate unsanitized input from an
87 untrusted source makes a program vulnerable to `shell injection
88 <http://en.wikipedia.org/wiki/Shell_injection#Shell_injection>`_,
89 a serious security flaw which can result in arbitrary command execution.
90 For this reason, the use of *shell=True* is **strongly discouraged** in cases
91 where the command string is constructed from external input::
92
93 >>> from subprocess import call
94 >>> filename = input("What file would you like to display?\n")
95 What file would you like to display?
96 non_existent; rm -rf / #
97 >>> call("cat " + filename, shell=True) # Uh-oh. This will end badly...
98
99 *shell=False* does not suffer from this vulnerability; the above Note may be
100 helpful in getting code using *shell=False* to work.
101
Georg Brandl8ec7f652007-08-15 14:28:01 +0000102 On Windows: the :class:`Popen` class uses CreateProcess() to execute the child
103 program, which operates on strings. If *args* is a sequence, it will be
104 converted to a string using the :meth:`list2cmdline` method. Please note that
105 not all MS Windows applications interpret the command line the same way:
106 :meth:`list2cmdline` is designed for applications using the same rules as the MS
107 C runtime.
108
109 *bufsize*, if given, has the same meaning as the corresponding argument to the
110 built-in open() function: :const:`0` means unbuffered, :const:`1` means line
111 buffered, any other positive value means use a buffer of (approximately) that
112 size. A negative *bufsize* means to use the system default, which usually means
113 fully buffered. The default value for *bufsize* is :const:`0` (unbuffered).
114
Antoine Pitrouc3955452010-06-02 17:08:47 +0000115 .. note::
116
117 If you experience performance issues, it is recommended that you try to
118 enable buffering by setting *bufsize* to either -1 or a large enough
119 positive value (such as 4096).
120
Georg Brandl8ec7f652007-08-15 14:28:01 +0000121 The *executable* argument specifies the program to execute. It is very seldom
122 needed: Usually, the program to execute is defined by the *args* argument. If
123 ``shell=True``, the *executable* argument specifies which shell to use. On Unix,
124 the default shell is :file:`/bin/sh`. On Windows, the default shell is
Georg Brandl0d8649a2009-06-30 16:17:28 +0000125 specified by the :envvar:`COMSPEC` environment variable. The only reason you
126 would need to specify ``shell=True`` on Windows is where the command you
127 wish to execute is actually built in to the shell, eg ``dir``, ``copy``.
128 You don't need ``shell=True`` to run a batch file, nor to run a console-based
129 executable.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000130
131 *stdin*, *stdout* and *stderr* specify the executed programs' standard input,
Georg Brandlf5d5a662008-12-06 11:57:12 +0000132 standard output and standard error file handles, respectively. Valid values
133 are :data:`PIPE`, an existing file descriptor (a positive integer), an
134 existing file object, and ``None``. :data:`PIPE` indicates that a new pipe
135 to the child should be created. With ``None``, no redirection will occur;
136 the child's file handles will be inherited from the parent. Additionally,
137 *stderr* can be :data:`STDOUT`, which indicates that the stderr data from the
138 applications should be captured into the same file handle as for stdout.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000139
140 If *preexec_fn* is set to a callable object, this object will be called in the
141 child process just before the child is executed. (Unix only)
142
143 If *close_fds* is true, all file descriptors except :const:`0`, :const:`1` and
144 :const:`2` will be closed before the child process is executed. (Unix only).
145 Or, on Windows, if *close_fds* is true then no handles will be inherited by the
146 child process. Note that on Windows, you cannot set *close_fds* to true and
147 also redirect the standard handles by setting *stdin*, *stdout* or *stderr*.
148
149 If *shell* is :const:`True`, the specified command will be executed through the
150 shell.
151
152 If *cwd* is not ``None``, the child's current directory will be changed to *cwd*
153 before it is executed. Note that this directory is not considered when
154 searching the executable, so you can't specify the program's path relative to
155 *cwd*.
156
Georg Brandlf801b0f2008-04-19 16:58:49 +0000157 If *env* is not ``None``, it must be a mapping that defines the environment
158 variables for the new process; these are used instead of inheriting the current
159 process' environment, which is the default behavior.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000160
R. David Murray72030812009-04-16 18:12:53 +0000161 .. note::
R. David Murray6076d392009-04-15 22:33:07 +0000162
R. David Murray72030812009-04-16 18:12:53 +0000163 If specified, *env* must provide any variables required
164 for the program to execute. On Windows, in order to run a
165 `side-by-side assembly`_ the specified *env* **must** include a valid
R. David Murray6076d392009-04-15 22:33:07 +0000166 :envvar:`SystemRoot`.
167
R. David Murray72030812009-04-16 18:12:53 +0000168 .. _side-by-side assembly: http://en.wikipedia.org/wiki/Side-by-Side_Assembly
169
Georg Brandl8ec7f652007-08-15 14:28:01 +0000170 If *universal_newlines* is :const:`True`, the file objects stdout and stderr are
171 opened as text files, but lines may be terminated by any of ``'\n'``, the Unix
Georg Brandl9af94982008-09-13 17:41:16 +0000172 end-of-line convention, ``'\r'``, the old Macintosh convention or ``'\r\n'``, the
Georg Brandl8ec7f652007-08-15 14:28:01 +0000173 Windows convention. All of these external representations are seen as ``'\n'``
174 by the Python program.
175
176 .. note::
177
Georg Brandl6ab5d082009-12-20 14:33:20 +0000178 This feature is only available if Python is built with universal newline
179 support (the default). Also, the newlines attribute of the file objects
180 :attr:`stdout`, :attr:`stdin` and :attr:`stderr` are not updated by the
181 communicate() method.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000182
183 The *startupinfo* and *creationflags*, if given, will be passed to the
184 underlying CreateProcess() function. They can specify things such as appearance
185 of the main window and priority for the new process. (Windows only)
186
187
Georg Brandlf5d5a662008-12-06 11:57:12 +0000188.. data:: PIPE
189
190 Special value that can be used as the *stdin*, *stdout* or *stderr* argument
191 to :class:`Popen` and indicates that a pipe to the standard stream should be
192 opened.
193
194
195.. data:: STDOUT
196
197 Special value that can be used as the *stderr* argument to :class:`Popen` and
198 indicates that standard error should go into the same handle as standard
199 output.
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000200
Georg Brandlf5d5a662008-12-06 11:57:12 +0000201
Georg Brandl8ec7f652007-08-15 14:28:01 +0000202Convenience Functions
203^^^^^^^^^^^^^^^^^^^^^
204
205This module also defines two shortcut functions:
206
207
208.. function:: call(*popenargs, **kwargs)
209
210 Run command with arguments. Wait for command to complete, then return the
211 :attr:`returncode` attribute.
212
R. David Murray6dfe6622010-02-16 17:55:26 +0000213 The arguments are the same as for the :class:`Popen` constructor. Example::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000214
Georg Brandl6ab5d082009-12-20 14:33:20 +0000215 >>> retcode = subprocess.call(["ls", "-l"])
Georg Brandl8ec7f652007-08-15 14:28:01 +0000216
Philip Jenvey739aa362009-05-22 05:35:32 +0000217 .. warning::
218
Philip Jenvey26275532009-12-03 02:25:54 +0000219 Like :meth:`Popen.wait`, this will deadlock when using
220 ``stdout=PIPE`` and/or ``stderr=PIPE`` and the child process
221 generates enough output to a pipe such that it blocks waiting
222 for the OS pipe buffer to accept more data.
Philip Jenvey739aa362009-05-22 05:35:32 +0000223
Georg Brandl8ec7f652007-08-15 14:28:01 +0000224
225.. function:: check_call(*popenargs, **kwargs)
226
227 Run command with arguments. Wait for command to complete. If the exit code was
Andrew M. Kuchlingcad8da82008-09-30 13:01:46 +0000228 zero then return, otherwise raise :exc:`CalledProcessError`. The
Georg Brandl8ec7f652007-08-15 14:28:01 +0000229 :exc:`CalledProcessError` object will have the return code in the
230 :attr:`returncode` attribute.
231
R. David Murray6dfe6622010-02-16 17:55:26 +0000232 The arguments are the same as for the :class:`Popen` constructor. Example::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000233
Georg Brandl6ab5d082009-12-20 14:33:20 +0000234 >>> subprocess.check_call(["ls", "-l"])
235 0
Georg Brandl8ec7f652007-08-15 14:28:01 +0000236
237 .. versionadded:: 2.5
238
Philip Jenvey739aa362009-05-22 05:35:32 +0000239 .. warning::
240
241 See the warning for :func:`call`.
242
Georg Brandl8ec7f652007-08-15 14:28:01 +0000243
Gregory P. Smith26576802008-12-05 02:27:01 +0000244.. function:: check_output(*popenargs, **kwargs)
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000245
246 Run command with arguments and return its output as a byte string.
247
Andrew M. Kuchling42ffbdb2009-01-21 02:16:26 +0000248 If the exit code was non-zero it raises a :exc:`CalledProcessError`. The
249 :exc:`CalledProcessError` object will have the return code in the
250 :attr:`returncode`
251 attribute and output in the :attr:`output` attribute.
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000252
Georg Brandlf6dab952009-04-28 21:48:35 +0000253 The arguments are the same as for the :class:`Popen` constructor. Example::
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000254
Gregory P. Smith26576802008-12-05 02:27:01 +0000255 >>> subprocess.check_output(["ls", "-l", "/dev/null"])
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000256 'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
257
258 The stdout argument is not allowed as it is used internally.
Georg Brandlf6dab952009-04-28 21:48:35 +0000259 To capture standard error in the result, use ``stderr=subprocess.STDOUT``::
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000260
Gregory P. Smith26576802008-12-05 02:27:01 +0000261 >>> subprocess.check_output(
Georg Brandl6ab5d082009-12-20 14:33:20 +0000262 ... ["/bin/sh", "-c", "ls non_existent_file; exit 0"],
263 ... stderr=subprocess.STDOUT)
Mark Dickinson3e4caeb2009-02-21 20:27:01 +0000264 'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith97f49f42008-12-04 20:21:09 +0000265
266 .. versionadded:: 2.7
267
268
Georg Brandl8ec7f652007-08-15 14:28:01 +0000269Exceptions
270^^^^^^^^^^
271
272Exceptions raised in the child process, before the new program has started to
273execute, will be re-raised in the parent. Additionally, the exception object
274will have one extra attribute called :attr:`child_traceback`, which is a string
Georg Brandl21946af2010-10-06 09:28:45 +0000275containing traceback information from the child's point of view.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000276
277The most common exception raised is :exc:`OSError`. This occurs, for example,
278when trying to execute a non-existent file. Applications should prepare for
279:exc:`OSError` exceptions.
280
281A :exc:`ValueError` will be raised if :class:`Popen` is called with invalid
282arguments.
283
284check_call() will raise :exc:`CalledProcessError`, if the called process returns
285a non-zero return code.
286
287
288Security
289^^^^^^^^
290
291Unlike some other popen functions, this implementation will never call /bin/sh
292implicitly. This means that all characters, including shell metacharacters, can
293safely be passed to child processes.
294
295
296Popen Objects
297-------------
298
299Instances of the :class:`Popen` class have the following methods:
300
301
302.. method:: Popen.poll()
303
Georg Brandl2cb103f2008-01-06 16:01:26 +0000304 Check if child process has terminated. Set and return :attr:`returncode`
305 attribute.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000306
307
308.. method:: Popen.wait()
309
Georg Brandl2cb103f2008-01-06 16:01:26 +0000310 Wait for child process to terminate. Set and return :attr:`returncode`
311 attribute.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000312
Georg Brandl143de622008-08-04 06:29:36 +0000313 .. warning::
314
Philip Jenvey26275532009-12-03 02:25:54 +0000315 This will deadlock when using ``stdout=PIPE`` and/or
316 ``stderr=PIPE`` and the child process generates enough output to
317 a pipe such that it blocks waiting for the OS pipe buffer to
318 accept more data. Use :meth:`communicate` to avoid that.
Gregory P. Smith08792502008-08-04 01:03:50 +0000319
Georg Brandl8ec7f652007-08-15 14:28:01 +0000320
321.. method:: Popen.communicate(input=None)
322
323 Interact with process: Send data to stdin. Read data from stdout and stderr,
324 until end-of-file is reached. Wait for process to terminate. The optional
325 *input* argument should be a string to be sent to the child process, or
326 ``None``, if no data should be sent to the child.
327
Georg Brandl17432012008-12-04 21:28:16 +0000328 :meth:`communicate` returns a tuple ``(stdoutdata, stderrdata)``.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000329
Georg Brandl439f2502007-11-24 11:31:46 +0000330 Note that if you want to send data to the process's stdin, you need to create
331 the Popen object with ``stdin=PIPE``. Similarly, to get anything other than
332 ``None`` in the result tuple, you need to give ``stdout=PIPE`` and/or
333 ``stderr=PIPE`` too.
334
Georg Brandl2cb103f2008-01-06 16:01:26 +0000335 .. note::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000336
Georg Brandl2cb103f2008-01-06 16:01:26 +0000337 The data read is buffered in memory, so do not use this method if the data
338 size is large or unlimited.
339
Georg Brandl8ec7f652007-08-15 14:28:01 +0000340
Christian Heimese74c8f22008-04-19 02:23:57 +0000341.. method:: Popen.send_signal(signal)
342
343 Sends the signal *signal* to the child.
344
345 .. note::
346
Brian Curtine5aa8862010-04-02 23:26:06 +0000347 On Windows, SIGTERM is an alias for :meth:`terminate`. CTRL_C_EVENT and
Ezio Melotti9ccc5812010-04-05 08:16:41 +0000348 CTRL_BREAK_EVENT can be sent to processes started with a *creationflags*
Brian Curtine5aa8862010-04-02 23:26:06 +0000349 parameter which includes `CREATE_NEW_PROCESS_GROUP`.
Georg Brandl734de682008-04-19 08:23:59 +0000350
351 .. versionadded:: 2.6
Christian Heimese74c8f22008-04-19 02:23:57 +0000352
353
354.. method:: Popen.terminate()
355
356 Stop the child. On Posix OSs the method sends SIGTERM to the
Andrew M. Kuchling64c6a0e2008-04-21 02:08:00 +0000357 child. On Windows the Win32 API function :cfunc:`TerminateProcess` is called
Christian Heimese74c8f22008-04-19 02:23:57 +0000358 to stop the child.
359
Georg Brandl734de682008-04-19 08:23:59 +0000360 .. versionadded:: 2.6
361
Christian Heimese74c8f22008-04-19 02:23:57 +0000362
363.. method:: Popen.kill()
364
365 Kills the child. On Posix OSs the function sends SIGKILL to the child.
Georg Brandl734de682008-04-19 08:23:59 +0000366 On Windows :meth:`kill` is an alias for :meth:`terminate`.
367
368 .. versionadded:: 2.6
Christian Heimese74c8f22008-04-19 02:23:57 +0000369
370
Georg Brandl8ec7f652007-08-15 14:28:01 +0000371The following attributes are also available:
372
Georg Brandl143de622008-08-04 06:29:36 +0000373.. warning::
374
Georg Brandl16a57f62009-04-27 15:29:09 +0000375 Use :meth:`communicate` rather than :attr:`.stdin.write <stdin>`,
376 :attr:`.stdout.read <stdout>` or :attr:`.stderr.read <stderr>` to avoid
377 deadlocks due to any of the other OS pipe buffers filling up and blocking the
378 child process.
Georg Brandl143de622008-08-04 06:29:36 +0000379
380
Georg Brandl8ec7f652007-08-15 14:28:01 +0000381.. attribute:: Popen.stdin
382
Georg Brandlf5d5a662008-12-06 11:57:12 +0000383 If the *stdin* argument was :data:`PIPE`, this attribute is a file object
384 that provides input to the child process. Otherwise, it is ``None``.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000385
386
387.. attribute:: Popen.stdout
388
Georg Brandlf5d5a662008-12-06 11:57:12 +0000389 If the *stdout* argument was :data:`PIPE`, this attribute is a file object
390 that provides output from the child process. Otherwise, it is ``None``.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000391
392
393.. attribute:: Popen.stderr
394
Georg Brandlf5d5a662008-12-06 11:57:12 +0000395 If the *stderr* argument was :data:`PIPE`, this attribute is a file object
396 that provides error output from the child process. Otherwise, it is
397 ``None``.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000398
399
400.. attribute:: Popen.pid
401
402 The process ID of the child process.
403
Georg Brandl0b56ce02010-03-21 09:28:16 +0000404 Note that if you set the *shell* argument to ``True``, this is the process ID
405 of the spawned shell.
406
Georg Brandl8ec7f652007-08-15 14:28:01 +0000407
408.. attribute:: Popen.returncode
409
Georg Brandl2cb103f2008-01-06 16:01:26 +0000410 The child return code, set by :meth:`poll` and :meth:`wait` (and indirectly
411 by :meth:`communicate`). A ``None`` value indicates that the process
412 hasn't terminated yet.
Georg Brandlc62ef8b2009-01-03 20:55:06 +0000413
Georg Brandl2cb103f2008-01-06 16:01:26 +0000414 A negative value ``-N`` indicates that the child was terminated by signal
415 ``N`` (Unix only).
Georg Brandl8ec7f652007-08-15 14:28:01 +0000416
417
Georg Brandl0ba92b22008-06-22 09:05:29 +0000418.. _subprocess-replacements:
419
Georg Brandl8ec7f652007-08-15 14:28:01 +0000420Replacing Older Functions with the subprocess Module
421----------------------------------------------------
422
423In this section, "a ==> b" means that b can be used as a replacement for a.
424
425.. note::
426
427 All functions in this section fail (more or less) silently if the executed
428 program cannot be found; this module raises an :exc:`OSError` exception.
429
430In the following examples, we assume that the subprocess module is imported with
431"from subprocess import \*".
432
433
434Replacing /bin/sh shell backquote
435^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
436
437::
438
439 output=`mycmd myarg`
440 ==>
441 output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
442
443
Benjamin Petersoncae58482008-10-10 20:38:49 +0000444Replacing shell pipeline
445^^^^^^^^^^^^^^^^^^^^^^^^
Georg Brandl8ec7f652007-08-15 14:28:01 +0000446
447::
448
449 output=`dmesg | grep hda`
450 ==>
451 p1 = Popen(["dmesg"], stdout=PIPE)
452 p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
Gregory P. Smithe3e967f2011-02-05 21:49:56 +0000453 p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000454 output = p2.communicate()[0]
455
Gregory P. Smithe3e967f2011-02-05 21:49:56 +0000456The p1.stdout.close() call after starting the p2 is important in order for p1
457to receive a SIGPIPE if p2 exits before p1.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000458
R. David Murrayccb9d4b2009-06-09 00:44:22 +0000459Replacing :func:`os.system`
460^^^^^^^^^^^^^^^^^^^^^^^^^^^
Georg Brandl8ec7f652007-08-15 14:28:01 +0000461
462::
463
464 sts = os.system("mycmd" + " myarg")
465 ==>
466 p = Popen("mycmd" + " myarg", shell=True)
Georg Brandl2e1285b2009-07-16 07:38:35 +0000467 sts = os.waitpid(p.pid, 0)[1]
Georg Brandl8ec7f652007-08-15 14:28:01 +0000468
469Notes:
470
471* Calling the program through the shell is usually not required.
472
473* It's easier to look at the :attr:`returncode` attribute than the exit status.
474
475A more realistic example would look like this::
476
477 try:
478 retcode = call("mycmd" + " myarg", shell=True)
479 if retcode < 0:
480 print >>sys.stderr, "Child was terminated by signal", -retcode
481 else:
482 print >>sys.stderr, "Child returned", retcode
483 except OSError, e:
484 print >>sys.stderr, "Execution failed:", e
485
486
R. David Murrayccb9d4b2009-06-09 00:44:22 +0000487Replacing the :func:`os.spawn <os.spawnl>` family
488^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Georg Brandl8ec7f652007-08-15 14:28:01 +0000489
490P_NOWAIT example::
491
492 pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")
493 ==>
494 pid = Popen(["/bin/mycmd", "myarg"]).pid
495
496P_WAIT example::
497
498 retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg")
499 ==>
500 retcode = call(["/bin/mycmd", "myarg"])
501
502Vector example::
503
504 os.spawnvp(os.P_NOWAIT, path, args)
505 ==>
506 Popen([path] + args[1:])
507
508Environment example::
509
510 os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env)
511 ==>
512 Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})
513
514
R. David Murrayccb9d4b2009-06-09 00:44:22 +0000515Replacing :func:`os.popen`, :func:`os.popen2`, :func:`os.popen3`
516^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Georg Brandl8ec7f652007-08-15 14:28:01 +0000517
518::
519
Philip Jenvey8b902042009-09-29 19:10:15 +0000520 pipe = os.popen("cmd", 'r', bufsize)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000521 ==>
Philip Jenvey8b902042009-09-29 19:10:15 +0000522 pipe = Popen("cmd", shell=True, bufsize=bufsize, stdout=PIPE).stdout
Georg Brandl8ec7f652007-08-15 14:28:01 +0000523
524::
525
Philip Jenvey8b902042009-09-29 19:10:15 +0000526 pipe = os.popen("cmd", 'w', bufsize)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000527 ==>
Philip Jenvey8b902042009-09-29 19:10:15 +0000528 pipe = Popen("cmd", shell=True, bufsize=bufsize, stdin=PIPE).stdin
Georg Brandl8ec7f652007-08-15 14:28:01 +0000529
530::
531
Philip Jenvey8b902042009-09-29 19:10:15 +0000532 (child_stdin, child_stdout) = os.popen2("cmd", mode, bufsize)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000533 ==>
Philip Jenvey8b902042009-09-29 19:10:15 +0000534 p = Popen("cmd", shell=True, bufsize=bufsize,
Georg Brandl8ec7f652007-08-15 14:28:01 +0000535 stdin=PIPE, stdout=PIPE, close_fds=True)
536 (child_stdin, child_stdout) = (p.stdin, p.stdout)
537
538::
539
540 (child_stdin,
541 child_stdout,
Philip Jenvey8b902042009-09-29 19:10:15 +0000542 child_stderr) = os.popen3("cmd", mode, bufsize)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000543 ==>
Philip Jenvey8b902042009-09-29 19:10:15 +0000544 p = Popen("cmd", shell=True, bufsize=bufsize,
Georg Brandl8ec7f652007-08-15 14:28:01 +0000545 stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
546 (child_stdin,
547 child_stdout,
548 child_stderr) = (p.stdin, p.stdout, p.stderr)
549
550::
551
Philip Jenvey8b902042009-09-29 19:10:15 +0000552 (child_stdin, child_stdout_and_stderr) = os.popen4("cmd", mode,
553 bufsize)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000554 ==>
Philip Jenvey8b902042009-09-29 19:10:15 +0000555 p = Popen("cmd", shell=True, bufsize=bufsize,
Georg Brandl8ec7f652007-08-15 14:28:01 +0000556 stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
557 (child_stdin, child_stdout_and_stderr) = (p.stdin, p.stdout)
558
Philip Jenvey8b902042009-09-29 19:10:15 +0000559On Unix, os.popen2, os.popen3 and os.popen4 also accept a sequence as
560the command to execute, in which case arguments will be passed
561directly to the program without shell intervention. This usage can be
562replaced as follows::
563
564 (child_stdin, child_stdout) = os.popen2(["/bin/ls", "-l"], mode,
565 bufsize)
566 ==>
567 p = Popen(["/bin/ls", "-l"], bufsize=bufsize, stdin=PIPE, stdout=PIPE)
568 (child_stdin, child_stdout) = (p.stdin, p.stdout)
569
R. David Murrayccb9d4b2009-06-09 00:44:22 +0000570Return code handling translates as follows::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000571
Philip Jenvey8b902042009-09-29 19:10:15 +0000572 pipe = os.popen("cmd", 'w')
R. David Murrayccb9d4b2009-06-09 00:44:22 +0000573 ...
574 rc = pipe.close()
Stefan Kraha253dc12010-07-14 10:06:07 +0000575 if rc is not None and rc >> 8:
R. David Murrayccb9d4b2009-06-09 00:44:22 +0000576 print "There were some errors"
577 ==>
Philip Jenvey8b902042009-09-29 19:10:15 +0000578 process = Popen("cmd", 'w', shell=True, stdin=PIPE)
R. David Murrayccb9d4b2009-06-09 00:44:22 +0000579 ...
580 process.stdin.close()
581 if process.wait() != 0:
582 print "There were some errors"
583
584
585Replacing functions from the :mod:`popen2` module
586^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Georg Brandl8ec7f652007-08-15 14:28:01 +0000587
Georg Brandl8ec7f652007-08-15 14:28:01 +0000588::
589
590 (child_stdout, child_stdin) = popen2.popen2("somestring", bufsize, mode)
591 ==>
592 p = Popen(["somestring"], shell=True, bufsize=bufsize,
593 stdin=PIPE, stdout=PIPE, close_fds=True)
594 (child_stdout, child_stdin) = (p.stdout, p.stdin)
595
Philip Jenvey8b902042009-09-29 19:10:15 +0000596On Unix, popen2 also accepts a sequence as the command to execute, in
597which case arguments will be passed directly to the program without
598shell intervention. This usage can be replaced as follows::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000599
Philip Jenvey8b902042009-09-29 19:10:15 +0000600 (child_stdout, child_stdin) = popen2.popen2(["mycmd", "myarg"], bufsize,
601 mode)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000602 ==>
603 p = Popen(["mycmd", "myarg"], bufsize=bufsize,
604 stdin=PIPE, stdout=PIPE, close_fds=True)
605 (child_stdout, child_stdin) = (p.stdout, p.stdin)
606
Georg Brandlf5d5a662008-12-06 11:57:12 +0000607:class:`popen2.Popen3` and :class:`popen2.Popen4` basically work as
608:class:`subprocess.Popen`, except that:
Georg Brandl8ec7f652007-08-15 14:28:01 +0000609
Georg Brandlf5d5a662008-12-06 11:57:12 +0000610* :class:`Popen` raises an exception if the execution fails.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000611
612* the *capturestderr* argument is replaced with the *stderr* argument.
613
Georg Brandlf5d5a662008-12-06 11:57:12 +0000614* ``stdin=PIPE`` and ``stdout=PIPE`` must be specified.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000615
616* popen2 closes all file descriptors by default, but you have to specify
Georg Brandlf5d5a662008-12-06 11:57:12 +0000617 ``close_fds=True`` with :class:`Popen`.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000618