2017-01-24 2 views
0

Ich schreibe gerade ein Programm in Python auf einem Windows-Computer, der Selen verwendet, um eine PDF (mit novaPDF) herunterzuladen und dann diese PDF mit einem neuen Namen neu schreibt.Shuttil Python Kopieren von Dateien auf Restricted Shared Drive

Der Download- und endgültige Speicherort dieser PDF-Datei befindet sich jedoch auf einem freigegebenen Netzlaufwerk. Ich habe Zugriff auf die Ordner, die relevant sind, und jeder Benutzer, der dieses Programm verwenden würde, hätte auch Zugriff auf die richtigen Ordner.

Mit diesem gesagt, ich bin in der Lage, die Datei perfekt herunterladen (in das freigegebene Laufwerk), aber wenn ich versuche, shutil.copy(curr, new) ausgeführt, um die heruntergeladene Datei auf den richtigen Namen umbenannt, bekomme ich IOError: [Errno 13] Permission denied. Ich erkannte, dass ich die Datei verschieben oder umbenennen konnte, aber ich bekam ähnliche Probleme, daher kopiere ich gerade und lösche dann das Original (offen, um das zu ändern).

Ich denke, das Problem ist etwas mit Berechtigungen auf dem freigegebenen Laufwerk, aber es ist sehr wohl etwas anderes. Ich werde weiter daran arbeiten, und werde es veröffentlichen, wenn ich eine Lösung bekomme, aber zögern Sie nicht, irgendwelche Nachfragen zu stellen. Hilfe wird immer geschätzt!

Danke!

+1

Ist 'new' in einem anderen Verzeichnis? Dann überprüfe die Rechte dort. Hast du zufälligerweise zufällig "curr" und "new" gleich benannt? – tdelaney

+0

curr und neu sind nicht gleich, weil es manchmal funktioniert. Neu ist ein Verzeichnis tiefer als aktuell. Außerdem habe ich es derzeit laufen, wenn ich den Fehler bekomme, wartet es eine Sekunde und versucht es dann erneut. Das scheint zu funktionieren –

+1

Klingt wie das Ziel existiert und etwas hat es geöffnet. Sie könnten 'os.path.exists' versuchen, zu debuggen. – tdelaney

Antwort

0

Dies beantwortet die Frage nicht in großem Maßstab, aber ich werde einige allgemeine Informationen liefern, die jemandem helfen können, ein ähnliches Projekt zu beenden.

Der Trick schien zu warten, bis os.path.isfile wahr zurückgegeben wurde. Danach warten Sie noch etwas länger. Was ich getan habe, ist, dass ich eine Hilfsfunktion geschrieben habe, die die Methode annimmt und sie dann mit einer bestimmten Anzahl von Wiederholungen aufruft. Dies schien gut zu funktionieren, und es ist im Allgemeinen unglaublich nützlich für Selen, da Seiten manchmal etwas länger laden als erwartet. Hier

ist die Hilfsfunktion:

def helper_function(self, method, *args): 
    ''' 
    This method is a wrapper to allow calls to retry if the original 
    call fails 
    :return: the element if any 
    ''' 

    exception = None 

    for i in xrange(config.number_of_retries): 
     try: 
      element = method(*args) 
      return element 
     except Exception as e: 
      exception = e 
    raise Exception("Number of retries exceeded: " + repr(exception)) 
Verwandte Themen