Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 24, 2017 12:02:16

ivpo
Зарегистрирован: 2013-11-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Сервер, принимающий данные

Добрый день

Я совсем новичок.
Написал вот такой скрипт:

 #!/usr/bin/env python3
import socket
import time
def parse(conn, addr):
	print("		Data received")
	data = b""  
	f = open('../index.html', 'w')
	while not b"#" in data: 
		data = conn.recv(1024)		
		udata = data.decode("utf-8")		
		print(udata)
		a = time.strftime("%Y-%m-%d-%H.%M.%S", time.localtime())		
		f.write(a)		
		f.write(udata + '\n')
	return
	f.close()
	
sock = socket.socket()
sock.bind( ("", 1904) )
sock.listen(10)
try:
	while 1:		
		conn, addr = sock.accept()
		conn.settimeout(60) 
		print("New connection from " + addr[0])
		try:			
			parse(conn, addr)			
		except:
			print("Error")
			send_answer(conn, "500 Internal Server Error", data="Ошибка")
		finally:
			print("Connection closed")
			conn.close()
finally: sock.close()

Назначение - принимать данные от некоего устройства и логгировать их.

Есть вопросы:

1) Скрипт “работает только один раз”. После разрыва соединения заново к нему соединится не получается.

2) Всё это крутится на хостинге и папка, куда сливаются данные (где лежит index.html) общедоступна.
По каким-то причинам файл появляется там с 10-15-минутным лагом.
Не пойму, то ли заморочки хостинга, то ли косяки у меня в скрипте.
Наверное правильно складывать всё это в MySQL базу данных, но пока в процессе освоения

3) Буду благодарен за указание на ошибки и косяки в скрипте.

Заранее огромное спасибо!

Офлайн

#2 Окт. 24, 2017 18:39:00

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4084
Репутация: +  249  -
Профиль   Отправить e-mail  

Сервер, принимающий данные

Комбинация

 	return
	f.close()
Заставляет прослезиться.
Если файл открывается так:
 f = open('../index.html', 'w')
То на лог это не очень похоже. В питоне для логгирования есть модуль logging

Позвольте узнать как вы определили что есть 10 минутный лаг?
Как в вашей системе будет вести себя приведенный ниже скрипт?
 import time
f = open("a.dat","w")
f.write("asd")
time.sleep(10)
f.close()



Офлайн

#3 Авг. 27, 2018 22:32:01

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 288
Репутация: +  11  -
Профиль   Отправить e-mail  

Сервер, принимающий данные

doza_and
Комбинация заставляет прослезиться
посмеяться
ivpo
while not b“#” in data:
надо while b“#” not in data
ivpo
send_answer(conn, “500 Internal Server Error”, data=“Ошибка”)
ай ай, русские буквы да в контент зону
тем более - код весь в студию, зач мне огрызок



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version