Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Ablaufproblem mit pexpect

Mitglied: facebraker

facebraker (Level 1) - Jetzt verbinden

22.04.2013 um 15:05 Uhr, 1820 Aufrufe, 2 Kommentare, 1 Danke

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.

01.
if __name__ == "__main__": 
02.
 
03.
    child_mess = pexpect.spawn ('get_mess.bin -C s1') 
04.
 
05.
    while True: 
06.
        try: 
07.
            child_mess.expect('measurement okay') 
08.
            process_sensor(child_mess.before) 
09.
        except KeyboardInterrupt: 
10.
            child_mess.close(force=True) 
11.
            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.

01.
def process_sensor(sensor_text): 
02.
   str1 = remove_tags(sensor_text) 
03.
   str2 = str1.replace('sensor1: ','') 
04.
   transcribed = str2 
05.
   if transcribed.finde("123"): 
06.
      os.system("get_mess.bin -T s1")
Soweit alles toll, ich prüfe nun ob es "123" ist, ist es das soll ich neue speziellere Messung passieren.
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:

01.
def process_sensor(sensor_text): 
02.
   str1 = remove_tags(sensor_text) 
03.
   str2 = str1.replace('sensor1: ','') 
04.
   transcribed = str2 
05.
   if transcribed.finde("123"): 
06.
       child_mess.close(force=true) 
07.
                 os.system("get_mess.bin -T s1") 
08.
        else: 
09.
                 #mache irgendwas da braucht man die Messung nicht
Wenn er dann wieder in die Endlosschleife in Main zurückkehrt, ist der Prozess nicht mehr da

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


Mitglied: 64748
22.04.2013, aktualisiert um 17:47 Uhr
Hallo Alex,

ich bin weder Programmierer noch hab ich Ahnung von Python. Also beste Voraussetzungen

Eine Verständnisfrage:
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?
Bedeutet das, dass der erste Prozess nur unterbrochen wird, aber mit der gleichen PID wie vorher wieder aufgenommen werden soll?

Oder ist es so, dass es quasi zwei Funktionen sind, die sich wechselseitig aufrufen? Denn dann wäre es ja einfach, also dass die Funktion, die die spezielle Messung vornimmt die ursprüngliche Funktion wieder aufruft.

Wenn es allerdings darum geht, nur den Prozess zu unterbrechen, dann musst Du der Funktion für die spezielle Messung die PID des Elternprozesses mitgeben.
http://www.linux-praxis.de/linux1/prozess.html und http://www.willemer.de/informatik/unix/unprfork.htm wären zu lesen. Es ist eigentlich kein Python-Problem. Es geht um Unix-Prozesse und die werden von allen Programmiersprachen, einschließlich der Shell, auf jedem Unix/Linux-System unterstützt.

Oder der Elternprozess wartet darauf, dass der Kindprozess abgeschlossen ist.

Markus
Bitte warten ..
Mitglied: facebraker
22.04.2013 um 19:09 Uhr
Hallo Markus,

eigentlich kein großes Linux Problem, ich rufe das Programm einmal mit den Argumenten XYZ auf für die erste Messung, die in einer Endlosschleife immer Daten liefert.
Ist in den Daten ein bestimmter String , soll die erste Messung unterbrochen werden (gekillt) (child_mess.close(force=True)
und dann das selbe Programm mit den Argumenten ABC gestartet werden, das liefert mir nur einen einzigen String, den ich weiter verarbeite

jetzt kommt es

Nun möchte ich die erste Endlosschleife wieder starten und weiter arbeiten lassen und Daten liefern, bis wieder der bestimmt String kommt, und abgearbeitet wird.

Ich würde IMHO sagen, kein Linux Problem, weil das Programm wird einmal so und einmal anders gestartet, es weiß nichts mehr und interessiert es auch nicht.

Mein Problem ist, wie kann ich nach der speziellen Messung (die abgeschlossen ist) die erste Endlosschleife wieder ausführen.

Im Moment sieht es so aus:

Starte das Programm

Endloschleife
ich höre ob es einen bestimmten String kommt
geht in die funktion
Es wird der bestimmte String erkannt
Prozess wird beendet
eine spezielle Messung wird gemacht und Liefert ergebnis
Er kehrt in die Endlosschleife zurück

Versucht zu hören und merkt, dass das Programm nicht gestartet ist
FEHLER

Auch ein Start des Programms innerhalb der Endlosschleife klappt nicht auch mit
Variablen nicht, die es steuern.


Gruß Alex
Bitte warten ..
Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 17 StundenWindows 103 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 19 StundenAdministrator.de Feedback14 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 TagHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 2 TagenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Server Hardware
Welche Rolle spielt Design bei Enterprise IT Hardware?
Frage von ApolloXServer Hardware17 Kommentare

Ich arbeite für einen internationalen Elektronikhersteller in der Forschung und meine Aufgabe ist es, Feedback von Nutzern in Hinsicht ...

Windows Network
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Network15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Memory Cards
Vergessliche USB-Sticks?
Frage von hanheikMemory Cards14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Hyper-V
Hyper-V mit altem XEON-Server. Was ist falsch?
Frage von LollipopHyper-V11 Kommentare

Hallo Bin etwas frustriert. Kleinbetrieb, ca. 15 PC's, 2 Stk. Server mit einigen virtuellen PC's für Fernwartung, VaultServer für ...