@@ -249,50 +249,65 @@ Convenience Functions
249249This module also defines four shortcut functions:
250250251251252-.. function:: call(*popenargs, **kwargs)
252+.. function:: call(*popenargs, timeout=None, **kwargs)
253253254254 Run command with arguments. Wait for command to complete, then return the
255255:attr:`returncode` attribute.
256256257- The arguments are the same as for the :class:`Popen` constructor. Example::
257+ The arguments are the same as for the :class:`Popen` constructor, with the
258+ exception of the *timeout* argument, which is given to :meth:`Popen.wait`.
259+ Example::
258260259261 >>> retcode = subprocess.call(["ls", "-l"])
260262263+ If the timeout expires, the child process will be killed and then waited for
264+ again. The :exc:`TimeoutExpired` exception will be re-raised after the child
265+ process has terminated.
266+261267 .. warning::
262268263269 Like :meth:`Popen.wait`, this will deadlock when using
264270 ``stdout=PIPE`` and/or ``stderr=PIPE`` and the child process
265271 generates enough output to a pipe such that it blocks waiting
266272 for the OS pipe buffer to accept more data.
267273274+ .. versionchanged:: 3.2
275+ *timeout* was added.
276+268277269-.. function:: check_call(*popenargs, **kwargs)
278+.. function:: check_call(*popenargs, timeout=None, **kwargs)
270279271280 Run command with arguments. Wait for command to complete. If the exit code was
272281 zero then return, otherwise raise :exc:`CalledProcessError`. The
273282:exc:`CalledProcessError` object will have the return code in the
274283:attr:`returncode` attribute.
275284276- The arguments are the same as for the :class:`Popen` constructor. Example::
285+ The arguments are the same as for the :func:`call` function. Example::
277286278287 >>> subprocess.check_call(["ls", "-l"])
279288 0
280289290+ As in the :func:`call` function, if the timeout expires, the child process
291+ will be killed and the wait retried. The :exc:`TimeoutExpired` exception
292+ will be re-raised after the child process has terminated.
293+281294 .. warning::
282295283296 See the warning for :func:`call`.
284297298+ .. versionchanged:: 3.2
299+ *timeout* was added.
285300286-.. function:: check_output(*popenargs, **kwargs)
301+302+.. function:: check_output(*popenargs, timeout=None, **kwargs)
287303288304 Run command with arguments and return its output as a byte string.
289305290306 If the exit code was non-zero it raises a :exc:`CalledProcessError`. The
291307:exc:`CalledProcessError` object will have the return code in the
292-:attr:`returncode`
293- attribute and output in the :attr:`output` attribute.
308+:attr:`returncode` attribute and output in the :attr:`output` attribute.
294309295- The arguments are the same as for the :class:`Popen` constructor. Example::
310+ The arguments are the same as for the :func:`call` function. Example::
296311297312 >>> subprocess.check_output(["ls", "-l", "/dev/null"])
298313 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
@@ -305,8 +320,17 @@ This module also defines four shortcut functions:
305320 ... stderr=subprocess.STDOUT)
306321 b'ls: non_existent_file: No such file or directory\n'
307322323+ As in the :func:`call` function, if the timeout expires, the child process
324+ will be killed and the wait retried. The :exc:`TimeoutExpired` exception
325+ will be re-raised after the child process has terminated. The output from
326+ the child process so far will be in the :attr:`output` attribute of the
327+ exception.
328+308329 .. versionadded:: 3.1
309330331+ .. versionchanged:: 3.2
332+ *timeout* was added.
333+310334311335.. function:: getstatusoutput(cmd)
312336@@ -359,6 +383,10 @@ arguments.
359383check_call() will raise :exc:`CalledProcessError`, if the called process returns
360384a non-zero return code.
361385386+All of the functions and methods that accept a *timeout* parameter, such as
387+:func:`call` and :meth:`Popen.communicate` will raise :exc:`TimeoutExpired` if
388+the timeout expires before the process exits.
389+362390363391Security
364392^^^^^^^^
@@ -380,23 +408,30 @@ Instances of the :class:`Popen` class have the following methods:
380408 attribute.
381409382410383-.. method:: Popen.wait()
411+.. method:: Popen.wait(timeout=None)
384412385413 Wait for child process to terminate. Set and return :attr:`returncode`
386414 attribute.
387415416+ If the process does not terminate after *timeout* seconds, raise a
417+:exc:`TimeoutExpired` exception. It is safe to catch this exception and
418+ retry the wait.
419+388420 .. warning::
389421390422 This will deadlock when using ``stdout=PIPE`` and/or
391423 ``stderr=PIPE`` and the child process generates enough output to
392424 a pipe such that it blocks waiting for the OS pipe buffer to
393425 accept more data. Use :meth:`communicate` to avoid that.
394426427+ .. versionchanged:: 3.2
428+ *timeout* was added.
395429396-.. method:: Popen.communicate(input=None)
430+431+.. method:: Popen.communicate(input=None, timeout=None)
397432398433 Interact with process: Send data to stdin. Read data from stdout and stderr,
399- until end-of-file is reached. Wait for process to terminate. The optional
434+ until end-of-file is reached. Wait for process to terminate. The optional
400435 *input* argument should be a byte string to be sent to the child process, or
401436 ``None``, if no data should be sent to the child.
402437@@ -407,11 +442,29 @@ Instances of the :class:`Popen` class have the following methods:
407442 ``None`` in the result tuple, you need to give ``stdout=PIPE`` and/or
408443 ``stderr=PIPE`` too.
409444445+ If the process does not terminate after *timeout* seconds, a
446+:exc:`TimeoutExpired` exception will be raised. Catching this exception and
447+ retrying communication will not lose any output.
448+449+ The child process is not killed if the timeout expires, so in order to
450+ cleanup properly a well-behaved application should kill the child process and
451+ finish communication::
452+453+ proc = subprocess.Popen(...)
454+ try:
455+ outs, errs = proc.communicate(timeout=15)
456+ except TimeoutExpired:
457+ proc.kill()
458+ outs, errs = proc.communicate()
459+410460 .. note::
411461412462 The data read is buffered in memory, so do not use this method if the data
413463 size is large or unlimited.
414464465+ .. versionchanged:: 3.2
466+ *timeout* was added.
467+415468416469.. method:: Popen.send_signal(signal)
417470