2013-04-10 112 views
3

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

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

我的问题:有没有办法强制通过python进行刷新?关于映射网络驱动器...但不知道这是否适用于我的情况,因为我已经映射了驱动器,它使用的字母需要保持不变,因为不同的应用程序有绝对引用它。问题或不工作,也不想临时映射到一个脚本和取消映射完成后的另一封信......似乎是一种低效的方式做到这一点?

使用Python 2.6(什么其他程序需要)。

谢谢,

+0

你确定这是一个python问题,而不是你如何设置计划任务的问题?假设您正在使用Windows,您是否可以确认您已将任务设置为使用您的凭据并“以最高权限运行”? – Brad 2013-04-10 12:42:22

回答

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

0

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

相关问题