我正在尝试向代码中添加参数,我可以使以下代码工作:
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
的方法。这真的是你测试的吗,还是你在没有测试的情况下为这个问题写的?