При запуске скрипта через планировщик заданий возникает ошибка
У меня есть такой скрипт (он упрощён, для удобства):
import pyautogui
if pyautogui.locateOnScreen('1.png'):
print('found')
Он пытается найти на экране картинку 1.png и если находит, то принтит found
Так же, есть батник, умеющий запускать этот скрипт.
@echo off
C:\Python\Python39\python.exe "C:\Python\routineAuto.py" %*
pause
Так вот, при запуске скрипта вручную (не важно, через батник или напрямую) всё работает так как нужно, а при его запуске через планировщик заданий возникает эта ошибка:
Traceback (most recent call last):
File "C:\Python\routineAuto.py", line 9, in <module>
if pyautogui.locateOnScreen('1.png'):
File "C:\Python\Python39\lib\site-packages\pyautogui\__init__.py", line 175, in wrapper
return wrappedFunction(*args, **kwargs)
File "C:\Python\Python39\lib\site-packages\pyautogui\__init__.py", line 213, in locateOnScreen
return pyscreeze.locateOnScreen(*args, **kwargs)
File "C:\Python\Python39\lib\site-packages\pyscreeze\__init__.py", line 372, in locateOnScreen
retVal = locate(image, screenshotIm, **kwargs)
File "C:\Python\Python39\lib\site-packages\pyscreeze\__init__.py", line 352, in locate
points = tuple(locateAll(needleImage, haystackImage, **kwargs))
File "C:\Python\Python39\lib\site-packages\pyscreeze\__init__.py", line 206, in _locateAll_opencv
needleImage = _load_cv2(needleImage, grayscale)
File "C:\Python\Python39\lib\site-packages\pyscreeze\__init__.py", line 169, in _load_cv2
raise IOError("Failed to read %s because file is missing, "
OSError: Failed to read 1.png because file is missing, has improper permissions, or is an unsupported or invalid format
Можно ли сделать так, чтоб в планировщике заданий этот скрипт тоже работал, и, если да, то как?
UPD:
Батник запускается с наивысшими правами
______________________________________
Вот, что касается каталога из которого запущен и батник, и скрипт:
______________________________________
Я попробовал изменить относительный путь картинки на полный. Вот изменённая строчка скрипта:
if pyautogui.locateOnScreen('C:\\Python\\1.png'):
И ничего не поменялось. Как, была ошибка, так и осталась. (ಠ╭╮ಠ)
Вот, вроде добавил больше ясности, надеюсь это поможет решить проблему.
Ответы (1 шт):
Всё заработало, после того как я поменял кодировку python скрипта на ANSI.
Как я до этого допёр:
Сначала, скрипт запускался без ошибок, только почему-то планировщик задач не мог его нормально запустить. Эту ситуацию я и описал в вопросе.
Но потом, после перезапуска компьютера, через какое-то время скрипт запускался с той самой ошибкой, не зависимо от того вручную я его запускаю или через планировщик
Я немного потыкался в блокноте, пытаясь исправить это, и при сохранении скрипта мне вылезло это:
Этот файл содержит текст в формате Юникод, который будет потерян, если вы сохраните этот файл как файл в формате ANSI. Чтобы сохранить данные в формате Юникод нажмите кнопку "Отмена" и выберите один из вариантов сохранения в формате Юникод. Продолжить
Я сделал как там сказано, нажал кнопку Отмена и сохранил файл в utf-8, но ошибка осталась. Но после того, как я поменял кодировку самого текста, а не файла всё заработало так как надо и планировщик задач тоже :')
Ох уж это великое разнообразие кодировок, столько хлопот оно доставило и доставляет по сей день)