Python 如何强制swig在模块的帮助页面中生成适当的参数列表?

Python 如何强制swig在模块的帮助页面中生成适当的参数列表?,python,swig,pydoc,Python,Swig,Pydoc,使用SWIG生成的模块的help页面没有太大帮助。事实上,它甚至没有列出每个函数的参数 模块示例帮助: 名称 例子 文件 /home/anon/example.py 描述 #此文件由SWIG自动生成(http://www.swig.org). #版本3.0.12 # #除非您知道自己在做什么,否则不要对此文件进行更改--修改 #而不是SWIG接口文件。 功能 事实(……) 获取时间(…) 我的_mod(…) 资料 cvar= (完) 问题:有没有一种方法可以告诉swig——通过一些选项——至少

使用
SWIG
生成的模块的
help
页面没有太大帮助。事实上,它甚至没有列出每个函数的参数

模块示例帮助:
名称
例子
文件
/home/anon/example.py
描述
#此文件由SWIG自动生成(http://www.swig.org).
#版本3.0.12
#
#除非您知道自己在做什么,否则不要对此文件进行更改--修改
#而不是SWIG接口文件。
功能
事实(……)
获取时间(…)
我的_mod(…)
资料
cvar=
(完)
问题:有没有一种方法可以告诉swig——通过一些选项——至少包括每个函数的命名参数的确切列表

我想至少得到以下信息:

。。。
事实(n)
...
my_mod(x,y)
...
一般而言,更高质量的文件也将受到欢迎

我知道,如果我将原始函数
foo
重命名为
\u foo
,然后手动定义一个新的
foo()
,就可以得到这个结果。但是,是否有其他系统性的内置方法可以达到同样的目的


这是我执行的命令列表,摘自:

文件
example.c

/*文件:example.c*/
#包括
双My_变量=3.0;
整数事实(整数n){
如果(n参见SWIG文档中的

特别是,
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
>>导入示例
>>>帮助(示例)
有关模块示例的帮助:
名称
例子
描述
#此文件由SWIG自动生成(http://www.swig.org).
#版本3.0.12
#
#除非您知道自己在做什么,否则不要对此文件进行更改--修改
#而不是SWIG接口文件。
功能
事实(n)
事实(int n)->int
获取时间()
获取时间()->char*
my_mod(x,y)
my_mod(intx,inty)->int
资料
cvar=
文件
c:\example\example.py

另一种选择是使用
doxy2swig.py
,请参见

使用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();
要进行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 *

它概括了类的文档,并且非常灵活。

另一个选项是使用doxygen生成
.xml
输出,并使用
doxy2swig.pl
生成一个全面的文档,它可以包含在
.i
文件中。请参阅例如@JensMunk将其作为答案发布,可能带有mcve,因此我可以投票支持你的建议,它可以更明显。我会这么做的,这很好
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
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 *