我正在使用Python的telnetlib telnet到某台机器并执行一些命令,我想得到这些命令的输出。
那么,目前的情况是什么 -
tn = telnetlib.Telnet(HOST)
tn.read_until("login: ")
tn.write(user + "\n")
if password:
tn.read_until("Password: ")
tn.write(password + "\n")
tn.write("command1")
tn.write("command2")
tn.write("command3")
tn.write("command4")
tn.write("exit\n")
sess_op = tn.read_all()
print sess_op
#here I get the whole output
现在,我可以在sess_op中获得所有合并输出。
但是,我想要的是在执行command1之后立即获取command1的输出,就像我在其他机器的shell中工作一样,如下所示 -
tn = telnetlib.Telnet(HOST)
tn.read_until("login: ")
tn.write(user + "\n")
if password:
tn.read_until("Password: ")
tn.write(password + "\n")
tn.write("command1")
#here I want to get the output for command1
tn.write("command2")
#here I want to get the output for command2
tn.write("command3")
tn.write("command4")
tn.write("exit\n")
sess_op = tn.read_all()
print sess_op
答案 0 :(得分:8)
我在使用telnetlib时碰到了类似的东西。
然后我在每个命令的末尾意识到缺少回车和新行,并为所有命令执行了read_eager。像这样:
tn = telnetlib.Telnet(HOST, PORT)
tn.read_until("login: ")
tn.write(user + "\r\n")
tn.read_until("password: ")
tn.write(password + "\r\n")
tn.write("command1\r\n")
ret1 = tn.read_eager()
print ret1 #or use however you want
tn.write("command2\r\n")
print tn.read_eager()
... and so on
而不是只编写如下命令:
tn.write("command1")
print tn.read_eager()
如果它对你只有一个“\ n”,只添加一个“\ n”就可以了,而不是“\ r \ n”,但在我的情况下,我不得不使用“\ r \ n”和我还没有试过新的产品线。
答案 1 :(得分:3)
您必须参阅telnetlib
模块here的文档
试试这个 -
tn = telnetlib.Telnet(HOST)
tn.read_until("login: ")
tn.write(user + "\n")
if password:
tn.read_until("Password: ")
tn.write(password + "\n")
tn.write("command1")
print tn.read_eager()
tn.write("command2")
print tn.read_eager()
tn.write("command3")
print tn.read_eager()
tn.write("command4")
print tn.read_eager()
tn.write("exit\n")
sess_op = tn.read_all()
print sess_op
答案 2 :(得分:0)
我也遇到了同一问题,其中read_very_eager()函数未显示任何数据。从某个帖子中得知,该命令将需要一些时间才能执行。因此使用了time.sleep()函数。
代码段:
tn.write(b"sh ip rou\r\n")
time.sleep(10) data9 = tn.read_very_eager() 打印(数据9)