Python中的socket.recv()在换行时截断输出吗?
总结
- 这个脚本没有把socket.recv()接收到的所有内容都打印到Linux终端上。
- 但如果我在解释器里做同样的事情,它会把所有数据都打印出来。
(假设我用本地网关的IP和23这个端口,目的是通过telnet连接到我的路由器)
import socket
q = socket.socket()
q.connect(ip, port)
data = q.recv(1024)
print data
在解释器中的输出是四行:
(第一行是一些乱码)
RT v24-sp2 标准版 (c) 2012 NewMedia-NET GmbH
发布日期:03/21/12 (SVN修订版:18795)
DD-WRT 登录:
脚本的输出:
(只有第一行的乱码)
如果有人能告诉我为什么会这样,以及如何解决这个问题,我将非常感激。
谢谢,
安德鲁
1 个回答
1
当你慢慢地一个一个运行命令时,路由器有足够的时间把它要发送的所有信息都发送出去,这样你在调用 q.recv(1024)
之前,路由器已经把数据发完了。
但是如果你是通过脚本来运行这些命令,命令就会很快接连执行。当脚本执行 q.recv(1024)
时,路由器可能只发送了一部分数据,并没有把所有的数据都发完。
因为你没有用循环去尝试读取更多的数据,所以就到此为止了,你不会收到(或者打印)更多的数据。
顺便问一下,“alt-code gibberish”到底是什么?你应该得到的是一些二进制数据,这些数据是telnet协议协商的一部分。