6

我有一个类似的问题,就像这里问的一样,但我需要它在 OSX 上工作。

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

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

谢谢!

4

1 回答 1

19

是的,这是可以做到的。首先,通过从 Python 调用如下命令将 SMB 网络共享挂载到本地文件系统:

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_authplatform

于 2010-06-22T09:07:34.157 回答