【问题标题】:How to Refresh Network Drive Mappings in Python如何在 Python 中刷新网络驱动器映射
【发布时间】:2013-04-10 12:07:13
【问题描述】:

我有一个驱动器已经映射到一个指定的字母“R:\”。如果我在登录或解锁计算机时运行 python 脚本来访问这个空间,它工作正常。当我将任务计划程序设置为一大早在我进来之前运行脚本时,就会出现问题。基本上我保持登录状态并锁定机器,但在某些时候它看起来我的网络驱动器映射超时(但是当我解锁时重新连接早上的机器),这就是脚本无法找到它们的原因。

尝试执行 os.path.exists() 以检查此驱动器上的文件夹并在它们不存在时创建它们时出现错误。从 'try/except' 循环中,我得到异常“系统找不到指定的路径:'R:\'。

我的问题:有没有办法通过 python 强制刷新?我看过其他关于映射网络驱动器的帖子......但不确定这是否适用于我的情况,因为我已经映射了驱动器。它使用的字母需要保持不变,因为不同的应用程序对它有绝对引用。想知道映射同一个驱动器是否会导致问题或无法正常工作,但又不想使用脚本临时映射到另一个字母并在完成后取消映射……这似乎是一种低效的方法?

使用 python 2.6(其他程序需要的)。

谢谢,

【问题讨论】:

  • 你确定这是一个 python 问题,而不是你如何设置计划任务的问题吗?假设您使用的是 Windows,您能否确认您已将任务设置为使用您的凭据并“以最高权限运行”?

标签: python windows


【解决方案1】:

最好的解决方案是通过它的 UNC 路径名来引用“驱动器”,即\\hostname\sharename 形式的路径,但不幸的是,Python 的基本库对处理 UNC 路径的支持很差。

选项 #1 是找到一个可以安装的 Python 扩展模块,以获得对 UNC 路径的更好支持。尝试在谷歌上搜索“python unc”。

选项 #2 是使用 Python subprocess 模块执行 net use 命令,并解析结果输出。例如在 DOS 提示符下,运行 net use 将输出类似这样的内容...

Status       Local     Remote                    Network
-------------------------------------------------------------------------------
OK           R:        \\hostname\sharename      Microsoft Windows Network

...您可以使用它来判断驱动器是否已经映射,如果没有,您可以执行net use R: \\hostname\sharename 来映射它。如果映射“超时”,调用net use 可能实际上足以“刷新”映射,但我不确定。

选项 #3 将研究使用 Python ctypes 模块直接调用底层 Windows 库以模拟调用 net use 的功能。

【讨论】:

    【解决方案2】:

    我对这个问题的解决方案是只使用引用机器的 IP 地址。像魅力一样工作,映射驱动器没有问题...感谢您的回复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多