使用 argparse 获取选定的子命令 [英] Get selected subcommand with argparse

查看:26
本文介绍了使用 argparse 获取选定的子命令的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我在 python argparse 中使用子命令时,我可以获得选定的参数.

parser = argparse.ArgumentParser()parser.add_argument('-g', '--global')subparsers = parser.add_subparsers()foo_parser = subparsers.add_parser('foo')foo_parser.add_argument('-c', '--count')bar_parser = subparsers.add_parser('bar')args = parser.parse_args(['-g', 'xyz', 'foo', '--count', '42'])# args =>命名空间(全局='xyz',计数='42')

所以 args 不包含 'foo'.由于可能的全局参数,简单地编写 sys.argv[1] 是行不通的.如何获取子命令本身?

解决方案

关于 argparse 子命令的 Python 文档 解释了如何执行此操作:

<预><代码>>>>解析器 = argparse.ArgumentParser()>>>parser.add_argument('-g', '--global')>>>subparsers = parser.add_subparsers(dest="subparser_name") # 这一行改变了>>>foo_parser = subparsers.add_parser('foo')>>>foo_parser.add_argument('-c', '--count')>>>bar_parser = subparsers.add_parser('bar')>>>args = parser.parse_args(['-g', 'xyz', 'foo', '--count', '42'])>>>参数命名空间(count='42', global='xyz', subparser_name='foo')

您还可以使用我找到的示例上方引用的 set_defaults() 方法.

When I use subcommands with python argparse, I can get the selected arguments.

parser = argparse.ArgumentParser()
parser.add_argument('-g', '--global')
subparsers = parser.add_subparsers()   
foo_parser = subparsers.add_parser('foo')
foo_parser.add_argument('-c', '--count')
bar_parser = subparsers.add_parser('bar')
args = parser.parse_args(['-g', 'xyz', 'foo', '--count', '42'])
# args => Namespace(global='xyz', count='42')

So args doesn't contain 'foo'. Simply writing sys.argv[1] doesn't work because of the possible global args. How can I get the subcommand itself?

解决方案

The very bottom of the Python docs on argparse sub-commands explains how to do this:

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-g', '--global')
>>> subparsers = parser.add_subparsers(dest="subparser_name") # this line changed
>>> foo_parser = subparsers.add_parser('foo')
>>> foo_parser.add_argument('-c', '--count')
>>> bar_parser = subparsers.add_parser('bar')
>>> args = parser.parse_args(['-g', 'xyz', 'foo', '--count', '42'])
>>> args
Namespace(count='42', global='xyz', subparser_name='foo')

You can also use the set_defaults() method referenced just above the example I found.

这篇关于使用 argparse 获取选定的子命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆