5

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

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

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

使用 python 2.6(另一个程序需要什么)。

谢谢,

4

2 回答 2

1

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

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

选项 #2 是使用 Python子进程模块来执行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.

于 2013-04-10T12:47:37.110 回答
0

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

于 2013-04-19T12:06:09.910 回答