Aus py-Script gestartetes Programm stürzt ab

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.
antaeus
User
Beiträge: 48
Registriert: Dienstag 19. September 2006, 10:10

Aus py-Script gestartetes Programm stürzt ab

Beitragvon antaeus » Freitag 6. April 2007, 10:11

Hallo zusammen!

Ich habe ein kleines Problem - mal wieder mit dem Starten und Beenden von Applikationen über Python. Ich will ein Programm, einen in Python geschriebenen Proxy-Server, testen. Dazu muss ich in der Lage sein können, das Programm aus einem anderen Python-Skript heraus zu starten und zu beenden. Starten und Beenden klappt -wie unten abgebildet- wunderbar, aber es treten irgendwelche Probleme auf, wenn ich den Proxy so starte. Der Proxy scheint plötzlich nicht mehr erreichbar zu sein... Woran es liegt, kann ich nicht sagen, da alle Debug-Ausgaben des Proxy nicht auf die Konsole geschrieben werden. Ich weiß nur, dass der Proxy, wenn er von Hand gestartet wurde, funktioniert.

Frage 1: Ist grundsätzlich irgendwas daran falsch, ein Programm so zu starten, wie ich das tue? Evtl. tritt bei dieser Art den Proxy zu starten einfach ein Problem auf, der Proxy stürzt ab ohne dass ich das merkt und das wars.

Frage 2: Wie kann ich erreichen, dass die Debug-Ausgaben des Proxy auch auf der Konsole des aufrufenden Skripts landen?


Code: Alles auswählen

   
    def start_proxy(self):
       
        python = "/usr/bin/python"
        proxy = "/home/tuebingen_test/proxy/main.py"
        command = python + " " + cosip_path
       
        print "Starting Proxy"
        self.proxy = Popen4(command)
        return self.proxy.pid
   
    def stop_cosip_proxy(self):
       
        print "Stopping Proxy"
        kill(self.proxy.pid, 15)
        return 0
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Freitag 6. April 2007, 10:21

[/quote]

Frage 1: Ist grundsätzlich irgendwas daran falsch, ein Programm so zu starten, wie ich das tue? Evtl. tritt bei dieser Art den Proxy zu starten einfach ein Problem auf, der Proxy stürzt ab ohne dass ich das merkt und das wars.
[/quote]

Schau dir mal bitte das neue Modul ``subprocess`` an.
[wiki]Neue Features#Subprocess[/wiki]

Da gibt es auch die Möglichkeit, Fehlermeldungen zurückzugeben. Dann siehst du, warum der Proxy abgeschmiert ist.
antaeus
User
Beiträge: 48
Registriert: Dienstag 19. September 2006, 10:10

Beitragvon antaeus » Freitag 6. April 2007, 10:57

Danke für deine Antwort. Ich werde mir das mal genauer ansehen. Vielleicht ist das was. Aber ich fürchte, dass das mein Problem nicht genau trifft.

Ich habe mich vorher vielleicht auch etwas unklar ausgedrückt. Der Proxy ist ein Programm, dass keine feste Laufzeit hat. D.h. ich kann den Proxy nicht einfach mal so aufrufen, auf dessen Beendung warten und dann einmal die Debug-Ausgabe auslesen... Der Proxy läuft quasi im Hintergrund und loggt alles was er so tut auf die Konsole.

Während dessen muss die Test-Anwendung, die den Proxy Startet, weiter laufen können!
BlackJack

Beitragvon BlackJack » Freitag 6. April 2007, 12:39

Wo genau landen denn die Ausgaben des Proxy-Programms, bzw. was machst Du mit denen?
antaeus
User
Beiträge: 48
Registriert: Dienstag 19. September 2006, 10:10

Beitragvon antaeus » Freitag 6. April 2007, 16:31

Die Ausgaben des Proxy dienen nur Debug-Zwecken. Die schreiben halt auf die Konsole, wenn Pakete empfangen werden und wieder rausgehen... Ich habe allerdings keine Ahnung, was mit diesen Ausgaben geschieht, wenn ich den Proxy über das Skript (wie oben beschrieben) starte. Auf die Konsole des startenden Programms werden sie jedenfalls nicht geschrieben. Das unangenehme ich leider auch, dass wenn das Programm abschmiert, z.B. bei einem Programmierungsfehler, dass KEIN Python Trace auf der Konsole des aufrufenden Programms erscheint.
BlackJack

Beitragvon BlackJack » Freitag 6. April 2007, 18:26

Dann haben wir hier wahrscheinlich das Problem. Die Standardausgabe vom Proxy wird mit Deinem Skript verbunden und Du liest sie nie aus. Der Proxy schreibt in die Pipe, irgendwann ist der Puffer voll und der nächste Schreibzugriff blockiert den Proxy.
antaeus
User
Beiträge: 48
Registriert: Dienstag 19. September 2006, 10:10

Beitragvon antaeus » Freitag 6. April 2007, 18:57

Ah, so etwas in der Richtung habe ich mir auch schon überlegt. D.h. ich muss die Pipe auslesen oder flushen und dann ist das Problem behoben?

Könntest du mir bitte sagen, wie ich das bewerkstellige? Ich muss dieses Problem ganz schnell lösen und hier brennt es an allen Ecken und Enden...
BlackJack

Beitragvon BlackJack » Freitag 6. April 2007, 19:47

Ich würde `subprocess` benutzen. Da werden entweder die Dateihandles vom Pythonprogramm weiterbenutzt, d.h. die Ausgaben vom Proxy werden wieder "sichtbar", oder Du kannst `stderr` und `stdout` vom gestarteten Programm explizit nach "/dev/null" umleiten. Einen Namen für so ein "Null-Device" gibt's plattformunabhängig unter `os.devnull`.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]