asyncio: Remove Process.subprocess attribute; it's too easy to get inconsistent

Process and Popen objects
This commit is contained in:
Victor Stinner 2014-02-09 02:51:40 +01:00
parent 313f829ce8
commit 0c3949c963
3 changed files with 1 additions and 29 deletions

View file

@ -87,10 +87,6 @@ Process
Standard error stream (read), ``None`` if the process was created with Standard error stream (read), ``None`` if the process was created with
``stderr=None``. ``stderr=None``.
.. attribute:: subprocess
Underlying :class:`subprocess.Popen` object.
.. method:: communicate(input=None) .. method:: communicate(input=None)
Interact with process: Send data to stdin. Read data from stdout and Interact with process: Send data to stdin. Read data from stdout and
@ -102,7 +98,7 @@ Process
:meth:`communicate` returns a tuple ``(stdoutdata, stderrdata)``. :meth:`communicate` returns a tuple ``(stdoutdata, stderrdata)``.
Note that if you want to send data to the process's stdin, you need to 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`` other than ``None`` in the result tuple, you need to give ``stdout=PIPE``
and/or ``stderr=PIPE`` too. and/or ``stderr=PIPE`` too.

View file

@ -106,10 +106,6 @@ class Process:
yield from waiter yield from waiter
return waiter.result() return waiter.result()
@property
def subprocess(self):
return self._transport.get_extra_info('subprocess')
def _check_alive(self): def _check_alive(self):
if self._transport.get_returncode() is not None: if self._transport.get_returncode() is not None:
raise ProcessLookupError() raise ProcessLookupError()

View file

@ -7,9 +7,6 @@ from test import support
if sys.platform != 'win32': if sys.platform != 'win32':
from asyncio import unix_events from asyncio import unix_events
# Program exiting quickly
PROGRAM_EXIT_FAST = [sys.executable, '-c', 'pass']
# Program blocking # Program blocking
PROGRAM_BLOCKED = [sys.executable, '-c', 'import time; time.sleep(3600)'] PROGRAM_BLOCKED = [sys.executable, '-c', 'import time; time.sleep(3600)']
@ -119,23 +116,6 @@ class SubprocessMixin:
returncode = self.loop.run_until_complete(proc.wait()) returncode = self.loop.run_until_complete(proc.wait())
self.assertEqual(-signal.SIGHUP, returncode) 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): def test_broken_pipe(self):
large_data = b'x' * support.PIPE_MAX_SIZE large_data = b'x' * support.PIPE_MAX_SIZE