如何在Python中刷新网络驱动器映射

时间:2013-04-10 12:07:13

标签: python windows

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

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

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

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

谢谢,

2 个答案:

答案 0 :(得分:1)

最好的解决方案是通过其UNC路径名引用'drive',即\\hostname\sharename形式的路径,但遗憾的是,Python的基本库对处理UNC路径的支持非常差。 / p>

选项#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的功能。

答案 1 :(得分:0)

我对此问题的解决方案是仅使用引用计算机的IP地址。工作就像一个魅力,没有映射驱动器的问题...感谢您的回应。