从PHP运行Python脚本
我正在尝试使用以下命令从PHP运行Python脚本:
exec('/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2');
但是,PHP根本不会产生任何输出。错误报告设置为E_ALL
,并且display_errors
打开。
这是我尝试过的:
- 我使用
python2,/usr/bin/python2
而python2.7
不是/usr/bin/python2.7
- 我还使用了相对路径而不是绝对路径,该绝对路径也没有任何改变。
- 我试着使用的命令
exec,shell_exec,system
。
但是,如果我跑步
if (exec('echo TEST') == 'TEST'){
echo 'exec works!';
}
它shutdown now什么都没做,但工作得很好。
PHP有权访问和执行文件。
编辑:感谢亚历杭德罗,我能够解决此问题。如果你遇到相同的问题,请不要忘记你的网络服务器可能/希望不是以root用户身份运行。尝试以你的Web服务器用户或具有类似权限的用户身份登录,然后尝试自己运行命令。
回答:
在Ubuntu Server 10.04上测试。希望它对Arch Linux也有帮助。
在PHP中使用shell_exec
函数:
通过shell执行命令并以字符串形式返回完整的输出。
它从执行的命令返回输出,如果发生错误或命令不产生任何输出,则返回NULL。
<?php $command = escapeshellcmd('/usr/custom/test.py');
$output = shell_exec($command);
echo $output;
?>
在Python文件中test.py
,在第一行中验证以下文本:(请参见shebang解释):
!/usr/bin/env python
另外,Python文件必须具有正确的特权(如果PHP脚本在浏览器或curl中运行,则对用户www-data / apache
的执行)和/或必须是“可执行的”。此外,所有进入.py文件的命令都必须具有正确的特权:
采取从PHP手册:
对于那些试图在unix
类型的平台上使用shell_exec
并且似乎无法使其正常工作的人,请快速提醒一下。PHP以系统上的Web用户身份执行(对于Apache
,通常为www),因此你需要确保Web用户对你在shell_exec
命令中尝试使用的任何文件或目录具有权限。否则,它似乎不会做任何事情。
为了使在UNIX型平台上的可执行文件:
chmod +x myscript.py
以上是 从PHP运行Python脚本 的全部内容, 来源链接: utcz.com/qa/404391.html