python - 当我从 SQL Server 代理运行 Python 脚本时,为什么它会失败?
问题描述
我有一个 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?
解决方案
从 SQL SERVER 调用时,您需要将 sys.exit(0) 作为最后一件事。我遇到过很多次脚本执行良好但从 SQL Server 代理失败的情况。
我的工作一直是将 XYZ 包装在一个函数中。在下面,您将得到除以零,以显示 sql server 会给您错误消息。如果您有意删除该错误,您将看到 SQL Server 成功。
import sys
def test():
try:
x = 1/0
if 1 > 0:
return
except BaseException as e:
print(e)
sys.exit(1)
test()
sys.exit(0)
继续检查它应该适用于您的:
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
)
推荐阅读
- ios - 使用 safeAreaLayoutGuide 时 IQKeyboardManager 不起作用
- java - 我的测试中奇怪的空指针异常通过了一个但没有通过其他
- mysql - 如何从另一个表中填充单元格值?
- salesforce - 显示从控制器方法返回的值
- python - 如何知道pdf页面中剩余的空间?
- javascript - 如何使用 post 方法将数据发送到 ajax
- javascript - Python with Selenium:点击拦截并找到不同的跨度类
- node.js - NSIS 构建不会在 Windows 上安装 Electron 应用程序。安装程序静默退出并产生 1620 错误
- c - 如何计算仅以特定单词为后缀且仅作为后缀的单词数量?
- bash - 使用进程替换时无法加载此类文件