9

我正在使用 Python 的 telnetlib 远程登录到某些机器并执行一些命令,我​​想获得这些命令的输出。

那么,目前的情况是——

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 执行之后和 command2 执行之前立即获取它的输出,就好像我在另一台机器的 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
4

3 回答 3

10

我在使用 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”而我没有还没有尝试过只换一条新线。

于 2012-05-10T18:05:09.663 回答
4

您必须在此处参考telnetlib模块的文档。 尝试这个 -

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
于 2012-04-12T15:24:30.060 回答
0

我也遇到了 read_very_eager() 函数没有显示任何数据的相同问题。从一些帖子中得到了该命令需要一些时间来执行的想法。所以使用了 time.sleep() 函数。

代码片段:

tn.write(b"sh ip rou\r\n")
time.sleep(10)
data9 = tn.read_very_eager()
print(data9)
于 2019-06-17T07:24:01.120 回答