编写命令行脚本

Astropy中的命令行脚本应该遵循一致的方案,以提高可读性和兼容性。

设置工具' "entry points" 用于自动生成具有正确扩展名的包装器。这些脚本可以存在于它们自己的模块中,也可以作为实现类或函数的更大模块的一部分,以供astropy库使用。他们应该有一个 main 函数解析参数并将这些参数传递给某个库函数,以便在需要时可以编程方式使用库函数。这个 main 函数应接受包含 sys.argv 列表,脚本名称除外(例如。, argv[1:] ). 然后必须将其添加到 setup.py 文件(参见下面的示例)。

可以根据需要解析命令行选项,但是 argparse 如果可能的话,建议使用模块,因为它比旧的模块接口更简单、更灵活 optparse .

例子

内容 /astropy/somepackage/somemod.py ::

def do_something(args, option=False):
    for a in args:
        if option:
            ...do something...
        else:
            ...do something else...

def main(args=None):

    import argparse

    parser = argparse.ArgumentParser(description='Process some integers.')
    parser.add_argument('-o', '--option', dest='op',action='store_true',
                        help='Some option that turns something on.')
    parser.add_argument('stuff', metavar='S', nargs='+',
                        help='Some input I should be able to get lots of.')

    res = parser.parse_args(args)

    do_something(res.stuff,res.op)

然后将脚本添加到 setup.cfg 在本节中:

[options.entry_points]
console_scripts =
    somescript = astropy.somepackage.somemod:main