许多资源,包括telnetlib官方文档中的示例,表明在执行read_all()之前的最后,您需要在命令之后写出exit:
tn.write("ls\n")
tn.write("exit\n")
有人可以帮我理解为什么需要它吗?
如果我尝试在没有退出的情况下执行此操作,则telnet连接会挂起(或者至少看起来像挂起),因为执行的命令的输出未显示在终端上。
另外,正如我在某些资源中发现的那样,另一种使其工作的方法是使用' exec'启动命令然后你不再需要退出的东西了。
请帮助我理解这一点。
答案 0 :(得分:0)
read_all()读取所有输出,直到EOF。换句话说,它等待直到远程服务器关闭连接并返回它发送的所有数据。如果您之前没有通过“退出”命令向服务器通知您没有更多命令,它将等待它们。并发生死锁:您持有开放连接,因为您正在等待服务器告诉您它已发送了它想要说的所有内容,并且服务器等待您的新订单并准备向其输出添加更多数据。