Почему мой сценарий Python не работает, когда я запускаю его из SQL агента сервера? - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть скрипт 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?

1 Ответ

0 голосов
/ 05 апреля 2020

Это не ответ, но я собираюсь опубликовать то, что я сделал сейчас. Это было для клиента в срок, поэтому я просто что-то ударил. Через несколько недель я опубликую более углубленный анализ.

Первое, что мне нужно, - это иметь абсолютный путь к model.joblib. Это мое плохо. Я обычно работаю в лаборатории Jupyter и забыл, что это было необходимо.

Однако это не полностью решило проблему. Работа выполнялась, но было похоже, что она пропускала выполнение сценария, что было странно. Окончательное решение состояло в том, чтобы использовать задачу «Выполнение процесса» в SSIS для запуска сценария, а затем изменить задание агента с CmdExe c на пакет SSIS, и это заставило все работать правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...