我想运行一些python脚本(我知道风险,但我必须完成它)
我尝试使用:
echo exec('python --version ');
以及
echo shell_exec('python --version ');
还试过'/usr/bin/python '
而不是python
但我根本得不到任何输出。
我甚至已将www-data添加到sudoers列表中,仍然无法正常工作。
我该怎么办?
运行debian和python 2.7
答案 0 :(得分:4)
似乎python --version
由于某种原因将版本信息打印到stderr而不是stdout,所以你需要将前者重定向到后者:
exec('python --version 2>&1');
另请注意,exec的返回值只是执行命令输出的最后一行。如果要从返回多行的命令中捕获完整输出,则需要提供一个数组作为exec's
第二个参数:
$output = array();
exec($some_command, $output);
答案 1 :(得分:2)
要捕获python --version
的输出,请使用以下内容:
exec('python --version 2>&1', $output);
var_dump($output);
python --version
输出到stderr,这是bug。它已在Python 3.4.0中修复(参见changelog, issue #18338)。
答案 2 :(得分:1)
你无法从PHP运行python脚本的原因是,系统调用需要是root.Even,如果你进行sudo调用,它需要密码。所以你可以做的是将这一行添加到结尾文件:/ etc / sudoers
www-data ALL =(ALL)NOPASSWD:ALL
这样,来自PHP的任何sudo调用都不需要密码。
继续执行python脚本,例如。 exec("sudo python /home/pi/test.py");
这对我有用。让我知道它是否有效。
答案 3 :(得分:0)
在命令行上键入python
时,您的Shell将搜索在环境变量$PATH
中配置的所有文件夹。您的PHP-Interpreter具有不同的环境,因此可能找不到python
- 二进制。
尝试通过在您的Shell中运行python
来获取which python
二进制文件的完整路径,并尝试在PHP中使用它。