[英]pyautogui error with DISPLAY, when python script is called from php
[英]Executing Python script with pyautogui from PHP
您好,我正在尝试在Raspberry Pi上运行的apache2服务器上从PHP用pyautogui库执行Python脚本。 从命令行执行Python脚本时,我没有遇到任何问题,但是通过PHP的“ shell_exec”执行此操作时,出现以下错误消息:
apache2中的error.log:
追溯(最近一次通话最近):导入pyautogui中的文件“ /home/pi/Projects/Python/wakeUp.py”,第2行,文件“ /usr/local/lib/python3.4/dist-packages/pyautogui/ init” .py”,第115行,来自。 导入_pyautogui_x11作为platformModule文件“ /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中从None引发KeyError (key): 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");
?>
我已经在这个问题上停留了几个星期,一切都可以单独工作,但是放在一起时,我会收到错误消息,如果有人可以帮助我将不胜感激。 谢谢。
您未设置DISPLAY变量,因此pyautogui不知道在何处显示其屏幕。
您可以使用Apache mod_env设置显示变量,然后它们将PHP加载为PyAutoGUI。
还有另一个问题:可能Apache在用户nobody
或www-data
下运行。 您的用户通常是其他用户。 由Apache启动的任何进程均无权访问您的显示。
您可以从解决方案中删除Apache和PHP,并使用纯python insted:
export DISPLAY=:0
mkdir cgi-bin
python3 -m http.server --bind localhost --cgi 8000
将您的test.py
放入cgi-bin中,并将其添加到文件末尾:print(“ Content-Type:text / html \\ n”)print(“ OK”)
访问http://localhost:8000/cgi-bin/test.py
将使用正确的变量运行脚本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.