os.makedirs在IDLE中运行时工作,在计划任务中失败

时间:2014-09-24 19:05:31

标签: python scheduled-tasks

我有一个在IDLE中运行时可以运行的ArcPy脚本,但在作为计划任务运行时会失败。这是问题部分:

outPath = os.path.abspath(r"X:\GroupDirs\0731\GIS_CORE\PUPS")
log.write("Output path: {}\n".format(outPath))
try:
    outDir = os.path.join(outPath, "utiliquest{}".format(date))
    if not os.path.exists(outDir):
        os.makedirs(outDir)
    log.write("Created scratch and output")
except:
    fail_log(log)

当我在IDLE中运行它时,它正确输出,生成目录,并继续执行。

Output path: X:\GroupDirs\0731\GIS_CORE\PUPS
Created scratch and output

当它作为计划任务运行时,日志文件具有正确的目录,但os.makedirs(outDir)命令无法执行:

Output path: X:\GroupDirs\0731\GIS_CORE\PUPS

     Failed at 09/24/14 14:41:45
PYTHON ERRORS:
Traceback info:
  File "C:\Batch Processes\IRTHnet\Batch_CopyData.py", line 64, in <module>
    os.makedirs(outDir)

Error Info:
[Error 3] The system cannot find the path specified: 'X:\\'

每次都在同一台机器上运行,因此X驱动器指向相同的位置。

为什么这会导致失败,以及我可以做些什么来修复/规避?

1 个答案:

答案 0 :(得分:0)

  

每次都在同一台机器上运行,因此X驱动器指向相同的位置。

这不遵循。驱动器映射是每个会话。如果您已设置Window以在登录时恢复驱动器映射(这是大多数人所做的,因为至少在XP到7中,在Explorer中的“Map Drive”对话框中有一个“登录时重新连接”的复选框),然后除非您以同一用户身份登录,否则X驱动器不会指向同一位置。

可以设置系统范围的驱动器映射,这些映射将在启动时重新连接而不是登录,但这不是微不足道的(在不同的Windows版本上可能会有所不同),并且它也会导致你真的不想处理的一系列权限问题。

请参阅MSDN上的Services and Redirected Drives,这不是直接您在此处尝试做什么,但确实很好地解释了这些问题,并链接到许多其他有用的文档。

另一种解决方案是使用UNC路径,例如r'\\Server\share\GroupDirs\0731\GIS_CORE\PUPS'。这不是始终适当的(例如,您可能希望在不同的计算机上将不同的共享安装到X:,并让您的脚本始终使用挂载到X:的任何一个,但是当它是,它通常是最简单的。