我想在python应用程序中嵌入C ++。我不想使用Boost库。
如果C ++函数执行断言,我想抓住它并在我的python应用程序中打印错误或获取一些详细信息,如python脚本中的行号导致错误。主要是“我想进一步在python执行流程中”
我该怎么办?我找不到任何函数来获取Python API或C ++中的详细断言信息。
C ++代码
void sum(int iA, int iB)
{
assert(iA + iB >10);
}
Python代码
from ctypes import *
mydll = WinDLL("C:\\Users\\cppwrapper.dll")
try:
mydll.sum(10,3)
catch:
print "exception occurred"
# control should go to user whether exceptions occurs, after exception occurs if he provide yes then continue with below or else abort execution, I need help in this part as well
import re
for test_string in ['555-1212', 'ILL-EGAL']:
if re.match(r'^\d{3}-\d{4}$', test_string):
print test_string, 'is a valid US local phone number'
else:
print test_string, 'rejected'
提前致谢。
答案 0 :(得分:0)
这实际上可以按照你所说的方式完成(正如评论中也指出的那样)。
一旦断言发生并且SIGABRT被发送到该过程,它将在操作系统的手中发生什么,并且通常该过程将被杀死。
从被杀死的进程中恢复的最简单方法是让进程由外部进程启动。比如,辅助python脚本或shell脚本。在bash脚本中很容易,例如,启动另一个进程,检查它是否正常终止或中止,记录并继续。
例如,这里有一些执行命令行$command
的bash代码,将标准错误通道记录到日志文件中,检查返回代码(对于SIGABRT将是130或者什么),并且在各种情况下的东西:
$command 2> error.log
error_code="$?"
if check_errs $error_code; then
# Do something...
return 0
else
# Do something else...
return 1
fi
check_errs是你要写的其他子程序。