2011-04-04 18 views
8

Yerleşik python çalışırken sorun yaşıyorum. Sys.exit() tarafından geliştirilen SystemExit istisnasını yakalayamadığım ortaya çıkıyor; ,Gömülü python'un çıkması nasıl önlenir() İşlemim

$ ./call unittest-files/python-return-code.py 
$ echo $? 
99 

Ben bir dosyayı yürütmek gerekir:

$ 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; 
} 

Ayrıca benim senaryom:

$ cat unittest-files/python-return-code.py 
from sys import exit 
exit(99) 

bunu Running

Bu defa ne var bir komut değil.

cevap

5

PyRun_SimpleFileExFlags işlevi (ve PyRun_AnyFileEx dahil olmak üzere kullanan tüm işlevler), SystemExit ya da yazdırma geri dönüşü için çıkarak istisnanın kendisini işleyebilir. Çevresel koddaki istisnaları işlemek için PyRun_File* işlev ailesini kullanın.

+1

Güzel çözüm. Şimdi PyRun_FileEx() kullanarak ve PyErr_GivenExceptionMatches() 'dan PyErr_Occurred() öğesini kontrol edin. Teşekkürler. – Caruccio