2015-02-23 120 views
0

我使用PHP的exec($cmd, $output)函數從PHP腳本中運行一些python腳本。處理Python異常/ PHP中的錯誤

documentation指出程序的所有輸出都寫入$output陣列。這工作正常,但是,如果Python代碼引發異常/錯誤,該函數似乎只返回NULL,沒有關於異常的任何信息。

例如:

run_python.py

print('starting python') 
x = 1/0 #This will raise an error 
print('complete python') 

交互式PHP殼運行它產生以下:

php > $output = ''; 
php > $ret_val = exec('python run_python.py', $output); 
Traceback (most recent call last): 
    File "run_python.py", line 2, in <module> 
    x = 1/0 

$output陣列只包含starting python,和$ret_val不包含任何內容。

這對於交互式shell是可以的,但是我正在運行web界面中的代碼,並且從不顯示錯誤信息。有什麼方法可以捕獲該錯誤,然後使用echo進行顯示?

我試過shell_execpassthru,但沒有成功。

回答

1

stderr重定向到stdout

$ret_val = exec('python run_python.py 2>&1', $output); 
0

你可以做到這一點:EXEC( '蟒蛇run_python.py',$輸出,$ return_var),你必須在$ return_var和追蹤錯誤代碼在$輸出,你可以通過做看到它

exec ('python run_python.py', $output,$return_var); 
if ($return_var>0) { 
    var_dump($output); 
}