我有一个Python脚本,当我在IDE中运行它时,它可以正常工作。如果从命令行执行,则必须位于其所在的目录中才能正常运行。如果我尝试将其作为代理作业或在SSIS中与“执行流程任务”一起运行,它将失败。
代理程序作业中的脚本看起来像这样:
py E:\Opt\AppDirectory\foo.py
SET EXITCODE = %ERRORLEVEL%
IF %EXITCODE% EQ 0 (
REM Script Ran Sucessfully
EXIT 0
)
IF %EXITCODE% EQ 1 (
REM Script Error
EXIT 1
)
当我运行它或在SSIS中运行时,我得到:
Traceback (most recent call last):
File "E:\Opt\AppDirectory\foo.py", line 76, in <module>
encoder = jl.load('model.joblib')
File "C:\ProgramData\Anaconda3\lib\site-packages\joblib\numpy_pickle.py", line
590, in load
with open(filename, 'rb') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'model.joblib'
model.joblib与foo.py存放在完全相同的目录中。当它说找不到文件时真的很奇怪,但是我正盯着它。
该工作可以找到foo.py。为什么似乎找不到model.joblib?
这不是答案,但我将发布我目前所做的事情。这是为最后期限的客户准备的,所以我只是拍了一些东西。我将在几周后发布更多的深度分析。
[第一件事是我需要有一个指向model.joblib的绝对路径。那是我的坏事。我通常在Jupyter Lab工作,却忘了那是必要的。
但是,这不能完全解决问题。作业运行了,但是就像跳过了执行奇怪的脚本一样。最终的解决方案是在SSIS中使用“执行流程任务”来运行脚本,然后将代理作业从CmdExec更改为SSIS包,然后一切正常。