python中函数的命令行参数

时间:2017-09-29 19:37:20

标签: python

我有一个包含多个功能的python文件。每个函数都有自己的参数。

第一个参数是要运行的函数。但我无法找到如何为我的函数定义参数,以便它出现在argsparse帮助中,也可以验证。

import argparse

parser = argparse.ArgumentParser(description='Index related commands')
parser.add_argument('command', type=str)
arguments = parser.parse_args()

es = Es('myproject_elasticsearch')


def create(name):
    """

    :param name: Name of index
    :return: None
    """
    mapping = index_factory(name).get_mapping()
    es.create_index(name, mapping)


def index_factory(name):
    try:
        if name == 'catalog':
            index = Catalog()
            return index
        else:
            raise ValueError('Cannot find mapping for %s' % name)
    except ValueError as e:
        print (e)
        traceback.print_exc()
        exit(1)

这里第一个postional参数将是命令的名称,在本例中为create

我想要的是用户可以传递其他参数,这些参数在不同的函数上会有所不同。

例如: $ python app.py create --catalog因此,此catalog将作为create函数的参数,并且可以在help中查看

谢谢

1 个答案:

答案 0 :(得分:1)

尝试OptionParser:

from optparse import OptionParser

def create(name):
    ...

def index_factory(name):
    ...


if __name__ == "__main__":

    usage = "usage: %prog [options] arg1"
    parser = OptionParser(usage=usage)

    parser.add_option("-i", "--index", dest="index",
                          help="the index to create")
    parser.add_option("-c", "--catalog", dest="catalog",
                          help="catalog name", default="my_catalog")

    (options, args) = parser.parse_args()

    if args[0] == 'create':
        create(options.index)
    elif args[0] == 'index_factory':
        index_factory(options.index)

根据需要添加任意数量的选项。然后你可以这样称呼它

python app.py create -i my_index

或使用帮助查看您的选项

python app.py -h