From 0c3949c963c9f39095f85c5ec24d0f958e915ae9 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sun, 9 Feb 2014 02:51:40 +0100 Subject: [PATCH] asyncio: Remove Process.subprocess attribute; it's too easy to get inconsistent Process and Popen objects --- Doc/library/asyncio-subprocess.rst | 6 +----- Lib/asyncio/subprocess.py | 4 ---- Lib/test/test_asyncio/test_subprocess.py | 20 -------------------- 3 files changed, 1 insertion(+), 29 deletions(-) diff --git a/Doc/library/asyncio-subprocess.rst b/Doc/library/asyncio-subprocess.rst index a2c46dc372a..5e6e657e3e4 100644 --- a/Doc/library/asyncio-subprocess.rst +++ b/Doc/library/asyncio-subprocess.rst @@ -87,10 +87,6 @@ Process Standard error stream (read), ``None`` if the process was created with ``stderr=None``. - .. attribute:: subprocess - - Underlying :class:`subprocess.Popen` object. - .. method:: communicate(input=None) Interact with process: Send data to stdin. Read data from stdout and @@ -102,7 +98,7 @@ Process :meth:`communicate` returns a tuple ``(stdoutdata, stderrdata)``. Note that if you want to send data to the process's stdin, you need to - create the Popen object with ``stdin=PIPE``. Similarly, to get anything + create the Process object with ``stdin=PIPE``. Similarly, to get anything other than ``None`` in the result tuple, you need to give ``stdout=PIPE`` and/or ``stderr=PIPE`` too. diff --git a/Lib/asyncio/subprocess.py b/Lib/asyncio/subprocess.py index 3047894b380..848d64f9701 100644 --- a/Lib/asyncio/subprocess.py +++ b/Lib/asyncio/subprocess.py @@ -106,10 +106,6 @@ class Process: yield from waiter return waiter.result() - @property - def subprocess(self): - return self._transport.get_extra_info('subprocess') - def _check_alive(self): if self._transport.get_returncode() is not None: raise ProcessLookupError() diff --git a/Lib/test/test_asyncio/test_subprocess.py b/Lib/test/test_asyncio/test_subprocess.py index 785156c77fb..1b2f05bef28 100644 --- a/Lib/test/test_asyncio/test_subprocess.py +++ b/Lib/test/test_asyncio/test_subprocess.py @@ -7,9 +7,6 @@ from test import support if sys.platform != 'win32': from asyncio import unix_events -# Program exiting quickly -PROGRAM_EXIT_FAST = [sys.executable, '-c', 'pass'] - # Program blocking PROGRAM_BLOCKED = [sys.executable, '-c', 'import time; time.sleep(3600)'] @@ -119,23 +116,6 @@ class SubprocessMixin: returncode = self.loop.run_until_complete(proc.wait()) self.assertEqual(-signal.SIGHUP, returncode) - def test_subprocess(self): - args = PROGRAM_EXIT_FAST - - @asyncio.coroutine - def run(): - proc = yield from asyncio.create_subprocess_exec(*args, - loop=self.loop) - yield from proc.wait() - # need to poll subprocess.Popen, otherwise the returncode - # attribute is not set - proc.subprocess.wait() - return proc - - proc = self.loop.run_until_complete(run()) - self.assertEqual(proc.subprocess.returncode, proc.returncode) - self.assertEqual(proc.subprocess.pid, proc.pid) - def test_broken_pipe(self): large_data = b'x' * support.PIPE_MAX_SIZE