Почему pyautogui не работает на VPS?

На VPS установлен скрипт который использует модуль pyautogui
При использовании функции pyautogui.locateCenterOnScreen выдаёт ошибку:
a = pyautogui.locateCenterOnScreen(iname, confidence =.7)
  File "C:\Python27\lib\site-packages\pyscreeze\__init__.py", line 295, in locateCenterOnScreen    
coords = locateOnScreen(image, **kwargs)
  File "C:\Python27\lib\site-packages\pyscreeze\__init__.py", line 265, in locateOnScreen
    screenshotIm = screenshot(region=None) # the locateAll() function must handle cropping to return accurate coordinates, so don't pass a region here.
  File "C:\Python27\lib\site-packages\pyscreeze\__init__.py", line 313, in _screenshot_win32
    im = ImageGrab.grab()
  File "C:\Python27\lib\site-packages\PIL\ImageGrab.py", line 41, in grab
    size, data = grabber()
IOError: screen grab failed

Если смотрю через RDP то никаких проблем. Как только закрываю RDP опять эта ошибка

Даже этот код не работает:
im1 = pyautogui.screenshot()
im1.save('my_screenshot.png')
  • Вопрос задан
  • 1457 просмотров
Пригласить эксперта
Ответы на вопрос 2
NeiroNx
@NeiroNx
Программист
Потому что когда закрывается сеанс RDP - винда прекращает обработку экрана - тоесть неоткуда сделать скриншот.
Вам нужно придумать другое решение для вашей задачи или обрабатывать отключения от RDP.

Предлагаю попробовать https://pywinauto.github.io/ который работает через опрос контролов в WinAPI - возможно он более подходит для задачи.
Ответ написан
vasily-v-ryabov
@vasily-v-ryabov
Python, UI Automation, pywinauto
Может вот это поможет: Remote Execution Guide из доков по pywinauto, но многие вещи универсальны для всех видов GUI automation. Если вкратце:

1. Можно настроить винду так, чтобы при отключении RDP активный рабочий стол сохранялся.
2. Можно перейти на VNC server.
3. Нельзя из-под сервиса скедулить GUI related задачи. Есть пример для Ansible и psexec, а также для встроенного Windows Scheduler.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы