我使用Python的telnetlib.write()函数已经有一段时间没有问题,但在这种情况下,我想要发送的命令什么都不做。虽然通过SecureCRT发送的相同命令工作正常。
这里或多或少是我所拥有的:
import telnetlib
tn = telnetlib.Telnet(HOST)
tn.read_until('login: ')
tn.write(user + '\n')
if pswrd:
tn.read_until('Password: ')
tn.write(pswrd + '\n')
tn.write('echo "" > /path/to/file.log' + '\n')
tn.write('exit\n')
tn.close()
这应该做的是清除file.log的内容,但文件保持不变。为什么会这样? 如果值得一提,telnet服务器正在运行SunOS。谢谢!
答案 0 :(得分:0)
您的问题几乎肯定是时间错误。
无法调试或查看调试结果,很难确定完全问题是什么,但我的猜测是这样的:< / p>
SunOS机器的telnetd
服务器有一个相对较小的缓冲区,比如说16个字节。因此,如果在shell启动之前将整个命令发送给它,它只会将16个字节发送到shell。当然,哪个不会做你想要的。但是如果你等到shell启动,它将获得整个命令,因此可以工作。
通过将tn_setdebuglevel(1)
添加到您的程序中,您可以更改时间 - 打印出调试信息所需的额外时间足以(通常)在您开始之前(通常)给出shell启动时间&# 39; ve填满了缓冲区,所以它恰好起作用。
密码提示可能有同样的问题,您使用`tn.read_until(&#39;密码:&#39;)解决了这个问题。你只需要在这里做同样的事情。例如(取决于预期的提示):
# ...
tn.read_until('$')
tn.write('echo "" > /path/to/file.log\n')
tn.read_until('$')
tn.write('exit\n')
tn.close()