Argparse位置参数或默认值

海雀

我想运行cli like myscript A B C,它应该返回Namespace(my_attribute = ['A','B','C'])或myscript当未指定参数时返回默认值,即Namespace(my_attribute = ['A', 'B','C','D'])

这可能吗?

  • nargs ='+'至少需要1个命令行参数或引发错误
  • nargs ='?' 需要1或0个参数
  • nargs ='*'似乎应该起作用,但是不会产生在add_argument()中指定的默认列表

我现在有以下内容。

parser.add_argument(
    dest='my_attribute',
    choices=('A', 'B', 'C', 'D'),
    nargs='*',
    default=['A', 'B', 'C', 'D'],
)

**编辑

例如:这可行,但是我必须-attr在A B之前指定。我不想使用-attr

parser.add_argument(
    '-attr',
    dest='my_attribute',
    choices=['A','B', 'C', 'D'],
    nargs='+',
    default=['A','B', 'C', 'D'],
hpaulj

您收到什么错误消息?

当我尝试您的代码时,我得到:

错误:参数my_attribute:无效选择:['A','B','C','D'](从“ A”,“ B”,“ C”,“ D”中选择)

它正在尝试使用默认值,但它正在根据您的选择测试整个过程。您希望它要么根本不测试默认值,要么单独测试列表中的每个元素。

如果没有choices,则*位置信息确实有效。

正如我在第一个答案中指出的那样,*职位需要一些特殊的处理。一个*可选的没有。

要使用kludge default='A'这将通过选择测试。结果名称空间将为Namespace(my_attribute='A')这不是预期的列表,但是解析后很容易测试和替换。

parser = argparse.ArgumentParser()
parser.add_argument(
    dest='my_attribute',
    choices=('A', 'B', 'C', 'D'),
    nargs='*',
    default='A',
)
args = parser.parse_args()

if args.my_attribute=='A':
    args.my_attribute=['A', 'B', 'C', 'D']
print args

有关此主题的错误报告(已有多年历史):

http://bugs.python.org/issue9625'argparse:使用选项时变量nargs的默认值有问题'

有一个建议的补丁程序将对列表默认值的每个项目执行“选择”测试。这样就argparse可以很好地运行您的示例。但是有很多积压的argparse补丁程序,因此我不希望很快见到此修复程序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Argparse位置参数或默认值

来自分类Dev

如何将Argparse参数的默认值设置为位置参数的值?

来自分类Dev

argparse:nargs ='*'的默认值?

来自分类Dev

Python argparse忽略默认值

来自分类Dev

参数中的默认值

来自分类Dev

可选参数的默认值

来自分类Dev

Python argparse-如果没有给出参数,则互斥组具有默认值

来自分类Dev

提供默认值时,计数类型参数的 Argparse 类型错误

来自分类Dev

使用位置参数之一的值作为可选参数之一的默认值

来自分类Dev

设置关键字参数的默认值时,可以引用位置参数吗?

来自分类Dev

微调框默认值/更改位置

来自分类Dev

如何为功能类型的可选位置参数设置默认值?

来自分类Dev

argparse:包括默认值并在'--help'中键入

来自分类Dev

为什么我的argparse不显示默认值?

来自分类Dev

MVC可选参数默认值

来自分类Dev

bash getopts多个参数或默认值

来自分类Dev

设置sympy lambdify参数的默认值

来自分类Dev

Scala宏:获取参数默认值

来自分类Dev

const参考参数的默认值

来自分类Dev

参数的默认值基于其他

来自分类Dev

函数参数Python的多个默认值

来自分类Dev

Scala中类型参数的默认值

来自分类Dev

Dart可选参数默认值?

来自分类Dev

保留嵌套命名参数的默认值

来自分类Dev

用作具有默认值的参数

来自分类Dev

Laravel中route参数的默认值

来自分类Dev

设置枚举参数的默认值

来自分类Dev

修改函数参数的默认值

来自分类Dev

用于函数的可选参数的默认值