2017-06-26 3 views
0

Nur ein kurzer Überblick über das, was ich tue: Ich versuche, einige PDF-Zusammenführung Routine mit Python in einem Netzwerkverzeichnis zu automatisieren, die das Kopieren, Löschen und Erstellen von Dateien zu einem bestimmten umfasst Netzwerkstandort. Entschuldigung, wenn meine Sprache nicht sehr präzise ist.Zugriff auf einen Netzwerkordner über ein Python-Programm

Ich bin auf Windows 7 mit Python 3.6 codieren. Das Programm muss auf anderen Rechnern verteilt werden, so dass lokale und temporäre Fixes wahrscheinlich nicht helfen werden. Der Code, den ich geschrieben habe, ist voll funktionsfähig und funktioniert mit allen lokalen Ordnern und Dateien, aber jetzt, da ich ihn im Netzwerk nutzen muss, habe ich Schwierigkeiten, auf den Ordner zuzugreifen, den ich brauche. Hier

ist, was ich habe versucht:

os.system("pushd " + "\\" + "\\netWorkDrive\Reports") 
check_output("pushd " + "\\" + "\\netWorkDrive\Reports", shell=True) 

pushd und popd gut funktionieren, wenn nur in der cmd eingeben, aber wenn ich System tun Anrufe über Python, sie einfach nicht durch gehen. Ich sende einen Systemaufruf, und es läuft korrekt, aber wenn ich dann ein aktuelles Verzeichnis "cd", zeigt es, dass ich immer noch in meinem vorherigen bin. Wenn Sie den Befehl manuell ausführen, funktioniert alles wie gewünscht. Ich habe das Problem gegoogelt, aber habe nicht gefunden, dass etwas funktioniert/nützlich ist. Ich würde mich über Vorschläge sehr freuen und mich wissen lassen, ob ich mein Problem weiter klären muss.

Vielen Dank!

+0

könnte eine Reihe von Dingen sein. Gibt es eine globale Adresse für das Laufwerk? eher als ein lokal abgebildeter "Buchstabe"? (Beispielsweise haben große Firmen-Intranet-Netzwerke eine globale Adresse, die Mitarbeiter oft ihrem eigenen Laufwerk "N:" (oder welchem ​​Buchstaben auch immer) zuordnen. Versuchen Sie, die Gesamtadresse zu verwenden. Versuchen Sie außerdem, auf das Laufwerk über eine Zeichenfolge mit einem vorangestellten "r" zuzugreifen 'als solches: 'r'C:/Users/Vlox/Stuff'' das' r 'steht für eine rohe Zeichenkette, daher werden Schrägstriche richtig gelesen (normalerweise sind sie ein Python-Escape-Zeichen, das das Problem verursachen könnte) Ihre Backslashes ''C: // Benutzer // Vlox // Stuff'' – Vlox

+0

Ich glaube, ich verwende eine globale Adresse, da es ist, was alle anderen auf das Netzwerk zugreifen" \\ unserOrdner \ Berichte ". Von dem, was ich verstehe , 'popd' erzeugt ein temporäres Laufwerk für mich, aber ich bin noch nicht in diesem Stadium. Die Art, wie ich Schrägstriche eingegeben habe, berücksichtigt bereits Escape-Zeichen, da ich eine Zeichenfolge mit einem eigenen Pfadnamen getestet habe gab immer noch einen Versuch zu "r", leider hat das nicht geholfen. –

+0

Der PUSHD funktioniert wahrscheinlich gut. Wenn die erstellte Shell jedoch beendet wird, kehren Sie zu Ihrem vorhandenen Prozess zurück, der vor dem Aufruf von os.system() immer noch über die cwd verfügt. – lit

Antwort

0

würde ich nicht pushd/popd so verwenden, würde ich bin nur die vollständigen Pfade, einschließlich Netzwerkpfade in den Pfaden von welcher Dateioperation I

jedoch tun müssen, wenn ich arbeiten muß wirklich ändern Verzeichnis, würde ich dies mit Python tun:

import os 

original_working_directory = os.getcwd() 

# do stuff 

new_networked_directory = r'\\server\share\folder' 
# change to the networked directory 
os.chdir(new_networked_directory) 

# do stuff 

#changeback to original working directory 
os.chdir(original_working_directory) 

# do more stuff 

Es sollte keine Notwendigkeit für "Temp-Laufwerke" oder dergleichen wirklich sein.

+0

Dies ist, wo ich ursprünglich gestartet habe, und ich wurde durch die Tatsache, dass ich nicht über cmd auf den Server zugreifen kann, aber in der Tat, muss ich nicht einmal zu haben! Vielen Dank! –

Verwandte Themen