繁体   English   中英

使用shell_exec()在php脚本中执行python

[英]Execute python in a php script using shell_exec()

我在尝试在php服务器(LAMP)中执行python时遇到了一个奇怪的问题。 (safe_mode关闭)

如果我输入:

$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()命令,但没有成功。

我想这可能会有所帮助......

看起来python调用的输出需要正确路由。 我能够在我的index.php文件中使这个工作返回python版本...

shell_exec("python -V 2>&1");

是我找到答案的地方。

我认为内核无法找到安装它的python的路径..如果你可以做echo $ PATH..it将显示搜索命令的所有路径,如果给出在那里添加你的python部分然后它可能工作或者你可以给出绝对路径(除了/ usr / bin /)看看它是否有效..我也需要测试它。

是什么

which python

从命令行和shell_exec()告诉你? 它应该告诉你它找到了哪个(如果有的话)Python解释器(来自$PATH )。 不要忘记,Linux命令行中使用的$PATH很可能与shell_exec()使用的$PATH不同! 一旦找到要使用的Python解释器,就可能需要在shell_exec()中对其进行硬编码。

如果您尝试使用以下代码运行python脚本

$output = shell_exec("python my_script.py");

你需要为my_script.py使用绝对路径,并为python文件提供所有权限(我不确定哪些是足够的)。

Web服务器很可能没有适当的权限来执行shell命令。 要解决此问题,请运行'sudo visudo'命令并将以下行添加到sudoers文件中:

www-data ALL = NOPASSWD:全部

此外,请确保/ 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

另请参阅无法从php执行python脚本

我想你需要参考你的python的完整路径。

例如,使用此代码:

$output = shell_exec("/usr/bin/python full_path/my_script.py")

代替:

$output = shell_exec("python my_script.py");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM