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.
Auf Prozessende warten
-
- User
- Beiträge: 70
- Registriert: Mittwoch 10. November 2010, 18:41
Hmm durch ein wenig rumspielen hab ich herausgefunden, dass der Prozess an ein Objekt gebunden ist.
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
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
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
Kannst du den Prozess nicht mit subprocess erzeugen? Dann könntest du mit
auf dessen Terminierung warten.
Code: Alles auswählen
p = subprocess.Popen(args)
p.wait()
@Rekrul: Das passiert in einer externen Bibliothek die nicht verändert werden soll.