Форум сайта python.su
0
Недавно начал изучать. И взялся за демон сервера UDP который слушает все что ему приходит на порт: По-умолчанию это JSON.
Программа висит на порту, получает строку json'а, парсит, и записывает в БД (postgresql) объявленные данные, параллельно записывая эту строку в файл. Естественно для новичка, все это выглядит более или менее криво. Нужен рефакторинг, но это лирика.
Гораздо интереснее мне узнать как, осуществить проверку. Но для начала я опишу что хотелось бы мне от сообщества, какого рода помощи, быть может примеров.
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys # Standart library for compile source import psycopg2 # Library for use connection with pgsql import simplejson # Lobrary for parse string in JSON # Server program from socket import * # Foll import library of using and create UDP server (sock) # Set the socket parameters host = "" # Listen any interfaces port = 5005 # Port Listener buf = 1500 # Size buffer for UDP listener addr = (host,port) # VARiable of sock connection # Create socket and bind to address UDPSock = socket(AF_INET,SOCK_DGRAM) # The create of socket connection UDPSock.bind(addr) # and accept configure # Connector pgsql con = psycopg2.connect('host=localhost dbname=logger_py user=log') # Connector for database pgsql cur = con.cursor() # Database connection cursor, aka. OPEN stream # Receive messages while True: data,addr = UDPSock.recvfrom(buf) # Recive the data input on host (listen up comment of 'addr') in standart stream on the UDPsock if data: # Statement of data res = simplejson.loads(data) # VARiable of using standart lib simplejson for parse stream in data (Recived on UDPSock) cur.execute("insert into logger_py(point, datatime, event_id, cardnumber, firstname, lastname, dep, nick) values (%s, %s, %s, %s, %s, %s, %s, %s)", (res['POINT'], res['DATATIME'], res['EVENTID'], res['CARDNUMBER'], res['FIRSTNAME'], res['LASTNAME'], res['DEP'], res['MIDDLENAME'])) # This is string of request in database with 8(eight row) and 8(eight) Values, # Which take the value of the parse content JSON con.commit() # Send request after check on exploite or injection, and close connection print "\nReceived message '", data,"'" # DEBUG info f = open('out.txt', 'a') # -= Special for СКЛЕРОЗ =- f.write("\nReceived message '") # -= параллельно пишем =- f.write(data) # -= полученные даныне =- f.write("' ;") # -= в файл в каталоге =- f.close() # -= ЗАКРЫВАЕМ =- print "\nReceived message '", data,"'" # DEBUG info # Close socket UDPSock.close()
Received message '{"POINT":"Дверь3","DATATIME":"2012-06-21 13:14:24","EVENTID":"22","CARDNUMBER":"********","FIRSTNAME":"username","LASTNAME":"usersurname","MIDDLENAME":"nickname","DEP":"departament"}' ;
Офлайн
0
Заюзать исключения и обрабутку исключений?
Офлайн
0
funnyman
Заюзать исключения и обрабутку исключений?
Отредактировано iandriyanov (Июль 10, 2012 20:03:55)
Офлайн
52
iandriyanov
Если бы я хотел поржать то неприменно написал бы на ЯП. За конструктив вам минус. Без обид. Топик новичков RTFM
import logging import random import time def action(): if random.choice([True, False]): raise ValueError return time.time() while True: try: current_time = action() print current_time except ValueError: logging.error('No time.') time.sleep(3)
[21:23] home:~/dev python exc.py
1341941004.31
ERROR:root:No time.
1341941010.32
1341941013.33
ERROR:root:No time.
1341941019.33
...
Офлайн
0
fata1ex
Надеюсь, смысл уловите:
Офлайн
52
Программы в питоне сами по себе не падают. Перед падением они швыряются исключениями, которые можно ловить. Если при попытке подключения к коннектору по адресу-порту программа падает, значит можно исключение отловить и обработать по своему усмотрению (например, направлять гневный вывод в лог-файл). Если не работает база, то ловим исключение около подключения к базе и работаем по соответствующему вашему желанию сценарию.
Офлайн
0
fata1ex
Программы в питоне сами по себе не падают. Перед падением они швыряются исключениями, которые можно ловить. Если при попытке подключения к коннектору по адресу-порту программа падает, значит можно исключение отловить и обработать по своему усмотрению (например, направлять гневный вывод в лог-файл). Если не работает база, то ловим исключение около подключения к базе и работаем по соответствующему вашему желанию сценарию.
Офлайн
0
а нельзя как нибудь убрать неадекватный минус из репы?
Офлайн
14
Ты на мои посмотри.
Офлайн
52
funnyman, по-моему я вам его убрал, разве нет?
Офлайн