Argparse添加带选项的参数并保存到变量(dest)



我正在尝试向代码中添加参数,我可以使以下代码工作:


import argparse
parser = argparse.ArgumentParser()
parser.add_parser('title', help='Top level arg')
subparser = parser.add_subparsers(dest='my_var') # so I can access it later
subcommand_parser = subparser.add_parser('subtitle', help='Another option help', choices=['foo', 'bar'])

因此,有了这个,我可以如下调用我的程序:

./main.py title subtitle foo

然后访问if my_var == 'foo': ...中传递的值

问题是,我想去掉字幕/解析器,只使用./main.py title foo调用我的程序,并将该值存储在变量中

import argparse
parser = argparse.ArgumentParser()
parser.add_parser('title', help='Top level arg')
parser.add_argument('subtitle', choices=['foo', 'bar'])

这很好,因为我可以使用./main.py title foo (or bar)调用,但我无法访问变量args.my_var

我尝试将dest='my_var'添加到add_parser中,但遇到了一个意外的参数错误。我试着把它添加到add_argument中,但我得到了一个dest supplied twice for positional argument(我可能可以通过在争论之前添加--来解决这个问题,但后来我又回到了最初的问题(。

有没有一种方法可以使用./main.py title foo调用我的程序并将其保存到诸如args.my_var之类的变量中?

带有:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('title', help='Top level arg')
sp = parser.add_subparsers(dest='cmd')
sp1 = sp.add_parser('subtitle')
sp1.add_argument('myvar', choices=['foo', 'bar'])
args = parser.parse_args()
print(args)

"title"是位置参数,需要

"cmd"是子分析器(也是一个位置,有选项(

"myvar"是subtitle解析器的位置参数,它有两个选项。

sp1.add_argument('myvar', choices=['foo', 'bar'])

语法同时适用于主解析器和子解析器。

示例调用

顶级帮助:

2126:~/mypy$ python3 stack71851214.py -h
usage: stack71851214.py [-h] title {subtitle} ...
positional arguments:
title       Top level arg
{subtitle}
optional arguments:
-h, --help  show this help message and exit

子命令帮助:

2126:~/mypy$ python3 stack71851214.py atitle subtitle -h
usage: stack71851214.py title subtitle [-h] {foo,bar}
positional arguments:
{foo,bar}
optional arguments:
-h, --help  show this help message and exit

选择正确的子命令:

2126:~/mypy$ python3 stack71851214.py atitle subtitle foo
Namespace(cmd='subtitle', myvar='foo', title='atitle')

选择错误的子命令:

2127:~/mypy$ python3 stack71851214.py atitle subtitle baz
usage: stack71851214.py title subtitle [-h] {foo,bar}
stack71851214.py title subtitle: error: argument myvar: invalid choice: 'baz' (choose from 'foo', 'bar')

编辑

我不明白你的:

parser.add_parser('title', help='Top level arg')

这引发了:

AttributeError: 'ArgumentParser' object has no attribute 'add_parser'

CCD_ 12是由CCD_ 13创建的动作的方法。它不是parser的方法。这真的是你测试的吗,还是你在没有测试的情况下为这个问题写的?

相关内容

  • 没有找到相关文章

最新更新