我有一个包含多个功能的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
中查看
谢谢
答案 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