Seite 1 von 1

Datei entfernen sobald möglich.

Verfasst: Donnerstag 20. August 2020, 07:48
von benpython
Hallo zusammen,

in meinem Skript will ich eine bestimmte Datei entfernen. Wenn das fehlschlägt weil z.B. de Datei gerade noch verwendet wird.
Soll das Skript 5 Sekunden warten und es dann nochmal probieren. Und das als loop solange bis es funktioniert.

Code Beispiel ist in Python 2.7 das ist notwending aufgrund der verwendeten Bibliotheken.

Code: Alles auswählen

	    try:              
                print getActualTime()+" REMOVING "+f+" FROM INPUT FOLDER!"
                os.remove(os.path.join(pdf_dir,f))
            except Exception as e:
                print e
                
Wie kann ich das machen? Innerhalb von except ist die Exception immer wahr also kann ich keine while loop einbauen..

Kann jemand helfen?
Danke im Voraus!

Re: Datei entfernen sobald möglich.

Verfasst: Donnerstag 20. August 2020, 07:54
von sparrow
Wechsel auf Python 3.x. Wirklich. Wenn die Bibliotheken das nicht können, dann brauchst du andere Bibliotheken. Die musst du halt suchen.

Warum das mit der while-Schleife nicht funktionieren soll, verstehe ich nicht.

Pseudocode:

Code: Alles auswählen

solange die_datei existiert:
    versuche:
        lösche die_datei
    fehlschlag:
        warte 5 Sekunden

Re: Datei entfernen sobald möglich.

Verfasst: Donnerstag 20. August 2020, 07:55
von Jankie

Code: Alles auswählen

import pathlib
import time

PATH = pathlib.Path(r'C:\Users\xxx\Desktop\Microsoft Office Excel-Arbeitsblatt (neu).xlsx')


while True:
    try:
        PATH.unlink()
        print(f"Die Datei {PATH.name} wurde gelöscht!")
        break
    except PermissionError:
        print(f"Datei {PATH.name} konnte nicht gelöscht werden.")
        time.sleep(5)

Re: Datei entfernen sobald möglich.

Verfasst: Donnerstag 20. August 2020, 08:16
von benpython
Jankie hat geschrieben: Donnerstag 20. August 2020, 07:55

Code: Alles auswählen

import pathlib
import time

PATH = pathlib.Path(r'C:\Users\xxx\Desktop\Microsoft Office Excel-Arbeitsblatt (neu).xlsx')


while True:
    try:
        PATH.unlink()
        print(f"Die Datei {PATH.name} wurde gelöscht!")
        break
    except PermissionError:
        print(f"Datei {PATH.name} konnte nicht gelöscht werden.")
        time.sleep(5)
Dankeschön!
Yes! So funktionierts:

Code: Alles auswählen

while f in os.listdir(pdf_dir):
                try:              
                    print getActualTime()+" REMOVING "+f+" FROM INPUT FOLDER!"
                    os.remove(os.path.join(pdf_dir,f))
                except Exception as e:
                 	print e
                   	time.sleep(5)
sparrow hat geschrieben: Donnerstag 20. August 2020, 07:54 Wechsel auf Python 3.x. Wirklich. Wenn die Bibliotheken das nicht können, dann brauchst du andere Bibliotheken. Die musst du halt suchen.

Warum das mit der while-Schleife nicht funktionieren soll, verstehe ich nicht.

Pseudocode:

Code: Alles auswählen

solange die_datei existiert:
    versuche:
        lösche die_datei
    fehlschlag:
        warte 5 Sekunden
Ich benutze für diesen Fall 2.7 wegen der win32print win32api Bibliotheken.
Es geht mir ums drucken. Das skript druckt pdf-Dateien sobald sie in einen Hotfolder fallen auf dem gewünschten Drucker der lokal installiert ist.
Wenn du eine Bibliothek (Modul) kennst welches das kann, bin ich sofort dabei mit python3.8 ;)
Vielen Dank euch allen!

Re: Datei entfernen sobald möglich.

Verfasst: Donnerstag 20. August 2020, 08:24
von sparrow
win32print ist doch Teil von pywin32. Und das ist ganz normal für Python 3.8 verfügbar.

Re: Datei entfernen sobald möglich.

Verfasst: Donnerstag 20. August 2020, 08:51
von Jankie
Wenn du dann umgesteigen bist solltest du auch nicht mehr os.remove() und os.listdir() verwenden. Stattdessen besser das pathlib Modul mit path.unlink() und path.glob()

Re: Datei entfernen sobald möglich.

Verfasst: Donnerstag 20. August 2020, 09:20
von Sirius3
Ob eine Datei existiert, prüft man nicht mit ›in os.listdir‹ sondern per ›isfile‹. gewöhn Dir gleich sprechende Variablennamen an, f sollte wohl filename heißen, und die tatsächliche Zeit bekommst Du bei einem Computer nicht, da gibt es höchstens die aktuelle Zeit, die man nach Namenskonvention (Funktionsnamen schreibt man wie Variablennamen komplett klein) get_current_time schreiben würde.

Re: Datei entfernen sobald möglich.

Verfasst: Donnerstag 20. August 2020, 12:18
von benpython
sparrow hat geschrieben: Donnerstag 20. August 2020, 08:24 win32print ist doch Teil von pywin32. Und das ist ganz normal für Python 3.8 verfügbar.
Unter 3.8 und höher habe ich es noch nie installiert bekommen. Versucht hab ich es immer mit pip auf macOS catalina und windows 10 und bekomme dann eine Meldung wie:
ERROR: Could not find a version that satisfies the requirement pywin32
ERROR: No matching distribution found for pywin32
Vielen Dank für die Hilfe und Ratschläge! Das pathlib module werde ich mir aufjedenfall anschauen und nochmal versuchen das ganze unter py3.8 zum laufen zu bringen.

Re: Datei entfernen sobald möglich.

Verfasst: Donnerstag 20. August 2020, 12:23
von sparrow
Unter maxOS sollte das auch nicht tun. Das heißt ja pyWIN32, weil es WINdows-Dinge tut. Aber unter Windows kann man das problemlos mit pip installieren und es funktioniert. Kann man auch gut auf deren PyPIi sehen.