asyncio doc: add an example of asyncio.subprocess with communicate() and wait()
This commit is contained in:
parent
b79eb0502c
commit
e48d4db000
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue