[英]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.