PHP执行python脚本

时间:2017-10-30 22:32:37

标签: php apache python-3.x

我想通过网站(index.php)打开和关闭LED,该网站位于"/var/www/html",两个脚本位于"/var/www/html/wspace/Server/"。当我用ssh执行它们时,两个脚本都工作得很好,但是我无法通过我的php文件执行它们。

在我的index.php中,我为on- / off.py编写了以下代码:

exec("/usr/bin/python3.5 /wspace/Server/on.py");

(我找到了which python3.5的python安装。答案是/usr/bin/python3.5。)

我不知道出了什么问题。是他自己命令还是我必须改变某事。在阿帕奇?有什么必须改变它的作用?

作为进一步信息,文件的所有者和权限:

index.php pi:pi 777
on.py pi:pi 777
off.py pi:pi 777

2 个答案:

答案 0 :(得分:1)

apache用户可能是" www-data"希望没有sudo访问权限。 exec中的多个单词也可能很奇怪,我不知道。 exec()可能甚至没有执行bash所以像"&&"不会工作。

#!/usr/bin/python3

作为python脚本的第一行和

$chmod +x on.py

然后

exec("/var/www/html/wspace/Server/on.py")

在这里使用相对路径并不是一个好主意,因为你不知道工作目录是什么,尽管我确定可以指定。

如果这仍然不起作用,那么环境变量可能是罪魁祸首,并且你会看到未知环境中的某些内容:python3"。我在这里引用记忆,所以我可能会离开。如果是这种情况,您将不得不调用导出PATH的bash脚本。您可以登录到该框并以常规用户回显$ PATH,对于这种情况不重要,然后bash脚本将是:

#!/bin/bash
export PATH=$PATH:<the stuff from 'echo $PATH'>
/var/www/html/wspace/Server/on.py

别忘了打开这个脚本的可执行位,chmod + x

最后,你的PHP会调用上面的bash脚本:

exec("<full path to bash script>")

重要的是要意识到,在所有可能的情况下,传递给exec的参数将不会在bash解释器下运行,因此上述内容可能需要在独立脚本中完成。

答案 1 :(得分:0)

我有一段时间没有同样的问题。

对于这种情况,您需要考虑脚本与执行文件的相关性。目前,您正在使用斜杠,因此它将从根目录的绝对路径开始查看。如果你删除它然后它看起来相对应该工作。

另外,我发现在执行python时我必须包含整个路径。 E.g

exec('/usr/local/bin/python3 wspace/Server/on.py')

如果仍然无效,请尝试更改目录,然后执行文件:

exec('cd wspace/Server && /usr/local/bin/python3 on.py')