Выполнение скрипта Python с pyautogui из переполнения стека

Здравствуйте, я пытаюсь выполнить скрипт Python с библиотекой pyautogui из PHP на сервере apache2, работающем на Raspberry Pi. При выполнении скрипта Python из командной строки у меня не возникает проблем, но при этом через PHP «shell_exec» я получаю следующее сообщение об ошибке:

error.log в apache2:

Traceback (последний вызов был последним): файл
«/home/pi/Projects/Python/wakeUp.py», строка 2, в файле импорта pyautogui
«/usr/local/lib/python3.4/dist-packages/pyautogui/в этом.py «, линия
115, в с. импортировать _pyautogui_x11 как файл платформы
«/Usr/local/lib/python3.4/dist-packages/pyautogui/_pyautogui_x11.py»,
строка 160 в файле _display = Display (os.environ [‘DISPLAY’])
«/usr/lib/python3.4/os.py», строка 633, в GetItem повышение
KeyError (ключ) от None KeyError: ‘DISPLAY’

Скрипт Python (test.py):

#!/usr/bin/python3
import pyautogui
pyautogui.moveTo(25, 25, duration=1)
pyautogui.click()

PHP-скрипт (index.php):

<?php
shell_exec("python3 /home/pi/Projects/Python/test.py");
?>

Я застрял в этом вопросе уже несколько недель, все работает по отдельности, но, собрав все вместе, я получаю сообщение об ошибке, если кто-то может помочь, я был бы очень признателен. Благодарю.

1

Решение

Вы не устанавливаете переменную DISPLAY, поэтому pyautogui не знает, где отобразить его экран.

Вы можете использовать Apache mod_env, чтобы установить переменную отображения, и они загрузят PHP, загружающий PyAutoGUI.

И есть еще одна загвоздка: вероятно, Apache работает под пользователем nobody, или же www-data, Ваш пользователь обычно это что-то еще. Любой процесс, запущенный Apache, не будет иметь доступа к вашему дисплею.

Вы можете удалить Apache и PHP из решения и использовать чистый python:

export DISPLAY=:0
mkdir cgi-bin
python3 -m http.server --bind localhost --cgi 8000

Положить ваши test.py внутри cgi-bin, и добавьте это в конец файла:
печать («Тип контента: текст / html \ n»)
печать ( «OK»)

Доступ к http://localhost:8000/cgi-bin/test.py запустит скрипт с правильными переменными.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]