schönen guten tag, die forensuche hat mich leider nicht sehr weit gebracht, weil ich auch nicht so genau weiß, wonach ich suchen muss/soll.
ich arbeite gerade an einem programm, man höre und staune, welches dateien verarbeiten soll. das programm soll auf einem (windows)server laufen auf dem dateien hochgeladen werden. mit einem python script will ich diese weiterverarbeiten.
momentan ist der plan alle 10 sek oder so zu pollen, also einfach nachzugucken ob sich ne datei in nen bestimmten pfad befindet.
dummerweise hab ich dann halt das problem, dass ich nicht weiß, ob die datei schon fertig geuppt wurde. ich lade sie zwar erst in ein temp ordner und kopiere sie nach vollständigem upload in den "quellordner", aber das kopieren dauert ja auch nen paar sekündchen und wenn das pollen zu nem dummen zeitpunkt feuert hab ich ein problem?!
wie stell ich "sicher" fest, das die datei "frei" zum weiterverarbeiten ist. ich dachte ein einfaches öffnen mit schreibrechten führt zu einer exception, dem ist aber leider nicht so
das einzige was mir jetzt einfallen würde ist, die datei zu öffnen, größe merken und wieder schließen; ne sekunde warten und dann größe vergleichen.
ich hoffe es kann mir einer von euch helfen, ne gescheite lösung zu finden
mfg LordNaikon
Wie feststellen ob Datei in Benutzung ist?
Unter Linux würde man sowas mit ''lsof'' machen. Also habe ich einfach mal nach ''lsof windows'' gesucht und bin unter anderem auf dieses Tool gestoßen: http://technet.microsoft.com/en-us/sysi ... 96655.aspx
Ich konnte es jetzt nicht testen, aber vielleicht hilft es dir ja. Ansonsten dürfte dir der genannte Suchbegriff vll. auch schon weiterhelfen. Falls Windows (was ich glaube) kein ls-Äquivalent von Haus aus hat, wird Python es sehr wahrscheinlich auch nicht kennen und du musst externe Programme benutzen.
Schönen Gruß,
brb
Ich konnte es jetzt nicht testen, aber vielleicht hilft es dir ja. Ansonsten dürfte dir der genannte Suchbegriff vll. auch schon weiterhelfen. Falls Windows (was ich glaube) kein ls-Äquivalent von Haus aus hat, wird Python es sehr wahrscheinlich auch nicht kennen und du musst externe Programme benutzen.
Schönen Gruß,
brb
- mkesper
- User
- Beiträge: 919
- Registriert: Montag 20. November 2006, 15:48
- Wohnort: formerly known as mkallas
- Kontaktdaten:
Ich denke, am besten wäre es, wmi zu benutzen, um nachzuschauen, ob auf dem Share die Datei noch im Schreibzugriff ist.
EDIT: URL eingefügt. Es gibt Beispiele in VB für sowas, die müsstest du auf Python umbiegen.
EDIT: URL eingefügt. Es gibt Beispiele in VB für sowas, die müsstest du auf Python umbiegen.
Eine solche Prüfung ist nicht frei von Race Conditions, insofern lässt sich das nicht verlässlich prüfen.
Die vernünftige Lösung wäre, dass das kopierende Programm nach Abschluss der Kopie die Datei für das verarbeitende Programm explizit freigibt, in dem z.B. der Pfad in eine geteilte Datenbank eingetragen wird, oder über eine IPC-Verbindung an das verarbeitende Programm übertragen wird.
Die vernünftige Lösung wäre, dass das kopierende Programm nach Abschluss der Kopie die Datei für das verarbeitende Programm explizit freigibt, in dem z.B. der Pfad in eine geteilte Datenbank eingetragen wird, oder über eine IPC-Verbindung an das verarbeitende Programm übertragen wird.
Wenn man das hochladende Programm nicht modifizieren kann, ist das so nicht möglich.lunar hat geschrieben:Die vernünftige Lösung wäre, dass das kopierende Programm nach Abschluss der Kopie die Datei für das verarbeitende Programm explizit freigibt, in dem z.B. der Pfad in eine geteilte Datenbank eingetragen wird, oder über eine IPC-Verbindung an das verarbeitende Programm übertragen wird.
Eine auch nicht absolut sichere, aber trotzdem wahrscheinlich hinreichend verlässliche Variante könnte darin bestehen, dass man über eine gewisse Zeit die Größe der Datei überprüft. Ändert sich diese nicht mehr, so ist davon auszugehen, dass der Upload beendet wurde.
-
- User
- Beiträge: 58
- Registriert: Dienstag 9. Februar 2010, 13:41
@Barabbas: vielen dank ich schau gleich mal nach und berichte.
@mkesper: dir auch danke, hab ich das richtig verstanden (ich kenn wmi leider nicht), dass ich damit nachprüfen kann ob ein programm ein handle auf ein file hat?
@lunar: mit dem gedanken hab ich auch schon gespielt, leider ist das kopier programm nicht von mir ..
/EDIT:
@/me: so ist es leider, die idee hatte ich auch schon (s.o.) aber iss wirklich nicht so elegant, aber vielleicht "hinreichend", wie du sagtest.
@mkesper: dir auch danke, hab ich das richtig verstanden (ich kenn wmi leider nicht), dass ich damit nachprüfen kann ob ein programm ein handle auf ein file hat?
@lunar: mit dem gedanken hab ich auch schon gespielt, leider ist das kopier programm nicht von mir ..
/EDIT:
@/me: so ist es leider, die idee hatte ich auch schon (s.o.) aber iss wirklich nicht so elegant, aber vielleicht "hinreichend", wie du sagtest.
Bevor Du Dich mit WMI/Win-API calls, IPC und DBs rumärgerst, der Klassiker ist doch Lock-Write-Unlock. (Eigentlich ist das das Standardverhalten in Windows. )
Wie kopierst Du denn die Dateien? Falls Du es mit Python machst, kannst Du die Zieldatei selbst locken, innerhalb eines Batch-Skriptes könntest Du das Verhalten mit einer Lock-Datei simulieren.
Übrigens dürfte das Verschieben (move) einer Datei innerhalb eines Dateisystems atomar sein, d.h. mit Erscheinen des Dateinamens ist die Datei zugriffsbereit.
Wie kopierst Du denn die Dateien? Falls Du es mit Python machst, kannst Du die Zieldatei selbst locken, innerhalb eines Batch-Skriptes könntest Du das Verhalten mit einer Lock-Datei simulieren.
Übrigens dürfte das Verschieben (move) einer Datei innerhalb eines Dateisystems atomar sein, d.h. mit Erscheinen des Dateinamens ist die Datei zugriffsbereit.
-
- User
- Beiträge: 58
- Registriert: Dienstag 9. Februar 2010, 13:41
@Barabbas: schönes tool kannte ich wie gesagt nicht, leider benötigt man dafür admin rechte
@jerch: ernsthaft? ich habs wie gesagt noch nicht probiert, ich dachte mir nur: (mensch darauf musst du achten).
ich werd mir gleich mal nen große datei schnappen und sie vielleicht auf nen usb stick kopieren(weils schön langsam ist) und mal sehen ob ich es öffnen kann, bevor es kopiert ist!
achso ich lese gerade von dir "dürfte das Verschieben (move) einer Datei innerhalb eines Dateisystems atomar sein" wäre es mit dem usb stick ja leider nicht .. naja muss es halt ne noch größere sein.
und nein das kopierprogramm ist nicht in python und auch nicht von mir.
@jerch: ernsthaft? ich habs wie gesagt noch nicht probiert, ich dachte mir nur: (mensch darauf musst du achten).
ich werd mir gleich mal nen große datei schnappen und sie vielleicht auf nen usb stick kopieren(weils schön langsam ist) und mal sehen ob ich es öffnen kann, bevor es kopiert ist!
achso ich lese gerade von dir "dürfte das Verschieben (move) einer Datei innerhalb eines Dateisystems atomar sein" wäre es mit dem usb stick ja leider nicht .. naja muss es halt ne noch größere sein.
und nein das kopierprogramm ist nicht in python und auch nicht von mir.
- mkesper
- User
- Beiträge: 919
- Registriert: Montag 20. November 2006, 15:48
- Wohnort: formerly known as mkallas
- Kontaktdaten:
Eher ein User, aber ansonsten: Ja.lordnaikon hat geschrieben:@mkesper: dir auch danke, hab ich das richtig verstanden (ich kenn wmi leider nicht), dass ich damit nachprüfen kann ob ein programm ein handle auf ein file hat?