在我的网站上,我有一个 javascript 函数,它对服务器上的 PHP 文件(运行 CentOS 6 的 GoDaddy VPS)进行 POST ajax 调用,该函数通过 shell_exec() 执行 python 脚本并返回输出。
Javascript 函数:
function submitdivsheet()
{
$.post("test.php", {}, function(data,status){
console.log(data);
});
}
PHP 脚本:test.php
<?php
$command = escapeshellcmd('python3.6 test.py');
$output = shell_exec($command);
echo $output;
?>
Python 脚本:test.py
import sys
print("This is the output")
当我尝试从 CPanel 上的 bash 终端运行 php 文件时,没有任何问题, 如图所示。但是,运行 javascript 函数时,控制台只输出一个空字符串。我不确定为什么它只在 CPanel 终端上运行,但我怀疑可能是某个地方的权限问题。我该如何解决这个问题?
注意:如果 shell_exec() 不存在,此方法在服务器上和 POST 调用中均能正常工作。看来 shell_exec 是导致问题的原因。
编辑:将 PHP 脚本更改为:
<?php print shell_exec('echo $PATH'); ?>
这是输出。
答案1
从 Web 服务器调用 Python 时,缺少 shell 中存在的环境值。候选值包括PATH
Python 手册页中提到的变量。
尝试这个:
env -i python3.6 test.py
您可能会收到一些错误消息,希望这些消息能够指出问题所在。然后尝试使用 shell 环境中存在的变量,例如:
env -i PYTHONHOME=$PYTHONHOME python3.6 test.py
添加所有必要的环境变量。如果此操作有效,请将它们添加到对脚本的调用中。调用脚本时,您必须提供变量的实际值,不能将它们引用为$PYTHONHOME
。