.. 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
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)
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
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
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