import asyncio
[docs]async def ping(ip_addr):
""" Successully returns on success. Raises asyncio.TimeoutError if there is no response.
Use asyncio.wait_for for explicit timeout.
"""
process = await asyncio.create_subprocess_exec('ping',
ip_addr,
'-c',
'3',
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE)
try:
stdout, stderr = await process.communicate()
if process.returncode:
print(stdout)
print(stderr)
raise asyncio.TimeoutError(f'ping returned nonzero code {process.returncode}')
except asyncio.CancelledError:
process.kill()
raise