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