Pythonでtelnet接続してみる(その4)
これまでのtelnet接続の実験で使えることがわかってきたので、class化してみようと思った。
メソッドは、「接続」、「コマンド実行」、「切断」の3つ。
classの中で、エスケープシーケンス文字列の除去、文字コード変換を処理して、リモートホストからの受信した文字列を返すようにした。
コマンド実行のメソッドを作ったので、"ls -al" と “df" のコマンドを続けて実行させてみた。
徐々にだが使えるプログラムに近づいてきた。エラー処理が何にもないけど。プロフェッショナルな人との違いはエラー処理にあるんだと思う。
プログラム
# -*- coding: utf-8 -*- import re import telnetlib class MyTelnet(object): def __init__(self, host, user, pswd, prompt): self.host = host self.user = user self.pswd = pswd self.prompt = prompt def connect(self): self.tn = telnetlib.Telnet(self.host) self.tn.read_until("login: ") self.tn.write(self.user + "\n") self.tn.read_until("Password: ") self.tn.write(self.pswd + "\n") res = self.tn.read_until(self.prompt) return self.cvtstr(res) def action(self, cmd): self.tn.write(cmd + "\n") res = self.tn.read_until(self.prompt) return self.cvtstr(res) def disconnect(self): self.tn.write("exit\n") res = self.tn.read_all() return self.cvtstr(res) def cvtstr(self, s): #エスケープシーケンスの除去 r = re.compile(r'\x1b\[.*?m\[?') s = re.sub(r,'',s) #文字コードutf-8をcp932に変換 return s.decode('utf-8').encode('cp932') if __name__ == '__main__': HOST = "192.168.11.201" # your server USER = "bty" # your user name PASSWORD = "*******" # your password PROMPT = "bty@ub01:~$" # your prompt tn = MyTelnet(HOST, USER, PASSWORD, PROMPT) res = tn.connect() print res, res = tn.action("ls -al") print res, res = tn.action("df") print res, res = tn.disconnect() print res
実行結果
Last login: Sat May 11 12:44:46 JST 2013 from 192.168.11.19 on pts/1 Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-23-generic-pae i686) * Documentation: https://help.ubuntu.com/ System information as of Sat May 11 12:45:06 JST 2013 System load: 0.2 Processes: 65 Usage of /: 18.8% of 5.98GB Users logged in: 1 Memory usage: 1% IP address for eth0: 192.168.11.201 Swap usage: 0% Graph this data and manage this system at https://landscape.canonical.com/ bty@ub01:~$ ls -al 合計 44 drwxr-xr-x 5 bty bty 4096 1月 16 22:00 . drwxr-xr-x 3 root root 4096 1月 16 16:24 .. -rw------- 1 bty bty 2564 5月 11 12:25 .bash_history -rw-r--r-- 1 bty bty 220 1月 16 16:24 .bash_logout -rw-r--r-- 1 bty bty 3574 1月 16 16:35 .bashrc drwx------ 2 bty bty 4096 1月 16 16:26 .cache drwx------ 3 bty bty 4096 5月 3 19:07 .emacs.d -rw------- 1 bty bty 35 1月 16 16:28 .lesshst -rw-r--r-- 1 bty bty 675 1月 16 16:24 .profile -rw------- 1 bty bty 3897 1月 16 22:00 .viminfo drwxrwxr-x 3 bty bty 4096 1月 16 17:48 my bty@ub01:~$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 6272596 1176244 4781832 20% / udev 1023496 4 1023492 1% /dev tmpfs 412308 280 412028 1% /run none 5120 0 5120 0% /run/lock none 1030768 0 1030768 0% /run/shm bty@ub01:~$ exit ログアウト
参考
20.14. telnetlib — Telnet クライアント — Python 2.7ja1 documentation
▼初めてPythonに出会ったとき、この本を読んで勉強しました。B5サイズなので、鞄に入れてもかさばらず、通勤のとき、電車で読んでました。初心者向けの読みやすい説明で、Pythonの全体像をつかむのに便利です。「電池が付属しています("Battery Included")」のキャッチフレーズ通り、Pythonには多くのライブラリーがあり、簡単なスクリプトを書くことで、これまで自分には不可能と思っていたことが、できるとわかって感動しました。
【送料無料】みんなのPython第3版 [ 柴田淳 ] |