Ich bin am versuchen ein kleines Programm zu optimieren bzw für meine zwecke abzuändern.
Vorab das Programm A liest aus einem anderen Programm B Datenzeilen aus und schreibt diese in ein String, nun möchte ich das bevor das Programm A das ganze in die DB schreibt, den String "message" auf 1:, !, <SUB> überprüft und wenn diese Vorhanden sind die Zeile verwirft und keinen Eintrag in die DB macht.
Weiters möchte ich das er denn denn kompletten String bevor er ihn in die DB schreibt, überprüft ob er in den letzten 5 min schon einmal in die DB geschrieben . Wenn ja wieder verwerfen und mit neuer Zeile fortfahren.
Code: Alles auswählen
import time
import sys
import subprocess
import os
import mysql
import mysql.connector
try:
connection = mysql.connector.connect(host = "****", user = "****", passwd = "****", db = "POCSAG1200")
except:
print "Keine Verbindung zum Server"
exit(0)
def curtime():
return time.strftime("%Y-%m-%d %H:%M:%S")
with open('Fehler.txt','a') as file:
file.write(('#' * 20) + '\n' + curtime() + '\n')
multimon_ng = subprocess.Popen("sudo rtl_fm -f 147.320M -s 22050 | multimon-ng -a POCSAG1200 -f alpha -t raw -",
#stdin=rtl_fm.stdout,
stdout=subprocess.PIPE,
stderr=open('error.txt','a'),
shell=True)
try:
while True:
line = multimon_ng.stdout.readline()
multimon_ng.poll() # multimon wird gestartet
if line.__contains__("Alpha:"): # Die Ausgabe wird nach dem Text "Alpha" durchsucht
if line.startswith('POCSAG'):
address = line[21:28].replace(" ", "") # Zeichen 22 bis 28. RIC wird in die Variabel "adress" gelegt.Leerzeichen werden entfernt. Wenn kleiner als 7 Stellen wird der Rest vorne weg mit 0 aufgefüllt (zfill). Feld muss in VARCHAR vorliegen, führendene 0 wird sonst nicht geschrieben!
subric = line[40:41].replace(" ", "").replace("3", "4").replace("2", "3").replace("1", "2").replace("0", "1") # Sub-RIC auslesen und anpassen (3=4, 2=3, 1=2, 0=1)
message = line.split('Alpha: ')[1].strip().rstrip('').strip() # Die Nachricht wird nach dem Bereich Alpha in die Variabel "message" abgelegt. EOT wird entfernt.
output=(curtime()+' '+ address+' '+ subric+' '+ message+'\n') # Es wird ein String in die Variabel "output" gelegt. Hier: Adresse + Zeitstempel + Text
if message line.startswith('<NUL>'):
print curtime(), address, subric, message # Die Meldung wird im Terminal angezeigt
with open('POCSAG.txt','a') as f: # Der String output wird in die Datei POCSAG.txt geschrieben.
f.write(output)
#Datensatz einfügen per mySQL
cursor = connection.cursor()
cursor.execute("INSERT INTO DATENBANKTABELLE (time,ric,funktion,text,einsatz) VALUES (%s,%s,%s,%s,%s)",(curtime(),address,subric,message,'0',))
cursor.close()
connection.commit()
except KeyboardInterrupt:
os.kill(multimon_ng.pid, 9)
Gruss Jarhead