在OSX上使用python将文件复制到网络路径或驱动器

Gum*_*bah 6 python macos smb network-programming

我有类似问题的类似问题,但我需要它在OSX上工作.

如何使用Python将文件复制到网络路径或驱动器

所以我想在SMB网络共享上保存文件.可以这样做吗?

谢谢!

Tam*_*más 17

是的,可以做到.首先,通过从Python调用这样的命令将SMB网络共享安装到本地文件系统:

mount -t smbfs //user@server/sharename share
Run Code Online (Sandbox Code Playgroud)

(您可以使用该subprocess模块执行此操作).share是SMB网络共享将安装到的目录的名称,我想它必须是用户可写的.之后,您可以使用复制文件shutil.copyfile.最后,您必须卸载SMB网络共享:

umount share
Run Code Online (Sandbox Code Playgroud)

可能最好在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)
Run Code Online (Sandbox Code Playgroud)

上面的代码片段未经过测试,但它应该可以正常工作(除了我没注意到的语法错误).另请注意,这mountednetwork_share_auth我在其他答案中发布的上下文管理器非常相似,因此您可以通过检查使用platform模块的平台然后调用相应的命令来将两者结合起来.