【问题标题】:os.makedirs works when run in IDLE, fails in scheduled taskos.makedirs 在 IDLE 中运行时工作,在计划任务中失败
【发布时间】:2014-11-19 09:33:28
【问题描述】:

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

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 驱动器指向同一个位置。

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

【问题讨论】:

    标签: python scheduled-tasks


    【解决方案1】:

    每次都在同一台机器上运行,所以 X 驱动器指向同一个位置。

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

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

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

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

    【讨论】:

    • 公司政策是X: 驱动器始终是所有用户的X:,但“除非您以同一用户身份登录”是关键——计划任务已设置为在对该驱动器没有权限的用户下运行。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 2021-10-22
    • 1970-01-01
    相关资源
    最近更新 更多