Python 当某些主机不';不存在
我正在使用Paramiko尝试在主机列表中爬行。该代码将一直工作,直到列表中的一个主机不可用。它会产生这个错误Python 当某些主机不';不存在,python,ssh,paramiko,Python,Ssh,Paramiko,我正在使用Paramiko尝试在主机列表中爬行。该代码将一直工作,直到列表中的一个主机不可用。它会产生这个错误 File "remote.py", line 12, in <module> ssh.connect(i, username='user', password='pass') File "/usr/local/lib/python2.7/dist-packages/paramiko/client.py", line 296, in connect soc
File "remote.py", line 12, in <module>
ssh.connect(i, username='user', password='pass')
File "/usr/local/lib/python2.7/dist-packages/paramiko/client.py", line 296, in connect
sock.connect(addr)
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 113] No route to host
我想让脚本运行并执行命令。如果无法连接到主机,请跳过并转到下一个。我是否缺少带有一些Paramiko参数的if语句?您可以尝试捕获异常、处理,如果愿意,还可以继续
import paramiko
host = ['cpu1','cpu2','cpu3']
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
for i in host:
str(i)
try:
ssh.connect(i, username='user', password='pass')
stdin, stdout, stderr = ssh.exec_command('w')
print stdout.readlines()
ssh.close()
except Exception as ex:
print "Excetion: %s" % str(ex)
始终正确处理异常不要盲目地使用
pass
,这会导致难以发现的错误。您可以尝试捕获异常,处理,如果您愿意,还可以继续
import paramiko
host = ['cpu1','cpu2','cpu3']
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
for i in host:
str(i)
try:
ssh.connect(i, username='user', password='pass')
stdin, stdout, stderr = ssh.exec_command('w')
print stdout.readlines()
ssh.close()
except Exception as ex:
print "Excetion: %s" % str(ex)
始终正确处理异常不要盲目地使用
pass
,这会导致难以发现的错误。您缺少任何错误处理;由于connect
方法引发了4种不同的异常。在您的情况下,您点击了套接字。错误
如果要忽略任何连接错误并跳到下一台主机,可以使用忽略这些错误并继续。重要的是不要只传递你想传递的异常
import paramiko
hosts = ['cpu1','cpu2','cpu3']
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
for i in hosts:
try:
ssh.connect(i, username='user', password='pass')
stdin, stdout, stderr = ssh.exec_command('w')
print stdout.readlines()
ssh.close()
except socket.error as e:
pass
您缺少任何错误处理;由于connect
方法引发了4种不同的异常。在您的情况下,您点击了套接字。错误
如果要忽略任何连接错误并跳到下一台主机,可以使用忽略这些错误并继续。重要的是不要只传递你想传递的异常
import paramiko
hosts = ['cpu1','cpu2','cpu3']
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
for i in hosts:
try:
ssh.connect(i, username='user', password='pass')
stdin, stdout, stderr = ssh.exec_command('w')
print stdout.readlines()
ssh.close()
except socket.error as e:
pass
当任何异常发生时,如何将某些内容打印到标准输出,而不是传递单个命名的异常?因为它将以某种方式记录,所以您可以覆盖sys.stdout使其成为一个文件,或者您可以将输出传输到一个文件,然后您可以解析该文件,如果只是盲目地传递
感觉非常危险,因为程序员根本无法检测到它。当任何异常发生时,如何在stdout上打印内容比传递单个命名的异常更少“盲目”呢?因为它将以某种方式被记录,您可以覆盖sys.stdout,使其成为一个文件,或者您可以通过管道将输出传输到一个文件,然后您可以解析该文件,尽管如此,盲目地传递感觉非常危险,因为程序员根本无法检测到它。