6

我正在编写一个 Python 脚本,它通过 Telnet 连接到 Linux 终端,运行许多命令并解析输出,然后根据输出运行更多命令等。

使用telnetlib很容易设置。我正在使用 write(cmd + '\n') 发送命令,然后使用 read_until(prompt) 来读取输出。我遇到的问题是这个设置似乎很慢。每个命令可能需要大约 100-200 毫秒才能运行。这使得总运行时间大约为半分钟,我觉得这太长了。

如果我使用普通的 Telnet 客户端连接到终端,我尝试运行的命令会立即返回。我还制作了一个小型 bash 脚本,它运行大约 20 个命令,这些命令也几乎立即返回。我还尝试了 telnetlib 中的其他一些读取函数(例如 read_very_eager()),但没有任何改进。

有谁知道为什么这个设置如此缓慢,如果有什么我可以做的吗?

4

1 回答 1

1

我遇到了同样的问题,我正在执行“read_until”,它在一台机器上运行非常慢,而在另一台机器上运行很快......我将代码切换到“read_very_eager”,并在请求之间放置了小暂停,如下例所示。现在我的代码在任何地方都以相同的速度工作。如果您遗漏了一些响应,请尝试使变量“等待”= 更大。

tn = telnetlib.Telnet(host)
wait=0.1

sleep(wait)              # wait for greeter
tn.read_very_eager();    # optional step
tn.write(PASSWORD+"\n")  # send password
sleep(wait)              # wait for prompt
tn.read_very_eager()     # optional step

tn.write("write some ting\n") # send your request
sleep(wait)                # wait for response to become available
print tn.read_very_eager() # read response IF you need it otherwise skip it
tn.write("write some thing else\n") # send your request
sleep(wait)                # wait for response to become available
print tn.read_very_eager() # read response IF you need it otherwise skip it
tn.write("exit\n")         # optional step
tn.close()                 # close connection
于 2012-11-10T14:42:08.240 回答