我在尝试在php服务器(LAMP)中执行python时遇到了一个奇怪的问题。 (safe_mode off)
如果我输入:
$output = shell_exec("ls -lah");
echo "<pre>$Output</pre>";
我得到了ls
命令的结果。 $output = shell_exec("tar --version");
和其他应用程序相同,例如gzip。
但是,如果我切换以下任何一行:
$output = shell_exec("python --version");
$output = shell_exec("python2.7 --version");
$output = shell_exec("/usr/bin/python --version");
$output = shell_exec("python my_script.py");
这种其他变体,我没有结果。该命令未被执行,未创建python bitecode且echo
保持静默。
我还尝试使用exec()
命令,但没有取得更多成功。
答案 0 :(得分:6)
我认为这可能会有所帮助......
看起来python调用的输出需要正确路由。 我能够在index.php文件中完成这项工作,以便返回python版本......
shell_exec("python -V 2>&1");
Here是我找到答案的地方。
答案 1 :(得分:0)
我认为内核无法找到安装它的python的路径..如果你可以做echo $ PATH..it将显示所有路径在哪里搜索命令如果给定 在那里添加你的python部分,然后它可能工作或你可以给出绝对路径(除了/ usr / bin /)看它是否有效..我也需要测试它。
答案 2 :(得分:0)
什么是
which python
告诉你,从命令行和shell_exec()?它应该告诉你它找到了哪个(如果有的话)Python解释器(来自$PATH
)。不要忘记,Linux命令行中使用的$PATH
可能与shell_exec()使用的$PATH
不一样!一旦找到想要使用的Python解释器,可能必须在shell_exec()中对其进行硬编码。
答案 3 :(得分:0)
如果您尝试使用以下代码运行python脚本
$output = shell_exec("python my_script.py");
你需要为my_script.py使用绝对路径,并为python文件提供所有权限(我不确定哪些是足够的)。
答案 4 :(得分:0)
Web服务器很可能没有适当的权限来执行shell命令。要解决这个问题,请运行&#39; sudo visudo&#39;命令并将以下行添加到sudoers文件中:
www-data ALL = NOPASSWD:ALL
此外,请确保/ var / www目录属于www-data用户和组(使用sudo chown -R www-data:www-data / var / www设置正确的所有者)。详情请见http://www.raspberry-pi-geek.com/Archive/2014/07/PHP-on-Raspberry-Pi
答案 5 :(得分:0)
我认为你需要参考你的python的完整路径。
例如,使用此代码:
$output = shell_exec("/usr/bin/python full_path/my_script.py")
而不是:
$output = shell_exec("python my_script.py");