]> granicus.if.org Git - python/commitdiff
asyncio.subprocess: Replace Process.get_subprocess() method with a
authorVictor Stinner <victor.stinner@gmail.com>
Mon, 3 Feb 2014 22:08:14 +0000 (23:08 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Mon, 3 Feb 2014 22:08:14 +0000 (23:08 +0100)
Process.subprocess read-only property

Doc/library/asyncio-subprocess.rst
Lib/asyncio/subprocess.py
Lib/test/test_asyncio/test_subprocess.py

index 4c399c6abf11f7c70e50ad898178122d59787efe..5bfbbc7459ff0b0005b973f275cbe49bdd4f9db0 100644 (file)
@@ -57,6 +57,21 @@ Process
 
 .. class:: asyncio.subprocess.Process
 
+   .. attribute:: pid
+
+      The identifier of the process.
+
+      Note that if you set the *shell* argument to ``True``, this is the
+      process identifier of the spawned shell.
+
+   .. attribute:: returncode
+
+      Return code of the process when it exited.  A ``None`` value indicates
+      that the process has not terminated yet.
+
+      A negative value ``-N`` indicates that the child was terminated by signal
+      ``N`` (Unix only).
+
    .. attribute:: stdin
 
       Standard input stream (write), ``None`` if the process was created with
@@ -72,20 +87,9 @@ Process
       Standard error stream (read), ``None`` if the process was created with
       ``stderr=None``.
 
-   .. attribute:: pid
-
-      The identifier of the process.
-
-      Note that if you set the *shell* argument to ``True``, this is the
-      process identifier of the spawned shell.
+   .. attribute:: subprocess
 
-   .. attribute:: returncode
-
-      Return code of the process when it exited.  A ``None`` value indicates
-      that the process has not terminated yet.
-
-      A negative value ``-N`` indicates that the child was terminated by signal
-      ``N`` (Unix only).
+      Underlying :class:`subprocess.Popen` object.
 
    .. method:: communicate(input=None)
 
@@ -107,10 +111,6 @@ Process
          The data read is buffered in memory, so do not use this method if the
          data size is large or unlimited.
 
-   .. method:: get_subprocess()
-
-      Get the underlying :class:`subprocess.Popen` object.
-
    .. method:: kill()
 
       Kills the child. On Posix OSs the function sends :py:data:`SIGKILL` to
index 4312d445e2037a4c47e1fe4cf82a6fbcd6472a12..3047894b3808ea5446eae3b1358e195f491ffc20 100644 (file)
@@ -106,7 +106,8 @@ class Process:
         yield from waiter
         return waiter.result()
 
-    def get_subprocess(self):
+    @property
+    def subprocess(self):
         return self._transport.get_extra_info('subprocess')
 
     def _check_alive(self):
index 4f38cc72c8456ef16fd7a79b5c501cd561357e74..785156c77fb272fdccc204b3a971f07483d4d84b 100644 (file)
@@ -119,7 +119,7 @@ class SubprocessMixin:
         returncode = self.loop.run_until_complete(proc.wait())
         self.assertEqual(-signal.SIGHUP, returncode)
 
-    def test_get_subprocess(self):
+    def test_subprocess(self):
         args = PROGRAM_EXIT_FAST
 
         @asyncio.coroutine
@@ -127,14 +127,14 @@ class SubprocessMixin:
             proc = yield from asyncio.create_subprocess_exec(*args,
                                                              loop=self.loop)
             yield from proc.wait()
-
-            popen = proc.get_subprocess()
-            popen.wait()
-            return (proc, popen)
-
-        proc, popen = self.loop.run_until_complete(run())
-        self.assertEqual(popen.returncode, proc.returncode)
-        self.assertEqual(popen.pid, proc.pid)
+            # 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