python - 如何防止嵌入式 python 退出()我的进程

标签 python exception embedded exit

我在运行嵌入式 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/

相关文章:

python - pyparsing 开始和结束字符串相同

java - 从 NullPointerException 获取堆栈跟踪

c - 编码解码字节

python - 找出一系列整数中的跳过值

从一个字符串列表创建的 Python 字符串列表

java - 从日志中获取异常

java - 为什么 GWT 不序列化异常的原因链?

linux - 如果我想将基于 Intel Atom 的主板用作嵌入式系统,我可以使用哪些操作系统?

embedded - 在闪存中下载代码的过程

python - Django Mezzanine - 如何在每页有一个自定义模板?