Kopieren von Dateien auf Netzwerkpfad oder das Laufwerk mit Python auf OSX
-
29-09-2019 - |
Frage
Ich habe eine ähnliche Frage wie hier gefragt, aber ich muss es Arbeit auf OSX.
Wie Dateien in Netzwerkpfad kopieren oder Python Laufwerk
So will ich auf einer SMB-Netzwerkfreigabe eine Datei speichern. Kann dies geschehen?
Danke!
Lösung
Ja, es kann getan werden. Montieren Sie zuerst Ihre SMB-Netzwerkfreigabe auf das lokale Dateisystem durch einen Befehl wie diese aus Python Aufruf:
mount -t smbfs //user@server/sharename share
(Sie können es tun, um die subprocess
-Modul). share
ist der Name des Verzeichnisses, in dem die SMB-Netzwerkfreigabe montiert werden, und ich denke, es hat durch den Benutzer beschreibbar sein. Danach können Sie die Datei mit shutil.copyfile
kopieren. Schließlich müssen Sie un-mount die SMB-Netzwerkfreigabe:
umount share
Wahrscheinlich ist es die am besten zu einem Kontext-Manager in Python zu erstellen, die dafür sorgt, Montag und Aushänge:
from contextlib import contextmanager
import os
import shutil
import subprocess
@contextmanager
def mounted(remote_dir, local_dir):
local_dir = os.path.abspath(local_dir)
retcode = subprocess.call(["/sbin/mount", "-t", "smbfs", remote_dir, local_dir])
if retcode != 0:
raise OSError("mount operation failed")
try:
yield
finally:
retcode = subprocess.call(["/sbin/umount", local_dir])
if retcode != 0:
raise OSError("umount operation failed")
with mounted(remote_dir, local_dir):
shutil.copy(file_to_be_copied, local_dir)
Der obige Code-Schnipsel nicht getestet, aber es sollte in der Regel arbeiten (abgesehen von Syntaxfehlern, dass ich gar nicht bemerkt). Beachten Sie auch, dass mounted
sehr ähnlich zu dem network_share_auth
Kontext-Manager ich in meiner anderen Antwort geschrieben, so dass Sie auch die beiden durch Prüfen, was Plattform Sie sind das platform
Modul zur Verwendung und dann ruft die entsprechenden Befehle kombinieren könnten.