通过Windows调度程序执行时的Python ImportError

时间:2016-08-16 16:19:02

标签: python-3.x importerror windows-scheduler

我做了一些关于这个主题的搜索并发现了一些先前的线程,但我不理解它们中的任何一个,因为我仍然是Python的初学者。

我有一个Python脚本,它有一些长字符串变量存储在子目录中的各种.py文件中。我在运行脚本时从该子目录导入.py文件。子目录中有一个__init__.py文件。我使用此设置的唯一原因是我在其他文件中存储的长字符串变量会使代码非常难以读取,因为它们是SQL字符串,并且每个可以跨越50-100行。

当我通过PyCharm运行此脚本时,一切都运行良好。

但是,当我通过Windows Scheduler或批处理文件运行脚本时,我得到子目录中所有.py文件的ImportError。问题肯定与python脚本无关,当它运行Windows Scheduler时,不知道在哪里查找这些.py文件。但我不确定如何解决它。

调度程序任务的操作是运行python exe

D:\Python35\python.exe

将参数作为脚本

D:\python\tableaudatasourcebuilds\dcitechnicalperformance\dcitechnicalperformance0.py

所以完整的动作如下:

D:\Python35\python.exe "D:\python\tableaudatasourcebuilds\dcitechnicalperformance\dcitechnicalperformance0.py"

存储长字符串变量.py文件的子目录是:

D:\python\tableaudatasourcebuilds\dcitechnicalperformance\dcitechnicalperformance0\

导入如下:

from dcitechnicalperformance.dcitechnicalperformance0.dciquer import nzsqldciwk

有谁知道如何解决这个问题?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

下午好,

首先,我不知道在模块上存储长SQL查询有多大意义,我不是专家,而是像 JSON文件(或者地狱,甚至将它们存储在sql内的表中)似乎是一种更好的方法。

关于您的问题我认为它位于启动任务的当前目录中,让我解释一下:

  • 在PyCharm中,当您运行代码时,它会从文件的位置启动,因此,它可以找到包含该模块的目录。
  • 使用计划任务,它可能会在另一个目录中启动,因此,由于目录不存在,它无法找到该模块。

如果您决定坚持自己的责备,那么合理的解决方案就是创建一个浏览项目位置的.bat文件:

@ECHO OFF 
D:
cd D:\python\tableaudatasourcebuilds\dcitechnicalperformance\
D:\Python35\python.exe dcitechnicalperformance0.py

这应该有用。