使用shell_exec从PHP中调用Python
我的默认Web应用程序基于PHP。然而,为了方便起见,我已经构建了一个python脚本来进行一些分析。现在我需要php调用python代码并检索python代码提供的输出。这两个文件位于同一服务器上,但不在同一文件夹上。我目前的方法不起作用,如下所示:使用shell_exec从PHP中调用Python,php,python,shell,post,shell-exec,Php,Python,Shell,Post,Shell Exec,我的默认Web应用程序基于PHP。然而,为了方便起见,我已经构建了一个python脚本来进行一些分析。现在我需要php调用python代码并检索python代码提供的输出。这两个文件位于同一服务器上,但不在同一文件夹上。我目前的方法不起作用,如下所示: $cmd = "/usr/bin/python /var/www/include/sCrape.py -u '$my_url' "; $response = shell_exec($cmd); $response = json_decode($r
$cmd = "/usr/bin/python /var/www/include/sCrape.py -u '$my_url' ";
$response = shell_exec($cmd);
$response = json_decode($response, true);
现在,当我尝试打印$response时,我得到了NULL对象(它应该返回一个数组字符串,我应该通过json_decode进行解码)。我的功能有问题吗?php位于/var/www/html/中。当两个文件位于同一目录中时,以下代码起作用:
$cmd = "python sCrape.py -u '$my_url'";
$response = shell_exec($cmd);
$response = json_decode($response, true);
进一步信息:my_url是作为一个经过清理的$POST变量从php输入的,但我现在尝试完全禁用清理以测试它是否有效,但仍然没有(不过,url到达函数之前的路径更长,因为它必须通过表单post传递,而在我的同一个文件夹测试用例中,我只是声明了$my_url)。-u后缀表示脚本输入url
非常感谢!您是否尝试在shell中运行
/usr/bin/python/var/www/include/sCrape.py-u'$my_url'
?错误可能就在这里
尝试:
这将输出一条错误消息
为什么?
shell\u exec
仅返回标准输出(stdout)的输出,如果发生错误,则将其写入“标准错误”(stderr)。2>&1
将stderr重定向到stdout。请参阅
运行python代码
您可能希望在python脚本的第一行添加
#!/usr/bin/env python
,并使其可执行chmod+x/var/www/include/sCrape.py
。之后,您应该能够在不显式调用python的情况下运行脚本。/var/www/include/sCrape.py-u'$my\u url'
非常感谢您的支持回答!然而,不幸的是,这并没有解决我的问题:/你还能想到什么吗?可能是后期清理破坏了url吗?添加了2>&1
的$response
的值是多少?我认为这是权限问题。老兄,请拥抱一下……shell\u exec中的2>&1运行良好,我可以终于调试了我的代码…非常感谢mcuc!你也可以看看这个吗?
$cmd = "/usr/bin/python /var/www/include/sCrape.py -u '$my_url' 2>&1";
$response = shell_exec($cmd);
echo $response;