Да, это можно сделать. Сначала подключите сетевой ресурс 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
, и затем вызвав соответствующие команды .