2 Programme und eine Weboberfläche - Kommunikation

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
freakTAB
User
Beiträge: 2
Registriert: Mittwoch 22. Juni 2011, 11:07

Ich habe hier eine Flask Applikation mit der ich ein anderes Pythonscript quasi fernstarten will. Das ferngesteuerte Programm ist ein kleines Befehlszeilentool welches auch selbständig durchläuft wenn es einmal gestartet wurde. Nun wäre es allerdings schön wenn ich die Ausgaben die dieses Progrämmchen auf StdOut macht auch auf der Webseite zeitnah ausgegeben werden. Nur bin ich mir nicht ganz sicher wie. Kann ich dazu subprocess gesichert benutzen? Bei meinen Tests habe ich nur immer erst nach Beenden des subprozesses die Ausgaben erhalten. Oder muss ich da mit irgendeiner IPC Technik ran (XML-RPC etc)?

Wäre dankbar für einen Schubs in die richtige Richtung.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du kannst auch mit Subprocess in "Echtzeit" Daten auslesen. Dazu gabs vor einigen Wochen mal nen Thread hier im Forum iirc.

Sollen die Daten dann auch auf der Seite ausgegeben werden, brauchst Du eine Art Pulling mittels AJAX würde ich mal sagen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
freakTAB
User
Beiträge: 2
Registriert: Mittwoch 22. Juni 2011, 11:07

Ja, dass ich die Ausgabe über eine "AJAX Pumpe" realisieren muss war mir auch schon klar - es ging um die Kommunikation zwischen Webseitenbackend und Tool. Hab jetzt den Denkfehler bei meinen Testaufbau mit subprocess gefunden. Die Ausgaben dürfen nicht gepuffert werden. Also ein Pythonscript dann immer mit der Kommandozeile

Code: Alles auswählen

python -u script.py
aufrufen. Ansonsten landet StdOut in einem Zwischenpuffer der u.U. erst nach dem Beenden geflusht wird und in der pipe bei subprocess.popen landet. Danke für den Hinweis dass es doch geht, ansonsten hätte ich nicht weitergesucht ;)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also wenn Du schon ein Python-Script hast, könntest Du Dir doch auch überlegen das zu importieren, oder nicht? Ok, müßte man mal gucken, ob sich das mit den Threads des Webservers verträgt...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten