我试图使用以下命令从PHP运行一个Python脚本:
exec('/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2');
但是,PHP不产生任何输出。“错误报告”设置为“全部显示”,并且“显示错误”处于启用状态。
我试过的是:
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拥有访问和执行文件的权限。
编辑:多亏了亚历杭德罗,我才解决了这个问题。如果您有同样的问题,不要忘记您的web服务器可能/希望不会以根用户身份运行。尝试以Web服务器的用户或具有类似权限的用户身份登录,并尝试自己运行命令。
我建议使用
passthru
并直接处理输出缓冲区:在Ubuntu服务器10.04上测试。我希望它也能在Arch Linux上帮助您。
在PHP中use shell_exec function:
在Python文件
test.py
中,验证第一行中的文本:(see shebang explain):还有Python文件must have correct privileges(如果PHP脚本在浏览器或curl中运行,则为用户www data/apache执行) 和/或必须是“可执行的”。此外,
.py
文件中的所有命令都必须具有正确的权限:摄于from php manual:
到make executable a file on unix-type platforms:
如果您想知道命令的返回状态并获得整个
stdout
输出,那么可以实际使用exec
:$out
是所有行的数组。$status
是返回状态。对调试非常有用。如果您还想看到
stderr
输出,可以使用proc_open播放,也可以简单地将2>&1
添加到$command
中。后者通常足以让事情运转起来,并加快“实现”的速度。相关问题 更多 >
编程相关推荐