【问题标题】:tempfile.NamedTemporaryFile crashing in Task Schedulertempfile.NamedTemporaryFile 在任务计划程序中崩溃
【发布时间】:2023-03-29 08:35:01
【问题描述】:

我有一个 Python 脚本,它从 SFTP 站点下载一个 txt 文件,更改标题,写入一个新的文本文件,然后将其转换为 CSV。该脚本在 IDLE 中完美运行。我正在尝试将其设置为 Windows 任务计划程序中的日常任务,但由于以下错误而失败:IOError: [Errno 17] No usable temporary file name found

这是代码的相关部分。 headerChangeDict 在本节上方定义。错误来自这里的第一行:

with tempfile.NamedTemporaryFile(dir='.', delete=False) as tmp,\
    open(spaces_txt_local_filepath, 'rb') as f:
    r = csv.reader(f, delimiter = '\t')
    w = csv.writer(tmp, delimiter = '\t', quoting=csv.QUOTE_NONNUMERIC)
    header = next(r)
    for h in header:
        newHeader = re.sub("\s+", "_", h.strip())

        for headerChangeStr in headerChangeDict.keys():
            if newHeader == headerChangeStr:
                newHeader = headerChangeStr.replace(headerChangeStr,headerChangeDict[headerChangeStr])

        newHeaderList.append(newHeader)

    w.writerow(newHeaderList)

    for row in r:
        w.writerow(row)

os.rename(tmp.name, new_text_filepath)

【问题讨论】:

  • 它可能与用于运行计划任务的凭据有关。看到这个answer 到我很久以前写的关于这个主题的一个相关问题。
  • 好的。 Python 没有安装在系统级别,只安装在我的用户帐户上。
  • 您是在设置环境变量 TMP 还是 TEMP。我认为tempfile 使用它们。它们必须可由运行计划任务的有效用户写入
  • 是的,它们都在 user\AppData\local\Temp 下
  • 我尝试确保 Temp 目录不是只读的,并且我的用户配置文件具有完全权限,但没有帮助。我以前在使用任务调度程序时遇到过这种问题。有没有好的免费替代品?

标签: python windows


【解决方案1】:

啊,我明白了。我需要更改 dir='.'到此脚本正在写入文本和 csv 文件的指定临时路径。

【讨论】:

  • 确保它与new_text_filepath 在同一个卷上。我们不能做跨卷rename
  • 是同一卷。现在我需要弄清楚当我检查“运行用户是否登录”时如何让任务调度程序工作
  • 在没有预先存在的交互式登录的情况下运行在服务会话中使用用户服务 (S4U) 批量登录,因此该任务将无法访问缓存的网络登录凭据和映射的驱动器,并且它将无法与用户交互或显示界面。
  • 如何设置?
  • 我尝试以管理员身份运行任务计划程序并重新创建任务无济于事。我尝试将用户更改为 SYSTEM,但没有成功。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
  • 2020-07-25
  • 2011-05-29
  • 1970-01-01
相关资源
最近更新 更多