暗示的通常方法来定义一个子分析器argparse子分析器是做其他参数
master_parser = argparse.ArgumentParser()
subparsers = master_parser.add_subparsers()
parser = subparsers.add_parser('sub')
parser.add_argument('--subopt')
和子分析器将与
command sub --subopt
叫我采取的是叫号的包转换器。如果我使用通常的子分析器的做法,我会做
convert ext1_to_ext2 file.ext1 file.ext2 --args
这既是重复且容易出错,因为用户可能会调用
convert ext1_to_ext3 file.ext1 file.ext2 --args
我更希望的是,子分析器会自动根据确定主解析器所以用户可以使用命令
convert file.ext1 file.ext2 EXTRA
和将确定从子分析器和file.ext2
,并呼叫子分析器ext1_to_ext2
解析EXTRA
。当然EXTRA
这里是subparser具体。
我试着为每个转换器使用参数组(add_argument_group
),但参数组中的参数不能重叠,并且我得到了所有分析器中混合参数的混乱列表,因此使用子分析器似乎是一种方法。
我试图使用parse_known_args
两个位置参数,确定并使用适当的子分析器来解析剩余的参数,但很难为用户提供来自帮助消息的转换器及其参数列表。
有没有办法做到这一点?
你可以使用['parse_known_args'](https://docs.python.org/3.5/library/argparse.html#partial-parsing)吗?这可以让你解析第一部分的参数,自己评估正确的子分析器,然后将剩下的参数传递给适当的子分析器。 – SethMMorton
这是我现在正在采取的方法,但我正在努力如何为用户提供帮助信息。看起来我需要劫持'convert file.ext1 file.ext2 -h'来打印来自另一个解析器的帮助消息,但是我仍然无法列出来自'convert -h'的所有可用转换器(也许'epilog'可以工作)。 – user2283347
您要求的逻辑类型对'argparse'不合理。直接解析'sys.argv'或通过'argparse'获取值作为简单字符串,然后推导出您应该采取的操作。 – hpaulj