我有一个类似于这里问的问题,但我需要它来处理OSX。
How to copy files to network path or drive using Python
所以我想在SMB网络共享上保存文件。可以这样做吗?
谢谢!
答案 0 :(得分:15)
是的,可以做到。首先,通过从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_auth
上下文管理器非常相似,因此您可以通过使用platform
模块检查您所使用的平台来组合这两者然后调用适当的命令。