使用boost::python,很容易在c++嵌入python,不需要关心python那些c api的复杂性。但有一个问题是python编译出错信息或者异常信息不能重定向字符串里,打印出来,python错误信息默认是输出到stderr的,是基于命令行的。通过文件重定向有点麻烦,需要写一些python脚本,也不直观。通过很长的摸索和搜索,终于找到了下面的方法。
通过以下c++代码,可以实现pyhon错误信息输出到c++字符串。
std::string GetPythonErrorInfo(void)
{
using namespace boost::python;
PyObject *exc,*val,*tb;
PyErr_Fetch(&exc,&val,&tb);
PyErr_NormalizeException(&exc,&val,&tb);
handle<> hexc(exc),hval(allow_null(val)),htb(allow_null(tb));
if(!hval)
{
return extract<std::string>(str(hexc));
}
else
{
object traceback(import("traceback"));
object format_exception(traceback.attr("format_exception"));
object formatted_list(format_exception(hexc,hval,htb));
object formatted(str("").join(formatted_list));
return extract<std::string>(formatted);
}
}
更多推荐
Python学习:使用boost c++嵌入python,获取异常信息输出到字符串
发布评论