7

我正在尝试使用 Python 的 argparse 模块构建命令行界面。我想要两个位置参数,其中一个依赖于另一个(相互包含)。这是我想要的:

prog [arg1 [arg2]]

这是我到目前为止所拥有的:

prog [arg1] [arg2]

由以下公司生产:

parser = argparse.ArgumentParser()
parser.add_argument('arg1', nargs='?')
parser.add_argument('arg2', nargs='?')

我如何从那里获得一个相互包容的 arg2?

4

2 回答 2

3

模块argparse没有用于创建相互包含的参数的选项。不过自己写很简单。
首先将两个参数添加为可选:

parser.add_argument('arg1', nargs='?')
parser.add_argument('arg2', nargs='?')

解析参数后检查是否arg1已设置和arg2未设置:

args = parser.parse_args()
if args.arg1 and not args.arg2:

None(如果您将默认值从for not used arguments 更改为不同的值,这可能会更加棘手)

然后使用parser.error()函数显示正常的argparse错误信息:

parser.error('the following arguments are required: arg2')

最后更改用法:消息以显示arg2取决于arg1

parser = argparse.ArgumentParser(usage='%(prog)s [arg1 [arg2]]')

一个完整的脚本:

import argparse

parser = argparse.ArgumentParser(usage='%(prog)s [arg1 [arg2]]')
parser.add_argument('arg1', nargs='?')
parser.add_argument('arg2', nargs='?')

args = parser.parse_args()

if args.arg1 and not args.arg2:
    parser.error('the following arguments are required: arg2')
于 2019-06-26T20:37:32.047 回答
0

您可以使用sub_parsers.

以下是文档和示例:

http://docs.python.org/2/library/argparse.html#sub-commands

于 2013-04-10T19:52:03.567 回答