【问题标题】:Cannot execute python script from php无法从php执行python脚本
【发布时间】:2014-06-27 21:38:05
【问题描述】:

我在树莓派上。所有文件的权限,包括 python 脚本,如下所示:

#!/usr/bin/python
from time import sleep
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
GPIO.output(11, False)
sleep(0.4)
GPIO.output(11, True)
sleep(1.6)
GPIO.output(11, False)
sleep(1)

全部归 www-data 所有,所有文件都设置为 777(是的,我知道这不聪明,但我正在尝试解决这个问题。) 它使用 sudo 运行,我的 visudo 文件在这里:

www-data ALL=(ALL) NOPASSWD: /var/www/gateopener.py /usr/bin/python /bin/chmod

这里是 PHP...

<?php
if (($_POST["safe2"]) != "good") {
    header("Location: http://xx.xxx.xx.xxx/index.html");
}
ignore_user_abort(true);
set_time_limit(0);
`/usr/bin/sudo /var/www/gateopener.py`;
?>

现在有人告诉我为什么这不起作用?我尝试了它的不同变体(EI 移动文件,使用不同的权限。)。我也尝试过使用 php 的 exec() 函数...请帮帮我。

【问题讨论】:

  • 你怎么知道它不起作用?为什么不在 python 文件的顶部打印或创建一个文件...看看它是否被调用...
  • 你试过了吗? *.com/questions/4168179/…
  • 你让python文件可执行了吗?
  • @JoranBeasley 因为我正在使用 GPIO,而且我已经使用了一个多小时......我已经尝试了很多东西/
  • 是的,python 文件是一个可执行文件,我可以从命令行调用它。 @EL3PHANTEN

标签: php python


【解决方案1】:

run_me_as_daemon.py

#!/usr/bin/python
from time import sleep
import RPi.GPIO as GPIO
import os
while True:
   if not os.path.exists("open_gate.txt"):continue
   os.remove("open_gate.txt")   # FILE DELETE !!! so we dont re-enter
   with open("log.txt","w") as f:
     print >>f,"Opening GATE @ %s"%(time.strftime("%x %X"),)
     GPIO.setmode(GPIO.BOARD)
     print >>f, "Set Mode To %s"%(GPIO.BOARD,)
     GPIO.setup(11, GPIO.OUT)
     print >>f, "SET 11 to %s"%(GPIO.OUT) 
     GPIO.output(11, False)
     print >> f,"output low signal 11"
     sleep(0.4)
     GPIO.output(11, True)
     print >> f,"output high signal to 11"
     sleep(1.6)
     GPIO.output(11, False)
     print >> f,"output low signal 11"
     sleep(1)
     print >> f,"Competed TASK"

index.php

<?php
if (($_POST["safe2"]) != "good") {
    header("Location: http://xx.xxx.xx.xxx/index.html");
}
file_put_contents("open_gate.txt"," ");
?>

是一种可能的解决方案

【讨论】:

  • 好吧。但是脚本运行后不应该删除文件吗?
  • 它一遇到它就会删除它......但如果用户刷新了php页面,将它移动到最后可能是明智的
  • 我将如何将它作为守护进程启动?非常感谢你,我迫不及待想试试这个,看看它是否有效! :) @JoranBeasley
  • 我刚试过这个......它没有用。也许我做错了什么我不知道。
  • 它应该可以工作...输出 log.txt 文件出现了吗? open_gate.txt 是否出现...您可能希望在两个脚本中使用 open_gate.txt 的绝对路径,以防它们在不同的目录中查找...将其作为守护进程运行只需从启动脚本中调用它即可运行后台或手动调用它# python my_script.py 并观看它运行...
最近更新 更多