Kaydet (Commit) e48d4db0 authored tarafından Victor Stinner's avatar Victor Stinner

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

üst b79eb050
......@@ -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()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment