gpt4 book ai didi

python - 从没有换行符或 EOF 的 sys.stdin 读取

转载 作者:可可西里 更新时间:2023-11-01 02:33:16 26 4
gpt4 key购买 nike

我想从我的 GPS 追踪器接收数据。它通过 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'。如何从 sys.stdin 中读取没有 EOF 或 EOL 的数据?

最佳答案

简单:

data=sys.stdin.read().splitlines()

for i in data:
print i

没有换行符

关于python - 从没有换行符或 EOF 的 sys.stdin 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12308028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com