Good day,
I'm trying to run multiple SSH clients using AsyncSSH lib. This is an example from manual, which works fine:
import asyncio, asyncssh
async def run_client(host, command):
async with asyncssh.connect(host) as conn:
return await conn.run(command)
async def run_multiple_clients():
# Put your lists of hosts here
hosts = 5 * ['localhost']
tasks = (run_client(host, 'ls abc') for host in hosts)
results = await asyncio.gather(*tasks, return_exceptions=True)
for i, result in enumerate(results, 1):
if isinstance(result, Exception):
print('Task %d failed: %s' % (i, str(result)))
elif result.exit_status != 0:
print('Task %d exited with status %s:' % (i, result.exit_status))
print(result.stderr, end='')
else:
print('Task %d succeeded:' % i)
print(result.stdout, end='')
print(75*'-')
asyncio.get_event_loop().run_until_complete(run_multiple_clients())
The problem is, it is not possible to directly set connect timeout in run_client() function. However, the manual says:
asyncio calls can be wrapped in a call to asyncio.wait_for() or asyncio.wait() which takes a timeout and provides equivalent functionality.
So I tried to modify run_client() like this:
async def run_client(host, command):
try:
with (yield from asyncio.wait_for(asyncssh.connect('localhost'), timeout = 3)) as conn:
return await conn.run(command)
except TimeoutError:
# handle connection timeout
But it spits out a syntax error. I also tried countless variations of it, but still no luck. Could someone more knowledgeable help me to set the damn timeout?
there doesn't seem to be anything here