繁体   English   中英

从PHP使用pyautogui执行Python脚本

[英]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在用户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中,并将其添加到文件末尾:print(“ Content-Type:text / html \\ n”)print(“ OK”)

访问http://localhost:8000/cgi-bin/test.py将使用正确的变量运行脚本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM