少年シリーズのpythonとシスコの運用および保守(3)

少年シリーズのpythonとシスコの運用および保守(3)

例外処理

例外処理とは何ですか?

例外処理は、(非コンパイル時)には例外処理が存在しない場合、それがうまくいかないとき、そして、全体のプログラムは直後に行われた例外処理を終了し、エラー処理を登場する各種プログラムの実装では通常、プログラムエラー処理は、異常な方法の定義に基づいて行われます。

人気の条件:なし例外ハンドラ、GGにうまくいかないプログラムの場合

シリーズ共通の例外

記事の一般的な異常のこのシリーズは、何でしょうか?

  • 接続に失敗しました

その理由は、多くのポートがそれを開くことができませんでした、そのようなネットワーク不合理な問題として、接続が失敗しています...

次のように接続失敗例外スロー

[root@yunwei cisco]# python ywsn_p_c_lab3.py 
Traceback (most recent call last):
  File "ywsn_p_c_lab3.py", line 9in <module>
    s.connect(ip,username=user,password=passwd,look_for_keys=False,allow_agent=False)
  File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 362in connect
    raise NoValidConnectionsError(errors)
paramiko.ssh_exception.NoValidConnectionsError: [Errno None] Unable to connect to port 22 on 192.168.200.2
[root@yunwei cisco]

例外処理を行うと、我々はそれが何であるかに焦点を当てる必要がありますか?例外は、ここのようなコードでスローされますparamiko.ssh_exception.NoValidConnectionsError

どのように例外処理を行いますか?Pythonで例外処理は使用try:... expect...など、

import paramiko
import time
user = 'yunwsn'
passwd = '123456'
s = paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
IP = file('IP.txt','rb')

for ip in IP.xreadlines():
    try:  # 异常处理以下内容
        s.connect(ip,username=user,password=passwd,look_for_keys=False,allow_agent=False)  # 如果这里出现异常,那么直接到execpt代码块中去了,不会打印下面的成功
        print '[ \033[0;32m success\033[0m ] login %s ' %ip

    except paramiko.ssh_exception.NoValidConnectionsError:
        print '[ \033[0;32m failed \033[0m ] Unable to connect to %s ' % ip


IP.close()

(移動マップ)についての実行

  • ソケットタイムアウト

異常は、ソケット接続のタイムアウト(任意の接続は、ソケットベースである)、以下の例外をもたらす、存在しない、時には不十分な品質やIPネットワークに、以下の

Traceback (most recent call last):
  File "ywsn_p_c_lab3.py", line 11in <module>
    s.connect(ip,username=user,password=passwd,look_for_keys=False,allow_agent=False)
  File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 343in connect
    retry_on_signal(lambda: sock.connect(addr))
  File "/usr/lib/python2.7/site-packages/paramiko/util.py", line 280in retry_on_signal
    return function()
  File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 343in <lambda>
    retry_on_signal(lambda: sock.connect(addr))
  File "/usr/lib64/python2.7/socket.py", line 224in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 110Connection timed out

ここでは、コードが例外をスローしているsocket.error、あなたは、これはされて見ることができますsocket私たちは、この異常に対処するためであれば、その後、あなたがインポートする必要があり、モジュールを与えられているsocketモジュール缶を。

  • 認証失敗

私たちはこのシリーズで使用しているのでsshの方法ですので、検証のプロセスがあるだろう、検証の失敗は、異常な方法それほど一般的です。

ルック認証失敗例外がスローされました

  File "ywsn_p_c_lab3.py", line 11in <module>
    s.connect(ip,username=user,password='123',look_for_keys=False,allow_agent=False)
  File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 437in connect
    passphrase,
  File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 749in _auth
    raise saved_exception
paramiko.ssh_exception.AuthenticationException: Authentication failed.

だから、ここに異常コードは何ですか?それはある必要がありますparamiko.ssh_exception.AuthenticationException: Authentication failed.〜友人

ここでは例外処理を行う方法です私はそれを言うことはありません!あなたは自分自身をテストするには、上記を参照することができます。

トポロジの説明

  • トポロジー

  • 説明

私は、トポロジマップの4つのIP、二つにIP.txtに書き込みます、他の2つは、ネットワーク不合理、タイムアウトはありませんが、認証が失敗し、すべてのものは3例でokです。

実装コード

ここを参照するすべての人を容易にするために、私は離れてすべての例外を入れ、実際には、一緒に入れすることも可能です。新しいコードに注釈を付ける以下、残りのコードのコメントは、最初の2件の記事を表示することができます。

import paramiko
import socket  # 导入socket模块
import time 
user = 'yunwsn'
passwd = '123456'
s = paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
IP = file('IP.txt','rb')

for ip in IP.xreadlines():
    try:  # 异常处理
        s.connect(ip,username=user,password=passwd,timeout=5,look_for_keys=False,allow_agent=False)
        print '[ \033[0;32m success\033[0m ] login %s ' %ip
        cmd = s.invoke_shell()
        cmd.send('show ip int bri \n  ')
        time.sleep(0.1)
        output = cmd.recv(65535)
        print output
        cmd.close()
    except paramiko.ssh_exception.NoValidConnectionsError: # 网络/端口不通异常
        print '[ \033[0;31m failed \033[0m ] Unable to connect to %s ' % ip
    except socket.error,err:  # 超时异常,err代表异常代码之后的提示
        print '[ \033[0;31m failed \033[0m ] %s to %s' %(err,ip)
    except paramiko.ssh_exception.AuthenticationException: # 验证失败的异常
        print '[ \033[0;31m failed \033[0m ] Authentication failed on %s' % ip

IP.close()
  • IP.txt

192.168.108.252
192.168.108.253
192.168.108.254
192.168.108.251
  • 動作結果(図可動)

マイクロチャンネル公共数:運用・保守ティーンエイジャー


おすすめ

転載: blog.51cto.com/xiaowangzai/2406527