用help
生成的模块的SWIG
页不是很有帮助。实际上,它甚至没有列出每个函数的参数。
Help on module example:
NAME
example
FILE
/home/anon/example.py
DESCRIPTION
# This file was automatically generated by SWIG (http://www.swig.org).
# Version 3.0.12
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.
FUNCTIONS
fact(...)
get_time(...)
my_mod(...)
DATA
cvar = <Swig global variables>
(END)
问题:有一种方法可以告诉swig
(使用某些选项)至少 包括每个函数的命名参数的确切列表?
我至少希望得到以下内容:
...
fact(n)
...
my_mod(x, y)
...
通常也欢迎更高质量的文档。
我知道,如果将原始函数foo
重命名为_foo
,然后手动定义一个新的foo()
,则可以获得此结果。但是,还有其他一些系统的,内置的方法可以达到相同的目的吗?
这是我执行的命令列表,摘自tutorial:
~$ swig -python example.i
~$ gcc -fPIC -c example.c example_wrap.c \
-I/usr/include/python2.7
~$ ld -shared example.o example_wrap.o -o _example.so
文件example.c
:
/* File : example.c */
#include <time.h>
double My_variable = 3.0;
int fact(int n) {
if (n <= 1) return 1;
else return n*fact(n-1);
}
int my_mod(int x, int y) {
return (x%y);
}
char *get_time()
{
time_t ltime;
time(<ime);
return ctime(<ime);
}
文件example.i
:
/* example.i */
%module example
%{
/* Put header files here or function declarations like below */
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
%}
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
答案 0 :(得分:1)
请参阅SWIG文档中的36.10 Docstring Features。
尤其是autodoc
功能可以很好地配合您的示例。只需使用:
swig -python -features autodoc example.i
示例输出:
>>> import example
>>> help(example)
Help on module example:
NAME
example
DESCRIPTION
# This file was automatically generated by SWIG (http://www.swig.org).
# Version 3.0.12
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.
FUNCTIONS
fact(n)
fact(int n) -> int
get_time()
get_time() -> char *
my_mod(x, y)
my_mod(int x, int y) -> int
DATA
cvar = <Swig global variables>
FILE
c:\example\example.py
答案 1 :(得分:1)
另一种替代方法是使用doxy2swig.py
,例如http://github.com/m7thon/doxy2swig
使用doxygen example.h
的标题
#pragma once
extern double My_variable; ///< My variable for something
/**
* Factorial function
*
* @param n
*
* @return n!
*/
extern int fact(int n);
/**
* Module function
*
* @param x
* @param y
*
* @return
*/
extern int my_mod(int x, int y);
/**
* Get the current time
*
*
* @return string representation of time
*/
extern char *get_time();
接口文件example.i
%module example
%{
/* Put header files here or function declarations like below */
#include "example.h"
%}
%include "documentation.i"
%include "example.h"
要进行SWIG和编译,请执行以下操作。当然,如果愿意,可以使用automake或CMake很好地进行设置。
doxygen -g
sed -i 's/GENERATE_XML = NO/GENERATE_XML = YES/g' Doxyfile
python doxy2swig.py -c -a ./xml/index.xml documentation.i
swig -python example.i
gcc -fPIC -c example.c example_wrap.c -I/usr/include/python2.7
ld -shared example.o example_wrap.o -o _example.so
在Python中,文档显示为
In [1]: import example
In [2]: help(example.get_time)
Help on function get_time in module example:
get_time()
Get the current time
Returns
-------
string representation of time
get_time() -> char *
它可以概括为类的文档,并且非常灵活。