使用PHP

时间:2017-08-21 20:11:54

标签: php python raspberry-pi apache2 pyautogui

您好我正在尝试在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");
?>

我已经被困在这个问题上好几个星期了,一切都是分开的,但是当我把它放在一起时我得到了错误信息,如果有人可以提供帮助我会很感激。感谢。

1 个答案:

答案 0 :(得分:0)

您没有设置DISPLAY变量,因此pyautogui不知道在哪里显示其屏幕。

您可以使用Apache mod_env设置显示变量,并加载PHP加载PyAutoGUI。

还有另一个问题:Apache可能正在用户nobodywww-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将运行带有正确变量的脚本。