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

这篇博客介绍了如何使用Python在Windows环境下映射网络驱动器,并通过`shutil.copyfile`复制文件到该驱动器。首先使用`os.system`调用`NET USE`命令映射网络驱动器,然后在确保驱动器可用的情况下复制文件,最后通过`NET USE`删除映射。为了确保卸载操作始终执行,文章还展示了使用Python的`contextlib.contextmanager`来创建一个上下文管理器`network_share_auth`,在进入和退出上下文时分别执行映射和卸载操作。
摘要由CSDN通过智能技术生成

我尝试使用os.system调用NET USE命令,将共享映射到未使用的驱动器号(假设您在Windows上):os.system(r"NET USE P: \\ComputerName\ShareName %s /USER:%s\%s" % (password, domain_name, user_name))

将共享映射到驱动器号后,可以使用shutil.copyfile将文件复制到给定的驱动器。最后,您应该卸载共享:os.system(r"NET USE P: /DELETE")

当然,这只适用于Windows,您必须确保驱动器号p可用。您可以检查NET USE命令的返回代码,看看挂载是否成功;如果失败,您可以尝试其他驱动器号,直到成功。

由于这两个NET USE命令是成对的,第二个命令应该在执行第一个命令时执行(即使在这两个命令之间的某个地方引发了异常),如果您使用的是Python 2.5或更高版本,您可以将这两个调用包装在上下文管理器中:from contextlib import contextmanager

@contextmanager

def network_share_auth(share, username=None, password=None, drive_letter='P'):

"""Context manager that mounts the given share using the given

username and password to the given drive letter when entering

the context and unmounts it when exiting."""

cmd_parts = ["NET USE %s: %s" % (drive_letter, share)]

if password:

cmd_parts.append(password)

if username:

cmd_parts.append("/USER:%s" % username)

os.system(" ".join(cmd_parts))

try:

yield

finally:

os.system("NET USE %s: /DELETE" % drive_letter)

with network_share_auth(r"\\ComputerName\ShareName", username, password):

shutil.copyfile("foo.txt", r"P:\foo.txt")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值