gps-tracker에서 데이터를 수신하고 싶습니다. 그것은 tcp에 의해 데이터를 전송하기 때문에 xinetd를 사용하여 데이터를 처리하기 위해 일부 TCP 포트와 Python 스크립트를 수신합니다. 이것은 xinetd를 설정입니다 :/등의개행이나 EOF없이 sys.stdin에서 읽음
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
}
구성/서비스
gps-gprs 57003/tcp # Tracking system
그리고 파이썬 스크립트 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#
문제는 파이썬 스크립트의 sys.stdin은 줄 끝이나 파일 끝 문자를받지 않으며 sys.stdin.readline()은 영원히 계속됩니다. 나는 파이썬 스크립트
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
와 메시지는 '안녕하세요', 실패하면 다른 PC에서 데이터를 보내려고하지만, 메시지는 '안녕하세요 \ n을'일 경우, 괜찮아요 모든 것이 괜찮습니다. 하지만 추적기 나 xinetd에게 메시지 끝에이 '\ n'을 추가하라고 명령하는 것을 모르겠습니다. EOF 나 EOL없이 sys.stdin에서 데이터를 읽으려면 어떻게해야합니까?
이 왜'.readline을()'를 사용해야합니까 없음 줄 바꿈? '.read()'하지 않습니까? –
"break here"라는 특정 시그널을 만나기 전까지 반드시'.read()'가 필요합니다. 반드시 newline이 아니어야합니다. 결국'#'과 같을 것입니다. 처음. – jadkik94