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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top