Как предотвратить встроенный Python для выхода () мой процесс - PullRequest
8 голосов
/ 04 апреля 2011

У меня проблемы с запуском встроенного питона.Оказывается, я не могу перехватить это исключение SystemExit, вызванное sys.exit ();

Это то, что у меня есть:

$ 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

Я должен выполнить файл, а не команду.

1 Ответ

5 голосов
/ 04 апреля 2011
Функция

PyRun_SimpleFileExFlags (и все функции, использующие ее, включая PyRun_AnyFileEx) самостоятельно обрабатывает исключения, выходя из SystemExit или печатая трассировку. Используйте семейство функций PyRun_File* для обработки исключений в окружающем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...