だから私はpython docsによって与えられたこの本当に簡単な例を試しています:
import getpass
import sys
import telnetlib
Host = "<Host_IP>"
user = raw_input("Enter your remote account: ")
password = getpass.getpass()
tn = telnetlib.Telnet(Host)
tn.read_until("login: ")
tn.write(user + "\n")
if password:
tn.read_until("Password: ")
tn.write(password + "\n")
tn.write("ls\n")
tn.write("exit\n")
print tn.read_all()
私の問題は、read_all()の最後でハングすることです...何も出力されません。これまでにこのモジュールを使用したことがないので、続行する前に、この本当に基本的な例を機能させるようにしています。ところで、私はpython 2.4を使用しています。ありがとうございます。
さて、私は解決策を見つけました。 lsを入力して終了する前に、まず端末タイプを指定する必要がありました。追加
tn.write("vt100\n")
「ls」が問題を修正する前に。
Windowsを使用している場合は、必ずキャリッジリターン(\r
)改行文字の前:
tn.write(user.encode('ascii') + "\r\n".encode('ascii'))
これは投稿が遅いのですが、他の人を助けるかもしれません。私もこれを正しく行うのに苦労しましたが、これが私のコードです。私のtelnetはloginID
を要求し、次にPassword
を要求するような特定のフローに従います。次に、特定の文字列がここに表示されるのを待つ必要があります。私の場合は"DB>"
その後、コマンドとすべてを続行できます。出力は"out"
変数に保存されます
import os,re,telnetlib
Host = "10.xxx.xxx.xxx"
port = 23
telnet = telnetlib.Telnet()
telnet.open(Host, port)
telnet.write('loginID\r\n')
telnet.write('Password\r\n')
out = telnet.read_until("DB>", 5)
telnet.write('show cable modem reg\r\n') #Mycommand
out = telnet.read_until("DB>", 5)
telnet.write('quit\r\n')
telnet.close()
その他のバリエーションとヘルプについては、ウェブサイトをチェックしてください nullege
テストするTelnetサーバーがありませんが、問題は、コマンドを入力するたびにプロンプトまでサーバーの応答を読み取っていないことです。
Prompt = ':~$'
tn = telnetlib.Telnet(Host)
tn.read_until('login: ')
tn.write(user + '\n')
if password:
tn.read_until('Password: ')
tn.write(password + '\n')
tn.read_until(Prompt)
tn.write('ls\n')
print tn.read_until(Prompt)
tn.write('exit\n')
ところで、telnetnetlibはトリッキーになる可能性があり、FTPサーバーと環境設定によって異なります。 pexpect のようなものを調べて、Telnet経由でのログインとユーザーの対話を自動化したほうがよい場合があります。
SynAccessの電源タップに書き込もうとしてしばらく苦労しました。これは私がそれをした方法です:
import sys
import telnetlib
Host = < your SynAccess switch ip address >
user = < user name >
password = < password >
tn = telnetlib.Telnet(Host, 23, 5)
tn.write("login\r\n")
tn.write(user + "\r\n")
tn.write(password + "\r\n")
tn.write("rb 3\r\n") # this reboots plug 3
tn.write("rb 1\r\n") # this reboots plug 1
tn.write("logout\r\n")
tn.close
python 2.7または最後の行に "("、 ")"を含むより高いバージョンを使用する