python telnet连接中兴C300,对C300telnetserver的一些猜想

程序逻辑:1.开启telnet连接

                 2.下发命令(tn.write())(连续下发,不读取的情况下)

                 3.关闭telnet连接

  问题出现在关闭连接上,在CMD中,我逐行执行命令,命令完美执行,但打包执行时,出现了一些命令没有执行完毕的情况

 命令大概是这样:

 python telnet连接中兴C300,对C300telnetserver的一些猜想

红框标注出的部分呢,是没有执行的,但我如果吧tn.close()删掉,也就是不关闭telnet连接,那么我的命令就会完全执行,那么原因是什么呢?

  首先,我们已知C300中一些命令执行是需要一些时间的,比如上面的 “no onu 6“,大概3秒,但是在这些肉眼可见速度的命令中,我使用了read_until()方法来保证这些命令是执行完毕的 ,后面的命令我就直接输入了,并没有加反馈,虽然下发到olt,但是这些命令是没有执行的!!!

  于是我猜测:中兴C300的telnetserver会建立一个类似堆栈的过程(至于为什么这样,我认为是因为它的telnetserver支持多线程访问,防止混乱),收到一堆命令后,会在放在栈中,然后先进先出地执行命令,但如果在程序没有执行完毕的时候telnet连接关闭了,telnetserver会把当前线程剩下没有执行完毕的命令从栈里清空。这样做的好处在于,例如:线程1的telnet连接断开后,清空线程1所下发的命令可以让C300立即腾出手来去执行线程2,线程3等等所发出的命令。

那么在使用python对C300发送命令时,尽量去保证命令执行完毕,再断开连接,就不会出现这个问题了。

华为MA5680T不支持多线程telnet访问,也许就不会有这个问题,过几天去试试。