在 PHP 中处理 Python exception/errors
handle Python exception/errors in PHP
我是 运行 一些 python 脚本,来自 PHP 脚本,使用 PHP 的 exec($cmd, $output)
函数。
documentation 声明程序的所有输出都写入 $output
数组。这工作正常,但是,如果 Python 代码引发 exception/error,该函数似乎只是 return NULL,没有关于异常的任何信息。
例如:
run_python.py
print('starting python')
x = 1/0 #This will raise an error
print('complete python')
运行 它来自 交互式 PHP shell 产生以下内容:
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_exec and passthru,但没有成功。
将 stderr 重定向到 stdout
$ret_val = exec('python run_python.py 2>&1', $output);
您可以使用:exec ( 'python run_python.py', $output,$return_var ),您将在 $return_var 处获得错误代码,在 $output 处获得回溯,你可以通过
看到它
exec ( 'python run_python.py', $output,$return_var );
if ($return_var>0) {
var_dump($output);
}
我是 运行 一些 python 脚本,来自 PHP 脚本,使用 PHP 的 exec($cmd, $output)
函数。
documentation 声明程序的所有输出都写入 $output
数组。这工作正常,但是,如果 Python 代码引发 exception/error,该函数似乎只是 return NULL,没有关于异常的任何信息。
例如:
run_python.py
print('starting python')
x = 1/0 #This will raise an error
print('complete python')
运行 它来自 交互式 PHP shell 产生以下内容:
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_exec and passthru,但没有成功。
将 stderr 重定向到 stdout
$ret_val = exec('python run_python.py 2>&1', $output);
您可以使用:exec ( 'python run_python.py', $output,$return_var ),您将在 $return_var 处获得错误代码,在 $output 处获得回溯,你可以通过
看到它exec ( 'python run_python.py', $output,$return_var );
if ($return_var>0) {
var_dump($output);
}