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

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

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

Таким образом, я хочу сохранить файл на сетевом ресурсе SMB. Это может быть сделано?

Спасибо!

6
задан Community 23 May 2017 в 11:53
поделиться

1 ответ

Да, это возможно. Во-первых, смонтируйте общий сетевой ресурс 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)

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

17
ответ дан 8 December 2019 в 13:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: