先上源码:
#!/usr/bin/env python
import socket,sys
host = sys.argv[1]
textport = sys.argv[2]
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
try:
port = int(textport)
except ValueError:
port = socket.getservbyname(textport,'udp')
s.connect((host,port))
print "Enter data to transmit: "
data = sys.stdin.readline().strip()
s.sendall(data)
print "Looking for replies; press Ctrl-C or Ctrl-Break to stop."
while 1:
buf = s.recv(20)
if not buf:
break
sys.stdout.write(buf)
# print buf
运行发现服务器端返回来的数据并不能输出,但将print buf取消注释后数据却会重复输出两遍,难道是write缓冲区不满的原因?
解决方法:
原来是因为stdout是有缓存的,只有遇到换行或者积累到一定的大小,才会显示出来。在语句sys.stdout.write(buf)后加上sys.stdout.flush()或运行命令export PYTHONUNBUFFERED=1 后再运行程序则可正常显示服务器端返回的数据。