在这种情况下如何访问可选参数?

2024-04-27 23:12:00 发布

您现在位置:Python中文网/ 问答频道 /正文

在这种情况下如何访问可选参数?在

我有一个像

import argparse
parser = argparse.ArgumentParser(prog='some_prog',formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument("tableName")
parser.add_argument("--duration",help = """It is an optional parameter.""")
parser.add_argument("columns",nargs=argparse.REMAINDER)
args = parser.parse_args()
print args.duration

当我执行“python some”时_进度计划T1--duration=1278678-3275678678 column1 column2“使用命令提示符

在参数持续时间没有返回

如何访问“持续时间”?在

请给我建议解决办法。。。在

请让我知道,如果我使用的方式纳格斯是错误的?在


Tags: importaddparser参数formatterargparse情况args
2条回答

您应该将可选参数放在第一位:

python some_prog.py  duration=1278678-3275678678 T1 column1 column2

对我来说很好。在

T1将分配给tableName,而“column1 column2”将分配给columns

这是因为在获得位置参数tableName之后,它将把其余部分作为argparse.REMAINDER的一部分。在

我记得在另一个问题中看到了这个,但我找不到。在

要使您的tableName作为第一个参数,可以使用^{}而不是{},并删除{}的定义:

^{pr2}$

这将提供:

T1
1234
['column1', 'column2']

生成的命名空间是:

Namespace(columns=[' duration=1278678-3275678678', 'column1', 'column2'], duration=None, tableName='T1')

columns抓住了所有东西,REMAINDER。在

如果我给它:" duration=1278678-3275678678 T1 column1 column2",我得到:

Namespace(columns=[' duration=1278678-3275678678', 'column1', 'column2'], duration=None, tableName='T1')

让我们把nargs=REMAINDER改为nargs='*'。现在第一个案子

error: unrecognized arguments: column1 column2

问题是如何使用可以取零或更多值的位置。请看下面的讨论:https://stackoverflow.com/a/18645430/901925'Python argparse: Combine optional parameters with nargs=argparse.REMAINDER.

简而言之,columns要么消耗T1之后的所有内容,要么消耗T1和{}之间的[]。在

将其更改为nargs='+',它就可以工作了。为什么?因为它必须匹配一个或多个字符串。现在它不适合这个差距。在

这个问题已经在其他SO线程和Python bug(混合使用选项和位置)中提出

但与此同时,你的选择是:

  • 在位置之前加上 duration等选项
  • 使用“+”代替“*”或“余数”
  • 通过几个步骤解析输入。在

相关问题 更多 >