Question

J'ai une question similaire comme celle posée ici mais je besoin de travailler sur OSX.

Comment copier des fichiers sur chemin réseau ou un lecteur en utilisant Python

Alors je veux enregistrer un fichier sur un partage réseau SMB. Cela peut-il être fait?

Merci!

Était-ce utile?

La solution

Oui, il peut être fait. Tout d'abord, montez votre partage réseau SMB au système de fichiers local en appelant une commande comme celle de Python:

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

(Vous pouvez le faire en utilisant le module de subprocess). share est le nom du répertoire dans lequel le partage réseau SMB sera monté, et je suppose qu'il doit être accessible en écriture par l'utilisateur. Après cela, vous pouvez copier le fichier en utilisant shutil.copyfile. Enfin, vous devez non monter le partage réseau SMB:

umount share

C'est probablement le meilleur pour créer un gestionnaire de contexte en Python qui prend en charge le montage et le démontage:

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)

L'extrait de code ci-dessus n'est pas testé, mais il devrait fonctionner en général (en dehors des erreurs de syntaxe que je n'ai pas remarqué). Notez également que mounted est très similaire au gestionnaire de contexte network_share_auth j'ai posté dans mon autre réponse, vous pourriez aussi bien combiner les deux en vérifiant ce que la plate-forme que vous êtes sur l'utilisation du module platform puis appeler les commandes appropriées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top