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

Posted

技术标签:

【中文标题】在 OSX 上使用 python 将文件复制到网络路径或驱动器【英文标题】:Copy files to network path or drive using python on OSX 【发布时间】:2011-03-06 15:58:20 【问题描述】:

我有一个与此处提出的类似的问题,但我需要它才能在 OSX 上工作。

How to copy files to network path or drive using Python

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

谢谢!

【问题讨论】:

【参考方案1】:

是的,可以做到。首先,通过从 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)

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

【讨论】:

酷!得到它的工作!感谢您的快速(和详细)回复! (想投票,但没有足够的代表:-|)

以上是关于在 OSX 上使用 python 将文件复制到网络路径或驱动器的主要内容,如果未能解决你的问题,请参考以下文章

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

苹果osx怎么选择复制为啥直接复制到当前目录下了

/opt 在 Windows 和 OSX 上等效

应用程序注册失败,因为文件位于网络共享上。在注册包之前将文件复制到本地计算机

如何将 chrome 书签从单个桌面上的不同用户配置文件复制到另一个网络位置

使用 Cocoa 复制任意文件的推荐方法