Domanda

Ho una domanda simile come quella che ha chiesto qui, ma ho bisogno di lavorare su OSX.

Come copiare i file al percorso di rete o con Python

Quindi voglio salvare un file in una condivisione di rete SMB. questo può essere fatto?

Grazie!

È stato utile?

Soluzione

Sì, si può fare. In primo luogo, montare il condivisione di rete SMB al file system locale chiamando il comando come questo da Python:

mount -t smbfs //user@server/sharename share

(è possibile farlo utilizzando il modulo subprocess). share è il nome della directory in cui la condivisione di rete SMB verrà montato, e credo che deve essere scrivibile dall'utente. Dopo di che, è possibile copiare il file usando shutil.copyfile. Infine, è necessario un-montare la condivisione di rete SMB:

umount share

Probabilmente è il migliore per creare un gestore di contesto in Python che si occupa di montaggio e smontaggio:

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)

Il frammento di codice di cui sopra non è testato, ma dovrebbe funzionare in generale (a parte gli errori di sintassi che non ho notato). Si noti inoltre che mounted è molto simile al contesto network_share_auth direttore ho pubblicato nella mia altra risposta, quindi si potrebbe anche combinare le due cose controllando quale piattaforma si è in utilizzando il modulo platform e quindi chiamando i comandi appropriati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top