使用Python的交互速度非常慢';s telnetlib

使用Python的交互速度非常慢';s telnetlib,python,telnet,Python,Telnet,我正在编写一个Python脚本,它通过Telnet连接到Linux终端,运行许多命令并解析输出,然后根据输出运行更多命令,等等 这是很容易设置使用。我使用write(cmd+'\n')发送命令,然后read_直到(prompt)读取输出。我遇到的问题是,这个设置似乎非常慢。每个命令运行大约需要100-200毫秒。这使得总运行时间大约为半分钟,我发现这太长了 如果我使用普通的Telnet客户端连接到终端,我试图运行的命令几乎会立即返回。我还制作了一个小bash脚本,它运行大约20个命令,并且几乎立

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

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

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


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

我遇到了和你一样的问题,我在做“read_until”,它在一台机器上运行得非常慢,在另一台机器上运行得很快。。。 我将代码切换为“read_very_eager”,并在请求之间稍作停顿,如下面的示例所示。现在我的代码在任何地方都以同样的速度工作。 如果缺少一些响应,请尝试使变量“wait”=更大

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

我建议您使用Python分析器并通过pstats读取结果,这样您就可以确切地看到脚本占用了大部分时间。可以有标准的网络延迟、DNS解析,或者每个命令都作为新的telnet连接运行?从分析器中读取结果后,您将看到更多信息。所有命令都在同一个Telnet连接中运行,正如我所说,在普通Telnet客户端中手动运行命令时,命令完成得更快。我尝试使用cProfile.run()进行评测,似乎几乎所有的时间都花在telnetlib.py.pc3e中的select.select()上,我知道这已经有很长一段时间了,但是您在计时方面有什么改进,或者找到了替代解决方案吗?嗨,克里斯蒂亚诺。不幸的是,我仍然没有任何解决办法,这对我和公司的其他工作人员来说仍然是一个很大的不便。部分解决方案是使用Linux,它的速度要快得多,但仍然不如我认为的那么快。很抱歉回答得太晚。这对我来说真的不起作用,我必须将wait设置为0.3左右,以免错过任何响应。这里不想夸张,但这太慢了不过,正如我所说,整个脚本需要半分钟才能运行。ping说,到机器的往返时间是否有一种方法可以动态设置等待以优化性能,同时保证没有遗漏响应?