mirror of
https://github.com/python/cpython.git
synced 2025-11-02 11:08:57 +00:00
asyncio doc: add an example of asyncio.subprocess with communicate() and wait()
This commit is contained in:
parent
b79eb0502c
commit
e48d4db000
1 changed files with 40 additions and 0 deletions
|
|
@ -138,3 +138,43 @@ Process
|
||||||
Wait for child process to terminate. Set and return :attr:`returncode`
|
Wait for child process to terminate. Set and return :attr:`returncode`
|
||||||
attribute.
|
attribute.
|
||||||
|
|
||||||
|
|
||||||
|
Example
|
||||||
|
-------
|
||||||
|
|
||||||
|
Implement a function similar to :func:`subprocess.getstatusoutput`, except that
|
||||||
|
it does not use a shell. Get the output of the "python -m platform" command and
|
||||||
|
display the output::
|
||||||
|
|
||||||
|
import asyncio
|
||||||
|
import sys
|
||||||
|
from asyncio import subprocess
|
||||||
|
|
||||||
|
@asyncio.coroutine
|
||||||
|
def getstatusoutput(*args):
|
||||||
|
proc = yield from asyncio.create_subprocess_exec(
|
||||||
|
*args,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.STDOUT)
|
||||||
|
try:
|
||||||
|
stdout, _ = yield from proc.communicate()
|
||||||
|
except:
|
||||||
|
proc.kill()
|
||||||
|
yield from proc.wait()
|
||||||
|
raise
|
||||||
|
exitcode = yield from proc.wait()
|
||||||
|
return (exitcode, stdout)
|
||||||
|
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
coro = getstatusoutput(sys.executable, '-m', 'platform')
|
||||||
|
exitcode, stdout = loop.run_until_complete(coro)
|
||||||
|
if not exitcode:
|
||||||
|
stdout = stdout.decode('ascii').rstrip()
|
||||||
|
print("Platform: %s" % stdout)
|
||||||
|
else:
|
||||||
|
print("Python failed with exit code %s:" % exitcode)
|
||||||
|
sys.stdout.flush()
|
||||||
|
sys.stdout.buffer.flush()
|
||||||
|
sys.stdout.buffer.write(stdout)
|
||||||
|
sys.stdout.buffer.flush()
|
||||||
|
loop.close()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue