Auf Konsolenausgabe reagieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
RudelGurken
User
Beiträge: 29
Registriert: Freitag 24. Mai 2013, 09:51

Hi,
eine hoffentlich abschließende Frage:
Wie kann ich in Python in Kombination mit Python auf Systemausgaben reagieren?Also ein Interrupt(?).Ich gebe mit einem anderen Pythonschnipsel Text aus, diesen möchte ich weiter verarbeiten. Die Ausgaben erfolgen jedoch in unregelmäßigen Abständen, daher wäre das in der Art "warte auf Ausgaben", wenn "Ausgabe kommt greife ab und mache was damit"
mit besten Grüßen
das Rudel Gurken
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Das klassische Producer Consumer Problem also; Du solltest Dir mal das threading-Modul angucken; dazu ggf. auch das queue-Modul.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@RudelGurken: In Python gibt es Generatoren. Statt also etwas auszugeben (wahrscheinlich meinst Du einen »print«-Aufruf) wird über das Schlüsselwort »yield« die Kontrolle an die Aufrufende Funktion zurückgegeben, die dann den den Wert weiterbearbeiten kann:

Code: Alles auswählen

def generate_values():
    while True:
        # hier wird eine Wert value berechnet
        yield value

def process():
    for value in generate_values():
        print value # oder mach was Sinnvolles damit
RudelGurken
User
Beiträge: 29
Registriert: Freitag 24. Mai 2013, 09:51

Oh....ich hoffe ich überfordere mich damit nicht gleich*G*. Mein "kleines" Problem ist, dass ich einige Dinge von PHP herholen muss, da dachte ich mir die Werte lasse ich einfach auf der Konsole ausgeben und lese diese dann mit Python ein und bearbeite das. Wahrscheinlich gibt es auch da bessere Methoden, aber die kenne ich noch nicht.
Für heute ist bei mir jedoch erstmal Feierabend und ich wünsche auch euch noch einen schönen Sonntag und bedanke mich für die "geile" Hilfe!!!
mit besten Grüßen
eure Gurke
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Wenn das PHP-Skript die Daten zeilenweise ausgibt, dann kann man in Python einfach mittels `for`-Schleife über `sys.stdout` iterieren. Jeder Iterationsschritt liefert dann eine neue Zeile, die halt jeweils aus Stdout gelesen wird. Folglich würde die Schleife immer dann, wenn das PHP-Skript gerade nichts mehr liefert, anhalten und auf die nächste Datenzeile zur Verarbeitung warten.

Eine ganz gute Alternative zu der Konsolenausgabe wäre übrigens die Nutzung von Sockets. Man könnte dann aus PHP heraus die Daten an einem ausgewählten Port schreiben und diese im Python-Programm von diesem Port abfragen. Das alles würde dann intern über den Netzwerk-Stack des Betriebssystems laufen, d.h. die Daten verlassen den Rechner in diesem Fall natürlich nicht.
RudelGurken
User
Beiträge: 29
Registriert: Freitag 24. Mai 2013, 09:51

Hi,
besten Dank für diese Informationen, ich sehe schon, dass der Weg nach Bitterfeld nicht trivial beschrieben werden kann. Das mit den Sockets klingt gut, ich werde mich einfach mal dran machen und den Spaß versuchen Schritt für Schritt umzusetzen.
mit besten Grüßen und einen guten Start in die Woche wünschend
Gurke
Antworten