2012-10-19 36 views
2

呷有包括加载模块时执行代码的支持,如下所示:SWIG是否支持最终化块?

%init %{ 
    init_variables(); 
%} 

有类似的功能也存在终结?我找不到任何文档,也许有另一种好方法来完成相同的事情?

+1

模块通常不卸载。你想做什么? –

+0

每当一个Python脚本退出导入了由SWIG生成的模块时,如果可以运行某种终结代码将会很好。现在,我们必须为我们的API明确添加一个终结方法。 –

回答

3

您可以在%init期间注册atexit清理程序。这里的工作示例:

%module sample 

%{ 
#include <stdlib.h> 
#include <stdio.h> 

void cleanup() 
{ 
    printf("cleanup!\n"); 
} 
%} 

%init %{ 
    atexit(cleanup); 
%} 

结果:

Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:57:17) [MSC v.1600 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sample 
>>> ^Z 

cleanup! 
+0

伟大的解决方案,谢谢! –