在我的網站上,我有一個 javascript 函數,它對伺服器(運行 CentOS 6 的 GoDaddy VPS)上的 PHP 檔案進行 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
從 shell 中存在的 Web 伺服器呼叫 python 時,您缺少環境值。候選者是PATH
python 手冊頁中提到的變數。
嘗試這個:
env -i python3.6 test.py
您可能會收到一些錯誤訊息,希望能夠指出問題所在。然後嘗試 shell 環境中存在的變數,例如:
env -i PYTHONHOME=$PYTHONHOME python3.6 test.py
新增所有必要的環境變數。當此方法有效時,將它們新增至腳本的呼叫中。呼叫腳本時,您已經提供了變數的實際值,不能將它們稱為$PYTHONHOME
.