gpt4 book ai didi

python - Argparse 在 `choice` 参数中间吃任意字符串

转载 作者:行者123 更新时间:2023-11-28 19:02:10 25 4
gpt4 key购买 nike

我有一个程序必须接受这样的命令行:

python wood.py 清理椅子并将椅子涂成红色

命令行如下所示,顺序如下:

  • 有限集中的至少一项操作:cleansandpaintand 是语法糖,后面会忽略
  • 一个任意的家具名称
  • 从一组有限的颜色中选择一个:bluewhitered
  • 来自有限集合的单个可选处理选项:vintagerusheco

我用下面的 Python 代码实现了它

import argparse

from pprint import pprint as pp

parser = argparse.ArgumentParser()

parser.add_argument('operations', metavar='operations', type=str, choices=['clean','sand','paint', 'and'], nargs="+")
parser.add_argument('furniture', metavar='furniture', type=str)
parser.add_argument('color', metavar='color', choices=['blue','white','red'], type=str)
parser.add_argument('handling', metavar='handling', type=str, choices=['rush','vintage','ecologic'], nargs="?")

args = parser.parse_args()

pp([op for op in args.operations if op != 'and'])
pp(args.furniture)
pp(args.color)
pp(args.handling)

它有效,但是当我在末尾添加可选的 handling 参数时,argparse 将家具(椅子)解释为一个操作。

> python wood.py clean and sand and paint chair red vintage
usage: wood.py [-h]
operations [operations ...] furniture [furniture ...] color
[handling]
wood.py: error: argument operations: invalid choice: 'chair' (choose from 'clean', 'sand', 'paint', 'and')

是什么让 argparse 认为选择参数后的任意字符串是该选择的一部分?

最佳答案

argparse 很困惑,因为处理以 h 开头,而 h 用于 help。使用其他词或使用大写的 H

    parser.add_argument('Handling', metavar='handling', help='bam')

稍后您将不得不使用 args.Handling,因为 metavar 仅更改帮助文本中的名称。

关于python - Argparse 在 `choice` 参数中间吃任意字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51558895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com