Hallo zusammen!
Ich habe hier ein "kleines" Problem.
Ich habe ein Skript welches mir über ein subprocess.Popen()
ein Programm aufstartet welcher auf eine Datenbank losgeht und dort die geforderte Datei in ein von mir gewünschtes Verzeichnis schreibt.
Nun zu meinem Problem.
Ich möchte nach erfolgreichem kopieren das Programm welches ich über subprocess.Popen() aufgestartet haben killen. Dieses Programm gibt mir keinerleit Rückgabewert d.h ich starte es und weiß nicht genau was danach passiert und wie lange das Programm braucht. Was mich an sich nicht stört. Aber.....
Nun zu meiner Frage:
gibt es die Möglichkeit über ein Python eigens Modul oder über eine win32 Erweiterungen heruszubekommen ob Windows gerade noch in die Datei schreibt oder diese bereits fertig ist. Ich nehme an das Windwos auch ein file handle erzeugt und diesen status auf die Datei setzt. Ich habe aber keine Ahnung wie ich an diesen Status komme dachte zunächst an os.stat() hab aber nach einem Test leider keinen Unterschied zwischen einer fertig geschriebenen Datei und einer gerade beschriebenen Datei festgestellt .
Gibt es eine Möglichkeit an einen solchen Status zu kommen? Oder muß ich meinen Ansatz nochmals anders gestalten mir erschien dies als den besten weg da ich sonst keine Anhaltspunkte habe wann die Datei fertig kopiert ist.
Problem datei status Windows
um genau zu sein ein PDM(Produktdatenmanagement) System.
Das legt mir die Datei in ein Verzeichnis und startet danach den passenden Viewer also z.b windows bild und faxanzeige bei einer tif Datei. Ich möchte also warten bis die Datei fertig kopiert und das PDM den viewer aufgestartet hat. Also muß ich wissen wann der Kopiervorgang abgeschlossen ist...
Damit ich nach aufstarten des Viewers das PDM wieder schliessen kann
Das legt mir die Datei in ein Verzeichnis und startet danach den passenden Viewer also z.b windows bild und faxanzeige bei einer tif Datei. Ich möchte also warten bis die Datei fertig kopiert und das PDM den viewer aufgestartet hat. Also muß ich wissen wann der Kopiervorgang abgeschlossen ist...
Damit ich nach aufstarten des Viewers das PDM wieder schliessen kann
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Und wo ist jetzt das Problem? Du wartest einfach bis dein Python die Datei fertig kopiert hat. Oder was kopiert denn die Datei?
TUFKAB – the user formerly known as blackbird
das PDM kopiert die Datei nicht mein Python. Ich stoße nur das PDM an der Rest macht dies dann. Und von diesem erhalte ich keine Rückgabewerte oder ähnliches...
Wenn ich das file handle erzeugen würde dann wäre das Problem kein problem da hast du Recht. aber da ich ausser über den "status" den Windows setzt keine andere Möglichkeit habe zu erfahren ob die Datei noch geöffnet ist muß ich eben diesen weg gehen...
Wenn ich das file handle erzeugen würde dann wäre das Problem kein problem da hast du Recht. aber da ich ausser über den "status" den Windows setzt keine andere Möglichkeit habe zu erfahren ob die Datei noch geöffnet ist muß ich eben diesen weg gehen...
Vielleicht hilft dir ja das.jens hat geschrieben:Versuche mal mit sysinternal's ProcessExplorer nach zu sehen, ob eine Handle noch auf die Datei weißt: http://support.microsoft.com/kb/q232830/
Grüße
Matthias
- Fluchen befreit von Kummer und Leid -
Matthias
- Fluchen befreit von Kummer und Leid -
Genau so was in der Art meinte ich.
Bloß hätte ich gerne ein Modul oder zumindest eine Möglichkeit aufgezeigt wie ich selbst diese Abfragen die das von dir verlinkte Programm macht bekomme.
Eventuell gibts ja in der win32api wso was in der Art hab aber noch nichts gefunden
Bloß hätte ich gerne ein Modul oder zumindest eine Möglichkeit aufgezeigt wie ich selbst diese Abfragen die das von dir verlinkte Programm macht bekomme.
Eventuell gibts ja in der win32api wso was in der Art hab aber noch nichts gefunden
-
- User
- Beiträge: 424
- Registriert: Montag 28. Juli 2003, 16:19
- Wohnort: /dev/reality
Mal nebenbei (kämpfe gerade mit bacula, brauche mal 'ne Pause) in die Docs von PyWin32 geschaut:
Such dort mal nach win32process.CreateProcess
Such dort mal nach win32process.CreateProcess
mfg, querdenkerCreates a new process and its primary thread. The new process executes the specified executable file
querdenker das ist leider nicht für diesen spezifischen Fall zu gebrauchen da ich keine Information über die Datei des ausgeführten Programms benötige sonder über eine Datei welche durch das aufgestartete Programm nur in ein bestimmtes Verzeichnis kopiert wird.
Deine erwähnte Funktion macht nicht mehr als dies
Danke trotzdem für eure Hilfe bin mal gespannt ob ich vielleicht heute mehr Glück habe und eventuell doch noch auf eine Funktion stoße, welche die gewünschte Funktionalität besitzt.
Falls ich etwas finde poste ich mein Lösungsansatz hier rein.
Falls jemand noch eine Idee hat bin über jede noch so kleine Hilfe froh.
mfg Brok3r
Deine erwähnte Funktion macht nicht mehr als dies
Code: Alles auswählen
process = subprocess.Popen(ausführbare Datei)
sub_id = process.pid
Falls ich etwas finde poste ich mein Lösungsansatz hier rein.
Falls jemand noch eine Idee hat bin über jede noch so kleine Hilfe froh.
mfg Brok3r
Hallo erneut zusammen!
Da ich nun nach verzweifelter Suche absolut nichts gefunden habe was mich zur Umsetzung meiner ersten Idee befähigt habe ich mir etwas neues ausgedacht was ich wohl oder übel auch so umsetzen werde/muß auch wenn ich mir der sich damit ergebenen Fehlerquellen bewußt bin..
Ich werde einfach sobald die Datei vorhanden ist im 1-2 Sekunden Rhytmus über eine os.stat() die Dateigröße ermitteln und sobald sich in einem Zyklus die größe der Datei nicht ändert werde ich den Prozess über ein kill abschiessen.
Wenn jemand eine bessere Lösung oder Ansatz hat bitte posten freue mich über jede noch so kleine Hilfe..
mfg
Brok3r
PS:Sorry für doppelpost
Da ich nun nach verzweifelter Suche absolut nichts gefunden habe was mich zur Umsetzung meiner ersten Idee befähigt habe ich mir etwas neues ausgedacht was ich wohl oder übel auch so umsetzen werde/muß auch wenn ich mir der sich damit ergebenen Fehlerquellen bewußt bin..
Ich werde einfach sobald die Datei vorhanden ist im 1-2 Sekunden Rhytmus über eine os.stat() die Dateigröße ermitteln und sobald sich in einem Zyklus die größe der Datei nicht ändert werde ich den Prozess über ein kill abschiessen.
Wenn jemand eine bessere Lösung oder Ansatz hat bitte posten freue mich über jede noch so kleine Hilfe..
mfg
Brok3r
PS:Sorry für doppelpost