pythonにtelnetをさせるには、telnetlibを使うのが簡単でいい。
余計なソケットやらセッションやらと言ったことを考えなくてよいし、telnetlib.Telnetと書くと、とりあえずtelnetしてくれる。
でも、telnetみたいなオンライン系作業は意外とerrorが返ってくる率が高いので、素直に処理を連続して行おうとすると、すぐにerrorとなって中断されてしまったりする。
だいたいのerrorはタイムアウトだと思うけど、一時的に接続不可能だったり、想定外の戻り値があったり、セッションが中断されたりと、errorの種類はいろいろある。
連続して複数の拠点に対してtelnetを行えないとなると、あまりtelnet作業を自動化するメリットがないので、それだったら手でやった方がマシやないけえーという話になってしまうのだ。
そこで活用したいのが、IOErrorという魔法のキーワードとなる。
while関数を書いて、その後にtry関数でメインループに飛ばすんだけど、except関数でIOErrorが出た場合はxxxにアクセスできません、とプリントして次へ・・・というのを例として書いてみる。
host = open('host.txt','rb').readline().rstrip('¥r¥n')
while host:
try:
tn = telnetlib.Telnet(host,23,5)
tn.read_until('>')
tn.write('exit' + '¥r¥n')
host = open('host.txt','rb').readline().rstrip('¥r¥n')
except IOError:
print host + 'にアクセスできません'
host = open('host.txt','rb').readline().rstrip('¥r¥n')
else:
host.close()
telnetのアクセス部分はかなりの適当で書いているので、必要に応じてwriteしたりreadしたりする必要があるけど、それは相応にやってもらう感じで。
いろいろ問題が出たり、エラーになったりした場合は、とりあえずIOErrorに飛ばしてなんだかんだを処理するような動きを試してみるのがよいかも。

0 件のコメント:
コメントを投稿