【发布时间】:2016-09-13 07:31:32
【问题描述】:
我有以下 sn-p,其中我将 argparse 与多个子解析器一起使用
parser = argparse.ArgumentParser(description = "Setup the DB",
add_help=False)
parser.add_argument('action', type = str,
choices=['drop','populate','print','create','print-metadata'],
help = "Specify an action", default = None)
subparsers = parser.add_subparsers()
drop_parser = subparsers.add_parser('drop',parents=[parser])
drop_parser.add_argument('-dataset-name',
required=True,
type = str, help = "Dataset Name",
default = None)
.....
args = parser.parse_args()
.....
当我运行它时,我得到以下信息:
python .\populatedb.py drop -dataset-name foo
populatedb.py: error: invalid choice: 'foo' (choose from 'drop', 'populate', 'print', 'create', 'print-metadata')
我想知道上面的代码哪里出错了。请注意,“action”参数是位置参数。
提前谢谢你。这是我第一次使用子解析器,我可能犯了一个明显的错误。
提前谢谢你。
问候,
兰加
【问题讨论】:
-
为什么要为子解析器添加参数?
-
感谢您的快速回复。该参数仅对动作 "drop" 有意义。对于其他选项,它没有意义,因此我将它添加到子解析器中。为了清楚起见,我省略了其他子解析器。
-
感觉你可能需要添加'action drop'。你可以运行 python populationb.py -h 来查看你需要传递的参数序列。
-
python .\populatedb.py -help 给出以下内容:用法:populatedb.py {drop,populate,print,create,print-metadata} 所以这似乎不是问题。跨度>
标签: python