Seite 1 von 1

Problem datei status Windows

Verfasst: Donnerstag 12. Januar 2006, 14:38
von Brok3r
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.

Verfasst: Donnerstag 12. Januar 2006, 14:47
von mitsuhiko
Sag mal was du startest. Da gibt es nämlich viele möglichkeiten.

Verfasst: Donnerstag 12. Januar 2006, 14:51
von Brok3r
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

Verfasst: Donnerstag 12. Januar 2006, 15:10
von mitsuhiko
Und wo ist jetzt das Problem? Du wartest einfach bis dein Python die Datei fertig kopiert hat. Oder was kopiert denn die Datei?

Verfasst: Donnerstag 12. Januar 2006, 15:13
von Gast
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...

Verfasst: Donnerstag 12. Januar 2006, 15:18
von mr.hide
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/
Vielleicht hilft dir ja das.

Verfasst: Donnerstag 12. Januar 2006, 15:22
von Brok3r
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 :-(

Verfasst: Donnerstag 12. Januar 2006, 16:01
von mr.hide
Ich finde auch nichts in der API.

Falls du ne Lösung findest opste die bitte, würde mich auch interessieren.

Verfasst: Donnerstag 12. Januar 2006, 21:30
von querdenker
Mal nebenbei (kämpfe gerade mit bacula, brauche mal 'ne Pause) in die Docs von PyWin32 geschaut:

Such dort mal nach win32process.CreateProcess
Creates a new process and its primary thread. The new process executes the specified executable file
mfg, querdenker

Verfasst: Freitag 13. Januar 2006, 07:29
von Brok3r
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

Code: Alles auswählen

process = subprocess.Popen(ausführbare Datei)
sub_id = process.pid
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

Verfasst: Freitag 13. Januar 2006, 14:43
von 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