blob: 6fd1b980a0878833bacfa3748c4a13581d91deb8 [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
26
27Using the subprocess Module
28---------------------------
29
30This module defines one class called :class:`Popen`:
31
32
33.. 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)
34
35 Arguments are:
36
37 *args* should be a string, or a sequence of program arguments. The program to
38 execute is normally the first item in the args sequence or string, but can be
39 explicitly set by using the executable argument.
40
41 On Unix, with *shell=False* (default): In this case, the Popen class uses
42 :meth:`os.execvp` to execute the child program. *args* should normally be a
43 sequence. A string will be treated as a sequence with the string as the only
44 item (the program to execute).
45
46 On Unix, with *shell=True*: If args is a string, it specifies the command string
47 to execute through the shell. If *args* is a sequence, the first item specifies
48 the command string, and any additional items will be treated as additional shell
49 arguments.
50
51 On Windows: the :class:`Popen` class uses CreateProcess() to execute the child
52 program, which operates on strings. If *args* is a sequence, it will be
53 converted to a string using the :meth:`list2cmdline` method. Please note that
54 not all MS Windows applications interpret the command line the same way:
55 :meth:`list2cmdline` is designed for applications using the same rules as the MS
56 C runtime.
57
58 *bufsize*, if given, has the same meaning as the corresponding argument to the
59 built-in open() function: :const:`0` means unbuffered, :const:`1` means line
60 buffered, any other positive value means use a buffer of (approximately) that
61 size. A negative *bufsize* means to use the system default, which usually means
62 fully buffered. The default value for *bufsize* is :const:`0` (unbuffered).
63
64 The *executable* argument specifies the program to execute. It is very seldom
65 needed: Usually, the program to execute is defined by the *args* argument. If
66 ``shell=True``, the *executable* argument specifies which shell to use. On Unix,
67 the default shell is :file:`/bin/sh`. On Windows, the default shell is
68 specified by the :envvar:`COMSPEC` environment variable.
69
70 *stdin*, *stdout* and *stderr* specify the executed programs' standard input,
71 standard output and standard error file handles, respectively. Valid values are
72 ``PIPE``, an existing file descriptor (a positive integer), an existing file
73 object, and ``None``. ``PIPE`` indicates that a new pipe to the child should be
74 created. With ``None``, no redirection will occur; the child's file handles
75 will be inherited from the parent. Additionally, *stderr* can be ``STDOUT``,
76 which indicates that the stderr data from the applications should be captured
77 into the same file handle as for stdout.
78
79 If *preexec_fn* is set to a callable object, this object will be called in the
80 child process just before the child is executed. (Unix only)
81
82 If *close_fds* is true, all file descriptors except :const:`0`, :const:`1` and
83 :const:`2` will be closed before the child process is executed. (Unix only).
84 Or, on Windows, if *close_fds* is true then no handles will be inherited by the
85 child process. Note that on Windows, you cannot set *close_fds* to true and
86 also redirect the standard handles by setting *stdin*, *stdout* or *stderr*.
87
88 If *shell* is :const:`True`, the specified command will be executed through the
89 shell.
90
91 If *cwd* is not ``None``, the child's current directory will be changed to *cwd*
92 before it is executed. Note that this directory is not considered when
93 searching the executable, so you can't specify the program's path relative to
94 *cwd*.
95
Georg Brandlf801b0f2008-04-19 16:58:49 +000096 If *env* is not ``None``, it must be a mapping that defines the environment
97 variables for the new process; these are used instead of inheriting the current
98 process' environment, which is the default behavior.
Georg Brandl8ec7f652007-08-15 14:28:01 +000099
100 If *universal_newlines* is :const:`True`, the file objects stdout and stderr are
101 opened as text files, but lines may be terminated by any of ``'\n'``, the Unix
102 end-of-line convention, ``'\r'``, the Macintosh convention or ``'\r\n'``, the
103 Windows convention. All of these external representations are seen as ``'\n'``
104 by the Python program.
105
106 .. note::
107
108 This feature is only available if Python is built with universal newline support
109 (the default). Also, the newlines attribute of the file objects :attr:`stdout`,
110 :attr:`stdin` and :attr:`stderr` are not updated by the communicate() method.
111
112 The *startupinfo* and *creationflags*, if given, will be passed to the
113 underlying CreateProcess() function. They can specify things such as appearance
114 of the main window and priority for the new process. (Windows only)
115
116
117Convenience Functions
118^^^^^^^^^^^^^^^^^^^^^
119
120This module also defines two shortcut functions:
121
122
123.. function:: call(*popenargs, **kwargs)
124
125 Run command with arguments. Wait for command to complete, then return the
126 :attr:`returncode` attribute.
127
128 The arguments are the same as for the Popen constructor. Example::
129
130 retcode = call(["ls", "-l"])
131
132
133.. function:: check_call(*popenargs, **kwargs)
134
135 Run command with arguments. Wait for command to complete. If the exit code was
136 zero then return, otherwise raise :exc:`CalledProcessError.` The
137 :exc:`CalledProcessError` object will have the return code in the
138 :attr:`returncode` attribute.
139
140 The arguments are the same as for the Popen constructor. Example::
141
142 check_call(["ls", "-l"])
143
144 .. versionadded:: 2.5
145
146
147Exceptions
148^^^^^^^^^^
149
150Exceptions raised in the child process, before the new program has started to
151execute, will be re-raised in the parent. Additionally, the exception object
152will have one extra attribute called :attr:`child_traceback`, which is a string
153containing traceback information from the childs point of view.
154
155The most common exception raised is :exc:`OSError`. This occurs, for example,
156when trying to execute a non-existent file. Applications should prepare for
157:exc:`OSError` exceptions.
158
159A :exc:`ValueError` will be raised if :class:`Popen` is called with invalid
160arguments.
161
162check_call() will raise :exc:`CalledProcessError`, if the called process returns
163a non-zero return code.
164
165
166Security
167^^^^^^^^
168
169Unlike some other popen functions, this implementation will never call /bin/sh
170implicitly. This means that all characters, including shell metacharacters, can
171safely be passed to child processes.
172
173
174Popen Objects
175-------------
176
177Instances of the :class:`Popen` class have the following methods:
178
179
180.. method:: Popen.poll()
181
Georg Brandl2cb103f2008-01-06 16:01:26 +0000182 Check if child process has terminated. Set and return :attr:`returncode`
183 attribute.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000184
185
186.. method:: Popen.wait()
187
Georg Brandl2cb103f2008-01-06 16:01:26 +0000188 Wait for child process to terminate. Set and return :attr:`returncode`
189 attribute.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000190
191
192.. method:: Popen.communicate(input=None)
193
194 Interact with process: Send data to stdin. Read data from stdout and stderr,
195 until end-of-file is reached. Wait for process to terminate. The optional
196 *input* argument should be a string to be sent to the child process, or
197 ``None``, if no data should be sent to the child.
198
Georg Brandl2cb103f2008-01-06 16:01:26 +0000199 :meth:`communicate` returns a tuple ``(stdout, stderr)``.
Georg Brandl8ec7f652007-08-15 14:28:01 +0000200
Georg Brandl439f2502007-11-24 11:31:46 +0000201 Note that if you want to send data to the process's stdin, you need to create
202 the Popen object with ``stdin=PIPE``. Similarly, to get anything other than
203 ``None`` in the result tuple, you need to give ``stdout=PIPE`` and/or
204 ``stderr=PIPE`` too.
205
Georg Brandl2cb103f2008-01-06 16:01:26 +0000206 .. note::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000207
Georg Brandl2cb103f2008-01-06 16:01:26 +0000208 The data read is buffered in memory, so do not use this method if the data
209 size is large or unlimited.
210
Georg Brandl8ec7f652007-08-15 14:28:01 +0000211
Christian Heimese74c8f22008-04-19 02:23:57 +0000212.. method:: Popen.send_signal(signal)
213
214 Sends the signal *signal* to the child.
215
216 .. note::
217
218 On Windows only SIGTERM is supported so far. It's an alias for
Georg Brandl734de682008-04-19 08:23:59 +0000219 :meth:`terminate`.
220
221 .. versionadded:: 2.6
Christian Heimese74c8f22008-04-19 02:23:57 +0000222
223
224.. method:: Popen.terminate()
225
226 Stop the child. On Posix OSs the method sends SIGTERM to the
Andrew M. Kuchling64c6a0e2008-04-21 02:08:00 +0000227 child. On Windows the Win32 API function :cfunc:`TerminateProcess` is called
Christian Heimese74c8f22008-04-19 02:23:57 +0000228 to stop the child.
229
Georg Brandl734de682008-04-19 08:23:59 +0000230 .. versionadded:: 2.6
231
Christian Heimese74c8f22008-04-19 02:23:57 +0000232
233.. method:: Popen.kill()
234
235 Kills the child. On Posix OSs the function sends SIGKILL to the child.
Georg Brandl734de682008-04-19 08:23:59 +0000236 On Windows :meth:`kill` is an alias for :meth:`terminate`.
237
238 .. versionadded:: 2.6
Christian Heimese74c8f22008-04-19 02:23:57 +0000239
240
Georg Brandl8ec7f652007-08-15 14:28:01 +0000241The following attributes are also available:
242
Georg Brandl8ec7f652007-08-15 14:28:01 +0000243.. attribute:: Popen.stdin
244
245 If the *stdin* argument is ``PIPE``, this attribute is a file object that
246 provides input to the child process. Otherwise, it is ``None``.
247
248
249.. attribute:: Popen.stdout
250
251 If the *stdout* argument is ``PIPE``, this attribute is a file object that
252 provides output from the child process. Otherwise, it is ``None``.
253
254
255.. attribute:: Popen.stderr
256
257 If the *stderr* argument is ``PIPE``, this attribute is file object that
258 provides error output from the child process. Otherwise, it is ``None``.
259
260
261.. attribute:: Popen.pid
262
263 The process ID of the child process.
264
265
266.. attribute:: Popen.returncode
267
Georg Brandl2cb103f2008-01-06 16:01:26 +0000268 The child return code, set by :meth:`poll` and :meth:`wait` (and indirectly
269 by :meth:`communicate`). A ``None`` value indicates that the process
270 hasn't terminated yet.
271
272 A negative value ``-N`` indicates that the child was terminated by signal
273 ``N`` (Unix only).
Georg Brandl8ec7f652007-08-15 14:28:01 +0000274
275
Georg Brandl0ba92b22008-06-22 09:05:29 +0000276.. _subprocess-replacements:
277
Georg Brandl8ec7f652007-08-15 14:28:01 +0000278Replacing Older Functions with the subprocess Module
279----------------------------------------------------
280
281In this section, "a ==> b" means that b can be used as a replacement for a.
282
283.. note::
284
285 All functions in this section fail (more or less) silently if the executed
286 program cannot be found; this module raises an :exc:`OSError` exception.
287
288In the following examples, we assume that the subprocess module is imported with
289"from subprocess import \*".
290
291
292Replacing /bin/sh shell backquote
293^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
294
295::
296
297 output=`mycmd myarg`
298 ==>
299 output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
300
301
302Replacing shell pipe line
303^^^^^^^^^^^^^^^^^^^^^^^^^
304
305::
306
307 output=`dmesg | grep hda`
308 ==>
309 p1 = Popen(["dmesg"], stdout=PIPE)
310 p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
311 output = p2.communicate()[0]
312
313
314Replacing os.system()
315^^^^^^^^^^^^^^^^^^^^^
316
317::
318
319 sts = os.system("mycmd" + " myarg")
320 ==>
321 p = Popen("mycmd" + " myarg", shell=True)
322 sts = os.waitpid(p.pid, 0)
323
324Notes:
325
326* Calling the program through the shell is usually not required.
327
328* It's easier to look at the :attr:`returncode` attribute than the exit status.
329
330A more realistic example would look like this::
331
332 try:
333 retcode = call("mycmd" + " myarg", shell=True)
334 if retcode < 0:
335 print >>sys.stderr, "Child was terminated by signal", -retcode
336 else:
337 print >>sys.stderr, "Child returned", retcode
338 except OSError, e:
339 print >>sys.stderr, "Execution failed:", e
340
341
342Replacing os.spawn\*
343^^^^^^^^^^^^^^^^^^^^
344
345P_NOWAIT example::
346
347 pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")
348 ==>
349 pid = Popen(["/bin/mycmd", "myarg"]).pid
350
351P_WAIT example::
352
353 retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg")
354 ==>
355 retcode = call(["/bin/mycmd", "myarg"])
356
357Vector example::
358
359 os.spawnvp(os.P_NOWAIT, path, args)
360 ==>
361 Popen([path] + args[1:])
362
363Environment example::
364
365 os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env)
366 ==>
367 Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})
368
369
370Replacing os.popen\*
371^^^^^^^^^^^^^^^^^^^^
372
373::
374
Georg Brandl8bd05192008-06-22 18:11:52 +0000375 pipe = os.popen(cmd, 'r', bufsize)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000376 ==>
377 pipe = Popen(cmd, shell=True, bufsize=bufsize, stdout=PIPE).stdout
378
379::
380
Georg Brandl8bd05192008-06-22 18:11:52 +0000381 pipe = os.popen(cmd, 'w', bufsize)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000382 ==>
383 pipe = Popen(cmd, shell=True, bufsize=bufsize, stdin=PIPE).stdin
384
385::
386
387 (child_stdin, child_stdout) = os.popen2(cmd, mode, bufsize)
388 ==>
389 p = Popen(cmd, shell=True, bufsize=bufsize,
390 stdin=PIPE, stdout=PIPE, close_fds=True)
391 (child_stdin, child_stdout) = (p.stdin, p.stdout)
392
393::
394
395 (child_stdin,
396 child_stdout,
397 child_stderr) = os.popen3(cmd, mode, bufsize)
398 ==>
399 p = Popen(cmd, shell=True, bufsize=bufsize,
400 stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
401 (child_stdin,
402 child_stdout,
403 child_stderr) = (p.stdin, p.stdout, p.stderr)
404
405::
406
407 (child_stdin, child_stdout_and_stderr) = os.popen4(cmd, mode, bufsize)
408 ==>
409 p = Popen(cmd, shell=True, bufsize=bufsize,
410 stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
411 (child_stdin, child_stdout_and_stderr) = (p.stdin, p.stdout)
412
413
414Replacing popen2.\*
415^^^^^^^^^^^^^^^^^^^
416
417.. note::
418
419 If the cmd argument to popen2 functions is a string, the command is executed
420 through /bin/sh. If it is a list, the command is directly executed.
421
422::
423
424 (child_stdout, child_stdin) = popen2.popen2("somestring", bufsize, mode)
425 ==>
426 p = Popen(["somestring"], shell=True, bufsize=bufsize,
427 stdin=PIPE, stdout=PIPE, close_fds=True)
428 (child_stdout, child_stdin) = (p.stdout, p.stdin)
429
430::
431
432 (child_stdout, child_stdin) = popen2.popen2(["mycmd", "myarg"], bufsize, mode)
433 ==>
434 p = Popen(["mycmd", "myarg"], bufsize=bufsize,
435 stdin=PIPE, stdout=PIPE, close_fds=True)
436 (child_stdout, child_stdin) = (p.stdout, p.stdin)
437
438The popen2.Popen3 and popen2.Popen4 basically works as subprocess.Popen, except
439that:
440
441* subprocess.Popen raises an exception if the execution fails
442
443* the *capturestderr* argument is replaced with the *stderr* argument.
444
445* stdin=PIPE and stdout=PIPE must be specified.
446
447* popen2 closes all file descriptors by default, but you have to specify
448 close_fds=True with subprocess.Popen.
449