【发布时间】:2015-05-18 04:56:41
【问题描述】:
我使用 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。谢谢!
【问题讨论】:
-
嗯,在 telnet 会话中来回切换的实际情况是什么?你试过
set_debuglevel看看吗? -
另外,是什么让你认为
write()函数不起作用,而不是write完美运行并执行echo命令失败并出现权限错误或某物?或者无法登录,所以你甚至没有和外壳说话? (例如,在许多平台上,Password:提示符在冒号后没有空格;使用恰好在一台机器上工作的示例代码甚至没有测试它是否可以在您的机器上工作并不是一个非常好主意。) -
@abarnert 好吧,我的问题中显示的代码是一个简化的示例,因为我的脚本中还有很多内容。所以,我知道其他一切都在工作,也许我应该开始解释这一点。如果问题是权限问题,我相信它不应该与 SecureCRT 一起使用。 - 另一方面,我尝试了 tn.set_debuglevel(1) 并且现在正在工作,如果我评论该行它不再工作了。不知道为什么,但问题似乎是这样解决的。
-
一个简化的例子很好,但如果它被简化到实际上并没有重现问题,那就不行了。 (如果您向我们展示工作代码,我们无法告诉您其中有什么问题。)请阅读minimal, complete, verifiable example。
-
同时,如果只是添加
tn.set_debuglevel会有所不同,那么您很可能遇到了某种时间问题。也许 SunOS 的telnetd只是为 shell 缓冲 16 个字符,所以如果你write一个命令没有等待 shell 启动它会被截断,但是写入调试信息恰好会经常减慢速度shell 会及时启动并且可以读取你的整个命令,所以现在工作的时间是 98%,而不是 2%。