Wie kann ich den Aufruf von robocopy innerhalb eines python-Skript, um bulk-kopieren von mehreren Ordnern?
Ich versuche mehrere große Ordner (> 10 Gb , > 100 sub-Ordner > 2000-Dateien ) zwischen den Netzwerk-Laufwerke. Ich habe versucht mit shutil.copytree Befehl in python, welches einwandfrei funktioniert, außer, dass es nicht zu kopieren, einen kleinen Prozentsatz (< 1 % der Dateien ) aus verschiedenen Gründen.
Ich glaube, robocopy ist die beste option für mich, wie ich eine logfile zu dokumentieren den transfer-Prozess. Allerdings, da muss ich copy > 1000 Ordner manuelle Arbeit ist, steht außer Frage.
Also meine Frage ist im wesentlichen, wie kann ich den Aufruf von robocopy (d.h. die Kommandozeile ) aus einem python-Skript sicherstellen, dass logfile geschrieben wird in eine externe Datei.
Ich arbeite auf einer Windows 7-Umgebung und Linux/Unix ist aus der Frage, aufgrund organisatorischer Einschränkungen. Wenn jemand noch andere Vorschläge für das Massenkopieren so viele Ordner, die mit viel Flexibilität, dass Sie willkommen sind.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Subproccess ermöglicht es Ihnen, system-Aufrufe. Dies ermöglicht Ihnen das aufrufen von robocopy als würden Sie von der Befehlszeile aus.
Verwenden Sie eine der
os.exec
Familie von Funktionen zum starten eines externen Programms:Wahrscheinlich Sie wollen
os.execlp(file, arg0, arg1, ...)
Wie halfs13 sagte verwenden Teilprozess, aber möglicherweise müssen Sie es formatieren, wie so
from subprocess import call
call(["robocopy",'fromdir', 'todir',"/S"])
Sonst kann es Lesen Quelle als alles
Dies brachte mich auf den richtigen Weg, aber ich musste durch Komma getrennte Optionen, z.B.
Dieser funktionierte. Die "/S" kopiert alle Unterordner.
Das obige snippet wird es tun.
Hinweis: Wenn
srcDir
unddestPath
hat ein Leerzeichen, dann diecmd.split()
wird nicht funktionieren. Stattdessen müssen Sie Folgendes tun:Erfahren Sie alles über subprocess hier: https://docs.python.org/3.7/library/subprocess.html