asyncio doc: add an example of asyncio.subprocess with communicate() and wait()

This commit is contained in:
Victor Stinner 2014-02-03 23:26:28 +01:00
parent b79eb0502c
commit e48d4db000
1 changed files with 40 additions and 0 deletions

View File

@ -138,3 +138,43 @@ Process
Wait for child process to terminate. Set and return :attr:`returncode`
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()