ich möchte mich kurz vorstellen, mein Name ist Alex, ich programmiere seit ca. 15 Jahren, damals habe ich in der Schule mit Pascal angefangen,
dann ging es in der schulischen Ausbildung mit ASM und C/C++ weiter.
Dann im Beruf mit VBA, VB und VB.NET. Privat habe ich mal min Objective-C reingeschnuppert.
Jetzt als Admin bediene ich mich der Sprache, mit der sich mein Problem am besten lösen lässt. Da nehme ich mal PHP oder Perl, oder auch mal VB.NET oder ich arbeite komplett im Shell-Skript.
Bei einen Problem auf einen Linux-Rechner, bin ich auf Python gestoßen und finde die Sprache sehr praktisch, natürlich muss man sich erst einmal daran gewöhnen an die Einrückungen in den Schleifen etc.pp.
Mein Problem ist relativ schnell umschrieben, ich lese in einer Endlosschleife Ausgaben eines Programms aus das Messfühler abfragt. Das mache ich mit pexpect sehr genial, würde es pexpect nicht geben, müsste man es erfinden.
Code: Alles auswählen
if __name__ == "__main__":
child_mess = pexpect.spawn ('get_mess.bin -C s1')
while True:
try:
child_mess.expect('measurement okay')
process_sensor(child_mess.before)
except KeyboardInterrupt:
child_mess.close(force=True)
break
Das funktioniert sehr gut, ich starte den Prozess, wenn er den Text "measurement okay" entdeckt, übergibt er die vorherige Ausgabe an die Funktion process_mess()
Das wird sie bereinigt und die relevanten Messdaten gefiltert.
Diese Prüfe ich dann in einer letzten Funktion auf den richtigen Sensor.
Code: Alles auswählen
def process_sensor(sensor_text):
str1 = remove_tags(sensor_text)
str2 = str1.replace('sensor1: ','')
transcribed = str2
if transcribed.finde("123"):
os.system("get_mess.bin -T s1")
Das geht natürlich nicht da das Programm noch von dem ersten Prozess child_mess belegt ist und ich kann auch keinen neuen Prozessstarten, weil der Sensor noch
vom ersten Programm belegt ist.
Ich muss also den ersten Prozess child_mess beenden, dann kann ich meine speziellere Messung starten, wenn diese dann fertig ist fehlt mir der erste Prozess.
Klar ich habe ihn beendet:
Code: Alles auswählen
def process_sensor(sensor_text):
str1 = remove_tags(sensor_text)
str2 = str1.replace('sensor1: ','')
transcribed = str2
if transcribed.finde("123"):
child_mess.close(force=true)
os.system("get_mess.bin -T s1")
else:
#mache irgendwas da braucht man die Messung nicht
Wie kann ich das Programm anlegen, so dass er wenn "123" kommt den ersten Prozess beendet, die spezielle Messung vornimmt und dann den Prozess wieder startet.
Wenn andere Werte außer "123" kommen, dann soll er normal weiter machen?
Hoffe ihr habt einen Denkanstoß für mich
Danke für Eure Hilfe.
Gruß Alex