telnetlib write()一些命令在Python中不起作用

时间:2015-05-17 19:50:49

标签: python telnetlib

我使用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。谢谢!

1 个答案:

答案 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()