Problem datei status Windows

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.
Antworten
Brok3r
User
Beiträge: 29
Registriert: Montag 24. Oktober 2005, 13:48

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.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Sag mal was du startest. Da gibt es nämlich viele möglichkeiten.
TUFKAB – the user formerly known as blackbird
Brok3r
User
Beiträge: 29
Registriert: Montag 24. Oktober 2005, 13:48

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
mitsuhiko
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
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...
mr.hide
User
Beiträge: 108
Registriert: Montag 29. August 2005, 14:02

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.
Grüße
Matthias

- Fluchen befreit von Kummer und Leid -
Brok3r
User
Beiträge: 29
Registriert: Montag 24. Oktober 2005, 13:48

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 :-(
mr.hide
User
Beiträge: 108
Registriert: Montag 29. August 2005, 14:02

Ich finde auch nichts in der API.

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

- Fluchen befreit von Kummer und Leid -
querdenker
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
Creates a new process and its primary thread. The new process executes the specified executable file
mfg, querdenker
Brok3r
User
Beiträge: 29
Registriert: Montag 24. Oktober 2005, 13:48

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
Brok3r
User
Beiträge: 29
Registriert: Montag 24. Oktober 2005, 13:48

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
Antworten