%20%E8%84%9A%E6%9C%AC%E4%BB%8E%20CPanel%20%E7%BB%88%E7%AB%AF%E8%BF%90%E8%A1%8C%EF%BC%8C%E4%BD%86%E4%B8%8D%E4%BB%8E%20ajax%20POST%20%E8%B0%83%E7%94%A8%E8%BF%90%E8%A1%8C.png)
在我的网站上,我有一个 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
。