Commit 08792502 authored by Gregory P. Smith's avatar Gregory P. Smith

issue1606: Add warnings to the subprocess documentation about common pitfalls

of using pipes that cause deadlocks.
parent 814820bb
......@@ -193,6 +193,10 @@ Instances of the :class:`Popen` class have the following methods:
Wait for child process to terminate. Set and return :attr:`returncode`
attribute.
warning:: This will deadlock if the child process generates enough output
to a stdout or stderr pipe causing it to block waiting for the OS's pipe
buffer to accept more data.
.. method:: Popen.communicate(input=None)
......@@ -250,18 +254,30 @@ The following attributes are also available:
If the *stdin* argument is ``PIPE``, this attribute is a file object that
provides input to the child process. Otherwise, it is ``None``.
warning:: Use :meth:`communicate` rather than .stdin.write() to avoid
deadlocks due to any of the other pipe buffers filling up and blocking the
child process.
.. attribute:: Popen.stdout
If the *stdout* argument is ``PIPE``, this attribute is a file object that
provides output from the child process. Otherwise, it is ``None``.
warning:: Use :meth:`communicate` rather than .stdout.read() to avoid
deadlocks due to any of the other pipe buffers filling up and blocking the
child process.
.. attribute:: Popen.stderr
If the *stderr* argument is ``PIPE``, this attribute is file object that
provides error output from the child process. Otherwise, it is ``None``.
warning:: Use :meth:`communicate` rather than .stderr.read() to avoid
deadlocks due to any of the other pipe buffers filling up and blocking the
child process.
.. attribute:: Popen.pid
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment