Seite 1 von 1

Auf Prozessende warten

Verfasst: Dienstag 14. Dezember 2010, 15:16
von ravenheart
Hallo, ich verwende eine Bibliothek, welche in einer Methode ein externes Programm aufruft.
Ich erhalte keine PID von dem erstellten Prozess,

Ich muss aber dringend warten, bis der Prozess beendet ist.

Wie kann ich das erreichen?

os.wait() verstehe ich nicht so recht, aber wenn ich es einbaue, hängt einfach mal alles.

Der Prozess wird von os.popen() erzeugt. Allerdings sollte ich das Modul, das ich verwende nicht editieren.

Re: Auf Prozessende warten

Verfasst: Dienstag 14. Dezember 2010, 15:18
von BlackJack
@ravenheart: Ungünstige Ausgangsbedingungen würde ich mal sagen.

Re: Auf Prozessende warten

Verfasst: Dienstag 14. Dezember 2010, 15:37
von ravenheart
Hmm durch ein wenig rumspielen hab ich herausgefunden, dass der Prozess an ein Objekt gebunden ist.

Code: Alles auswählen


def my_method():
    g = Plotobject()            ----> Hier ensteht ein Prozess
    g.plot( plotfile )          ----> hier wird in diesen Prozess reingepiped

    os.remove( plotfile)        ----> ich möchte die Datei nach Benutzung löschen, weiß aber nicht wann plot() fertig ist, der Prozess existiert solange g existiert

Das ist der grobe Aufbau.
Gibt es hier eine Möglichkeit das ganze sicher zu beenden und die Datei zu löschen?

Aufmerksam wurde ich auf das Problem, als Beschwerden über unreadable files kamen, die Datei war schon gelöscht, bevor etwas geplottet wurde

Soweit ich das sehen kann ist es ja nichtmal sicher, dass alles nach Plan läuft, selbst wenn ich die Datei nicht löschen möchte,
Was würde passieren, wenn meine Methode zu früh beendet wird?

Um ganz genau zu sein:
Ich verwende das Gnuplot -Modul
Es bietet zwar File-Klassen an, aber da ich komplexe Befehle verwenden möchte, lege ich selbst die temporären Dateien an und bastle
mir einen command-string zusammen, welchen ich plot übergebe.

Diese strings haben dann etwas den Aufbau:
"'/tmp/Vk8jdgh' using 5:15 every :::0::0 title 'A' , '/tmp/Vk8jdgh' using 5:15 every :::1::1 title 'B', ..."
Ich hab noch keine Möglichkeit gesehen so etwas einfacher zu gestalten

Re: Auf Prozessende warten

Verfasst: Mittwoch 15. Dezember 2010, 10:47
von quant
wie wärs die matplotlib zu verwenden ?

Re: Auf Prozessende warten

Verfasst: Mittwoch 15. Dezember 2010, 15:11
von Rekrul
Kannst du den Prozess nicht mit subprocess erzeugen? Dann könntest du mit

Code: Alles auswählen

p = subprocess.Popen(args)
p.wait()
auf dessen Terminierung warten.

Re: Auf Prozessende warten

Verfasst: Mittwoch 15. Dezember 2010, 15:51
von BlackJack
@Rekrul: Das passiert in einer externen Bibliothek die nicht verändert werden soll.