【问题标题】:Executing Python script with pyautogui from PHP从 PHP 使用 pyautogui 执行 Python 脚本
【发布时间】:2018-01-29 23:38:07
【问题描述】:

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

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

【问题讨论】:

    标签: php python raspberry-pi apache2 pyautogui


    【解决方案1】:

    你没有设置 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("内容类型:文本/html\n") 打印(“确定”)

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

    【讨论】:

    • 您好,非常感谢您的回复,但我不明白我应该怎么做才能解决它。
    猜你喜欢
    • 2015-10-26
    • 1970-01-01
    • 2019-09-23
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多