所以我想用python文档给出的这个非常简单的例子:
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服务器来测试反对,但我认为问题是,你是不读的服务器响应到提示符,在每个命令后你写。
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登录自动化和用户交互。
我知道这是晚后,但可以帮助别人。 我也挣扎得到这个权利,但这里是我的一段代码。 我的telnet会遵循一定的流程像它会要求loginID
,然后Password
,然后你必须等待在这里显示的特定字符串,这对于我而言是"DB>"
,那么你可以用命令和一切继续。 我的输出将被保存在"out"
varible
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
我挣扎试图写入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或使用更高版本的“(”“),”在最后一行