argparse:可选参数覆盖位置参数

问题描述 投票:0回答:1

假设我有一个带有参数

foo [--bar baz]
的 python 脚本,并且想要添加一个可选参数/开关
--extra-info
,它只会打印一些额外的信息并退出。 (我的实际用例有点复杂,但这说明了问题。)

我找到了以下解决方案,但它看起来更像是一个黑客。基本上,如果参数列表中存在“--extra-info”,我会将位置参数设为可选:

import sys
import argparse

parser.add_argument('--extra-info', action='store_true')
pos_nargs = '?' if '--extra-info' in sys.argv else None
parser.add_argument('foo', nargs=pos_nargs)
parser.add_argument('--bar')

有更好的方法吗? 我希望会有一个,因为

--help
的行为完全符合我希望开关的行为方式......

python argparse
1个回答
0
投票

您可以尝试创建一个包含

action=store_true
default=False
的新参数标志,然后提取布尔值中的值,该值可用于打印额外信息:

代码

import argparse
import sys

# create Parser
parser = argparse.ArgumentParser()
parser.add_argument(
    "-extra_info", "--extra_info",
    action="store_true",
    default=False,
    help="Include this flag to print extra information."
)

# Parse arguments and store value in a variables
args = parser.parse_args()
is_print_extra_info = args.extra_info

# Test
if is_print_extra_info:
    print("'--extra_info' command line argument passed. Printing extra info.")

输出

没有旗帜:

$ python parse.py

带有旗帜:

$ python parse.py --extra_info
'--extra_info' command line argument passed. Printing extra info.
© www.soinside.com 2019 - 2024. All rights reserved.