2016-03-05 41 views
2

我的默认Web应用程序基于PHP。但是,为了方便起见,我构建了一个可以进行分析的python脚本。现在我需要php来调用python代码并检索python代码提供的输出。两个文件都在同一个服务器中,但不在同一个文件夹中。我目前的做法,这是不行的,看起来如下:使用shell_exec从PHP中调用Python

$cmd = "/usr/bin/python /var/www/include/sCrape.py -u '$my_url' "; 
$response = shell_exec($cmd); 
$response = json_decode($response, true); 

现在,当我尝试打印出$回应,我得到空的对象(它应该返回一个数组,字符串,我应该通过json_decode解码) 。我在做这个功能有问题吗?该php位于/ var/www/html /中。下面的代码工作时,两个文件都在同一个目录下:

$cmd = "python sCrape.py -u '$my_url'"; 
$response = shell_exec($cmd); 
$response = json_decode($response, true); 

更多信息:my_url输入从PHP中的消毒$ _ POST变量,但现在我已经尝试完全禁用消毒,以测试它是否会工作,但它仍然没有(仍然,直到它到达函数的url路径更长,因为它必须通过form-post传递,而在我的相同文件夹测试用例中,我只声明了$ my_url) 。 -u后缀表示脚本输入一个url。

非常感谢您提前!

回答

1

您是否尝试在shell中运行/usr/bin/python /var/www/include/sCrape.py -u '$my_url'?错误可能在那里。

尝试:

$cmd = "/usr/bin/python /var/www/include/sCrape.py -u '$my_url' 2>&1"; 
$response = shell_exec($cmd); 
echo $response; 

这应该输出一个错误消息。

为什么?

shell_exec仅返回标准输出(stdout)的输出,如果发生错误,则将其写入“标准错误(stderr)”。 2>&1将stderr重定向到stdout。请参阅In the shell, what does “ 2>&1 ” mean?

运行Python代码

你可能想在你的python脚本的第一行添加#!/usr/bin/env python,并使其可执行chmod +x /var/www/include/sCrape.py。之后,您应该能够在不显式调用python的情况下运行脚本。 /var/www/include/sCrape.py -u '$my_url'

+0

非常感谢您的广泛答案!然而,不幸的是,这并没有解决我的问题:/你能想到的其他任何东西?这可能是后期消毒破坏了网址? – DaveTheAl

+0

添加了“2>&1”的'$ response'的值是多少?我认为这是一个许可问题。 – Liblor

+0

老兄,请给自己一个拥抱...... shell_exec中的2>&1运行良好,我终于可以调试我的代码了......非常感谢! – DaveTheAl