For 循环使用 pexpect 和大量地址来处理

For loop using pexpect and a large list of addresses to do stuff with

我正在使用 pexpect。目标是按顺序连接到文本文件中的地址列表,连接后执行操作,注销并转到下一个地址。

我的基本功能运行良好。这是讨厌的错误。如果客户端没有响应,它就会中断。我已经使用了 'try' 但如果有异常则它会中断 for 循环并且不会继续下一个地址。

尝试每一个的最佳方法是什么,做些什么,如果它坏了...在日志文件中做一个记录,然后继续下一个,直到我们到达列表的末尾。这是我的电流:

i = open('addresses.txt')
addresses = i.readlines()
i.close()

for address in addresses:
  c = pexpect.spawn('ssh -o StrictHostKeyChecking=no %s@%s' % (user, address))
  c.logfile = sys.stdout
  c.timeout = 5
  c.expect('something')
  c.sendline('do something')
   etc etc.

收集特定的和预期的错误

errors = []
for address in addresses:
    try:
       c = pexpect.spawn('ssh -o StrictHostKeyChecking=no %s@%s' % (user, address))
       c.logfile = sys.stdout
       c.timeout = 5
       c.expect('something')
       c.sendline('do something')
   except Exception as e:   # replace with the type of exception you expect
       errors.append(dict(address=address, exception=e))

这不应该打破 for 循环,完成后您可以阅读错误,

if errors:
    # report them, do something etc
    # the errors are informative, with address and exception objects in the dict