0

Paramiko を使用して、ホストのリストをクロールしようとしています。コードは、リスト内のホストの 1 つが利用できなくなるまで機能します。このエラーが発生します。

  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

私のコード:

#!/usr/bin/python
import paramiko

host = ['cpu1','cpu2','cpu3']

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

for i in host:
    str(i)
    ssh.connect(i, username='user', password='pass')
    stdin, stdout, stderr = ssh.exec_command('w')
    print stdout.readlines()
    ssh.close()

スクリプトを実行してコマンドを実行したいと思っています。ホストに接続できない場合は、スキップして次へ進みます。一部の Paramiko パラメータを含む if ステートメントがありませんか?

4

2 に答える 2

3

必要に応じて、例外のキャッチ、処理、および続行を試すことができます。

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。バグを見つけるのが困難になる可能性があります。

于 2012-06-15T21:25:05.910 に答える
1

エラー処理がありません。ドキュメントで説明されているように、このconnectメソッドは 4 つの異なる例外を発生させます。あなたの場合、ヒットしsocket.errorます。

接続エラーを無視して次のホストにスキップするには、passステートメントを使用してこれらのエラーを無視して続行できます。passすべての例外ではなく、必要なものだけが重要です。

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
于 2012-06-15T21:27:17.377 に答える