【问题标题】:python argument parser defines variable name for list type inputpython参数解析器为列表类型输入定义变量名
【发布时间】:2018-11-13 21:36:24
【问题描述】:

我可以选择读取用户输入的列表。该列表可以具有随机长度。这是我的代码:

parser.add_argument('-at', '--addTests', metavar=('test_commands'), nargs='+')

使用 'metavar' 是为变量命名的好方法,但当 nargs 不固定时,它就不好用了。

我从这一行得到的结果是:

-at test_command [test_command ...], --addTests test_command [test_command]

我希望结果只显示一次“test_command”。

【问题讨论】:

  • 这是预期行为。如果你想让多个metavars显示在[ ]里面,那么你需要使用parser.add_argument('-at', '--addTests', metavar=('test_command', 'test_command2'), nargs='+')
  • @ResetACK 这不是我想要的。用户应该提供任意数量的输入,解析器将它们视为一个列表变量
  • 元变量只是占位符,它们不会被参数解析器存储。如果您使用我给您的内容并提供以空格分隔的命令列表,它将为您提供您正在寻找的输出。详情见我的回答。
  • 我刚刚意识到你在哪里感到困惑:你认为--addTests test_command [test_command] 意味着[test_command] 是一个参数列表。 [arg] 表示法用于可选参数。由于您使用了nargs='+',因此用户必须为-at/--addTests 选项提供至少一个参数,对于--addTests,任何其他参数都是可选的
  • 因此,在调用脚本时使用--addTests test_command test_command2args = parser.parse_args() 将给出以下解析的参数:Namespace(addTests=['test_command', 'test_command2']。然后您可以使用for command in args.addTests: print command 访问它们(或者您可以运行它们而不是打印,等等。

标签: python argparse


【解决方案1】:

你对它的含义感到困惑

--addTests test_command [test_command]

你认为这意味着[test_command] 是一个参数列表。

请注意,[arg] 表示法用于可选参数。由于您使用了nargs='+',因此用户必须为-at/--addTests 选项提供至少一个参数,对于--addTests,任何其他参数都是可选的。

因此,使用:

--addTests test_command test_command2

调用脚本时:

args = parser.parse_args()

将给出以下解析的参数:

Namespace(addTests=['test_command', 'test_command2']

然后您可以使用以下方式访问它们:

for command in args.addTests: 
    print command

或者(而不是打印)您可以运行命令等。

【讨论】:

  • 欣赏!
猜你喜欢
  • 1970-01-01
  • 2021-01-18
  • 2011-11-11
  • 1970-01-01
  • 2023-04-06
  • 2019-10-19
  • 1970-01-01
  • 2022-12-07
  • 2023-02-03
相关资源
最近更新 更多