我想从我的 gps-tracker 接收数据。它通过 tcp 发送数据,所以我使用 xinetd 来监听一些 tcp 端口和 python 脚本来处理数据。这是 xinetd 配置:
service gps-gprs
{
disable = no
flags = REUSE
socket_type = stream
protocol = tcp
port = 57003
user = root
wait = no
server = /path/to/gps.py
server_args = 3
}
在 /etc/services 中配置
gps-gprs 57003/tcp # Tracking system
和 Python 脚本 gps.py
#!/usr/bin/python
import sys
def main():
data = sys.stdin.readline().strip()
#do something with data
print 'ok'
if __name__ =='__main__':
main()
跟踪器以原始文本形式发送数据字符串,例如
$GPRMC,132017.000,A,8251.5039,N,01040.0065,E,0.00,,010111,0,,A*75+79161234567#
问题是 python 脚本中的 sys.stdin 没有收到行尾或文件结尾字符,并且 sys.stdin.readline() 永远存在。我试图用 python 脚本从另一台电脑发送数据
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('', 57003))
s.sendall( u'hello' )
data = s.recv(4024)
s.close()
print 'Received', data
如果消息是'hello',它会失败,但如果消息是'hello\n',没关系,一切都很好。但我不知道如何告诉 tracker 或 xinetd 在消息末尾添加这个 '\n'。如何在没有 EOF 或 EOL 的情况下从 sys.stdin 读取数据?