don't use subprocess.call with PIPEs as the child can fill the pipe buf and

deadlock. add a warning to subprocess docs about this, similar to Popen.wait's.
refs http://bugs.jython.org/issue1351
This commit is contained in:
Philip Jenvey 2009-05-22 05:35:32 +00:00
parent 9b6f13ee82
commit 739aa36818
2 changed files with 14 additions and 2 deletions

View File

@ -157,6 +157,12 @@ This module also defines two shortcut functions:
retcode = call(["ls", "-l"])
.. warning::
Like :meth:`Popen.wait`, this will deadlock if the child process
generates enough output to a stdout or stderr pipe such that it blocks
waiting for the OS pipe buffer to accept more data.
.. function:: check_call(*popenargs, **kwargs)
@ -171,6 +177,10 @@ This module also defines two shortcut functions:
.. versionadded:: 2.5
.. warning::
See the warning for :func:`call`.
.. function:: check_output(*popenargs, **kwargs)

View File

@ -2,6 +2,7 @@
# All tests are executed with environment variables ignored
# See test_cmd_line_script.py for testing of script execution
import os
import test.test_support, unittest
import sys
import subprocess
@ -29,8 +30,9 @@ class CmdLineTest(unittest.TestCase):
def exit_code(self, *args):
cmd_line = [sys.executable, '-E']
cmd_line.extend(args)
return subprocess.call(cmd_line, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
with open(os.devnull, 'w') as devnull:
return subprocess.call(cmd_line, stdout=devnull,
stderr=subprocess.STDOUT)
def test_directories(self):
self.assertNotEqual(self.exit_code('.'), 0)