Скопируйте файлы на сетевой путь или диск с помощью python в OSX

StackOverflow https://stackoverflow.com/questions/3090724

Вопрос

У меня есть похожий вопрос, подобный заданному здесь, но он нужен мне для работы на OSX.

Как скопировать файлы на сетевой путь или диск с помощью Python

Итак, я хочу сохранить файл на общем сетевом ресурсе SMB.Можно ли это сделать?

Спасибо!

Это было полезно?

Решение

Да, это можно сделать.Сначала подключите ваш общий сетевой ресурс SMB к локальной файловой системе, вызвав подобную команду из Python:

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

(Вы можете сделать это с помощью subprocess модуль). share это имя каталога, к которому будет подключен общий сетевой ресурс SMB, и я предполагаю, что он должен быть доступен для записи пользователем.После этого вы можете скопировать файл, используя shutil.copyfile.Наконец, вам необходимо отключить общий сетевой ресурс SMB:

umount share

Вероятно, лучше всего создать контекстный менеджер на Python, который позаботится о монтировании и размонтировании:

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)

Приведенный выше фрагмент кода не тестировался, но в целом он должен работать (за исключением синтаксических ошибок, которые я не заметил).Также обратите внимание, что mounted очень похоже на network_share_auth контекстный менеджер, который я опубликовал в своем другом ответе, так что вы могли бы также объединить их, проверив, на какой платформе вы используете platform модуль, а затем вызываем соответствующие команды.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top