使用telnetlib实时读取输出

时间:2012-04-12 14:59:27

标签: python telnetlib

我正在使用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

3 个答案:

答案 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)