您好我正在尝试在Raspberry Pi上运行的apache2服务器上使用PHP中的pyautogui库执行Python脚本。从命令行执行Python脚本时我没有遇到任何问题,但是当通过PHP的“shell_exec”执行此操作时,我收到以下错误消息:
apache2中的error.log:
Traceback(最近一次调用最后一次):文件 “/home/pi/Projects/Python/wakeUp.py”,第2行,导入pyautogui文件 “/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 加注 来自无KeyError的KeyError(key):'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");
?>
我已经被困在这个问题上好几个星期了,一切都是分开的,但是当我把它放在一起时我得到了错误信息,如果有人可以提供帮助我会很感激。感谢。
答案 0 :(得分:0)
您没有设置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中,并在文件末尾添加:
打印(&#34;内容类型:text / html \ n&#34;)
打印(&#34; OK&#34)
访问http://localhost:8000/cgi-bin/test.py
将运行带有正确变量的脚本。