我在运行嵌入式 python 时遇到问题。事实证明,我无法捕获 sys.exit() 引发的 SystemExit 异常;
这是我目前所拥有的:
$ cat call.c
#include <Python.h>
int main(int argc, char *argv[])
{
Py_InitializeEx(0);
PySys_SetArgv(argc-1, argv+1);
if (PyRun_AnyFileEx(fopen(argv[1], "r"), argv[1], 1) != 0) {
PyObject *exc = PyErr_Occurred();
printf("terminated by %s\n",
PyErr_GivenExceptionMatches(exc, PyExc_SystemExit) ?
"exit()" : "exception");
}
Py_Finalize();
return 0;
}
此外,我的脚本是:
$ cat unittest-files/python-return-code.py
from sys import exit
exit(99)
运行它:
$ ./call unittest-files/python-return-code.py
$ echo $?
99
我必须执行文件,而不是命令。
最佳答案
PyRun_SimpleFileExFlags
函数(以及所有使用它的函数,包括 PyRun_AnyFileEx
)通过退出 SystemExit
或打印回溯来处理异常本身。使用 PyRun_File*
函数系列来处理周围代码中的异常。
关于python - 如何防止嵌入式 python 退出()我的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5540277/