我的解析器的结构:
parser = argparse.ArgumentParser()
parser.add_argument('-s', '--search')
parser.add_argument('-t', '--status' action='store_true')
args = parser.parse_args()
if args.search:
func(args.search)
if args.status:
func1()
现在,解析器可以接受这两个选项,-s query -t
有效。
我有两个问题:
仅当传递了多个参数时,如何对第一个参数执行操作。
-s query -t
必须只生成
if args.search:
func(args.search)
待完成。
如果传递多个args,如何抛出错误?
答案 0 :(得分:3)
这里适当的工具是subparser;惯用法与目前建议的命令行不同。
def your_search_function(options):
pass # do a search here
def your_status_function(options):
pass # collect status here
def main():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparser(dest='action')
search_parser = subparsers.add_parser('search')
search_parser.set_defaults(func=your_search_function)
status_parser = subparsers.add_parser('status')
status_parser.set_defaults(func=your_status_function)
results = parser.parse_args()
results.func(options=results)
if __name__ == '__main__':
main()
用法如下:
./yourcommand <global options> search <search options>
或
./yourcommand <global options> status <status options>
...由于它将子命令作为参数而不是选项运行,因此不允许传递多个子命令,因此只有在使用不明确时才能使问题部分无效。
可以像往常一样将全局选项添加到parser
;特定于搜索的search_parser
选项以及status_parser
的特定于状态的选项。