繁体   English   中英

PHP执行python脚本

[英]PHP execute python script

我想通过位于"/var/www/html"的网站(index.php)打开和关闭LED,这两个脚本位于"/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

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解释器下运行,因此上述操作可能需要在独立脚本中完成。

我前一段时间也遇到过同样的问题。

对于这种情况,您需要考虑脚本与执行文件的相对位置。 目前,您以斜杠开头,因此它将从根目录的绝对路径中查找。 如果删除它,它将看起来相对并且应该可以工作。

另外,我发现执行python时必须包括整个路径。 例如

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

如果仍然无法解决问题,请尝试更改目录,然后执行文件:

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

暂无
暂无

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

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