假设我有一个带有参数
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
的行为完全符合我希望开关的行为方式......
您可以尝试创建一个包含
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.