I've got some code that runs through a list of devices, connects to them via SSH and queries some parameters. The basic code looks like this:
ssh = paramiko.SSHClient()
ssh.connect(ip_address, username='root', password=password)
try:
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command('uname -r')
if ssh_stdout.channel.recv_exit_status() == 0:
temp = ssh_stdout.readlines()
if temp:
kernel_version = temp[0].strip('\n').strip('\"')
except BaseException as ex:
print(f'An exception occurred: {ex}')
try:
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command('lsb_release -rs')
if ssh_stdout.channel.recv_exit_status() == 0:
temp = ssh_stdout.readlines()
if temp:
ubuntu_version = temp[0].strip('\n').strip('\"')
except BaseException as ex:
print(f'An exception occurred: {ex}')
But there are a lot of devices and it takes a long time to run. It's faster to run multiple commands in one go:
try:
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command('uname -r; lsb_release -rs')
if ssh_stdout.channel.recv_exit_status() == 0:
temp = ssh_stdout.readlines()
if temp[0]:
kernel_version = temp[0].strip('\n').strip('\"')
if temp[1]:
ubuntu_version = temp[1].strip('\n').strip('\"')
except BaseException as ex:
print(f'An exception occurred: {ex}')
but how can I handle one command passing and one failing? Is there a better way of doing this?