[1234] in UNC Pfad / os.path.getmtime

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
cbesi
User
Beiträge: 41
Registriert: Dienstag 11. August 2020, 22:04

Hallo,

ich habe ein Tool welches das Alter von Dateien in einem UNC Pfad prüft und wenn älter als x Sekunden eine Aktion ausführt.

Funktioniert super, aber ich habe einen UNC Pfad nach dem Muster \\pfad1\pfad2\test[1234]\*.txt (\\\\Pfad1\\pfad2\test[1234]\\*.txt)

Das os.path.getmtime scheint mit den [ ] ein Problem zu haben, findet den Pfad dann nicht. Mache ich einen Test mit einem Pfad ohne das [ ] geht es.
Sirius3
User
Beiträge: 17844
Registriert: Sonntag 21. Oktober 2012, 17:20

Hast Du ei Muster oder enthält der Pfad wirklich []? Mit Mustern kann os.path.getmtime nichts anfangen, das braucht einen konkreten Dateinamen, Dateien nach Muster suchen kann glob.glob, obwohl man heutzutage für das alles pathlib.Path verwenden würde.
imonbln
User
Beiträge: 149
Registriert: Freitag 3. Dezember 2021, 17:07

os.path.getmtime sollte nicht mehr benutzt werden, statt dessen sollte man die pathlib verwenden. Die kann angeblich teilweise UNC Pfade und gibt die mtime beim stat Aufruf zurück.

Abgesehen davon, als jemand der früher viel mit verteilten Daten zu tun hatte, weiß ich das stat auf Netzwerk Ressourcen zum Teil falsche Ergebnisse liefern kann, hierbei kommt es sehr auf das Transportprotokoll, was da zurückkommt. Dabei ist es unabhängig, ob du os.path.getmtime oder pathlib.stat() nimmst, beide nutzen den gleichen syscall intern. Sei also vorsichtig nicht das du aus Versehen die wichtigen Vertriebszahlen löscht, weil die Netzwerktransportschicht, da werte aus dünner Luft erzeugt.
cbesi
User
Beiträge: 41
Registriert: Dienstag 11. August 2020, 22:04

Ja der Pfad enthält wirklich die [1234] also die [], wenn ich einen Pfad ohne die [1234] also ohne diese Zeichen [] nutze funktioniert mein Script einwandfrei. Leider kann ich den blöden Pfad nicht ändern.
Benutzeravatar
__blackjack__
User
Beiträge: 13270
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@cbesi: Kannst Du mal ein *konkretes* Beispiel zeigen. Nicht das Du hier an der falschen Stelle suchst und eigentlich darüber stolperst, dass "\test" ein Tabulatorzeichen gefolgt von "est" ist und nicht ein Backslash gefolgt von "test".
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
cbesi
User
Beiträge: 41
Registriert: Dienstag 11. August 2020, 22:04

Hallo,

Danke für die Hilfen. Ich habe es nun gelöst in dem ich den Pfad separat freigegeben habe ohne die [1234] im Pfadnamen also aus \\Server\share\share[12134]\test\*.txt ist nun \\Server\share\share1234\test\*.txt geworden und alles funktioniert. Wieso es nicht ging keine Ahnung. Hatte zwischendurch auch versucht die Zeichen mit Hexzeichen zu ersetzen, ging aber trotzdem nicht \x5b \x5d ....

Danke trotzdem....

Keine Lösung, aber es lebe der workarround.....
Benutzeravatar
DeaD_EyE
User
Beiträge: 1038
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Bitte den Einwand von BlackJack berücksichtigen. Ein \t in einem String ist ein Tabulator-Zeichen.
Wenn man diese Interpretation unterbinden will, dann einen Raw String verwenden oder normale Schrägstriche oder mit backslash den anderen backslash escapen.
Probier es einfach mal aus, ob es so geht. Keine Lust jetzt eine VM mit Windows zu starten.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten