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