1

这段代码

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('target', help='Specifiy who to attack!')

magic = ['fireball', 'heal', 'microwave']
parser.add_argument('-m', '--magic', nargs='*',
                    choices=magic,
                    help=('Magic'))
parsed_arguments = parser.parse_args()

生成此帮助输出

usage: Example.py [-h]
                  [-m [{fireball,heal,microwave} [{fireball,heal,microwave} ...]]]
                  target

positional arguments:
  target                Specifiy who to attack!

optional arguments:
  -h, --help            show this help message and exit
  -m [{fireball,heal,microwave} [{fireball,heal,microwave} ...]], --magic [{fireball,heal,microwave} [{fireball,heal,microwave} ...]]
                        Magic

我认为帮助输出令人困惑,并且看起来应该最后指定目标,但是这不起作用:python example.py -m fireball trollargument -m/--magic: invalid choice: 'troll'.

我意识到语言的语法变得模棱两可,但仍然可以说,因为句子最后应该存在一个单词(目标)troll不是该-m选项的论据。

问题:

  1. 有没有办法让位置参数最后指定而不会击败 argparse?
  2. 有没有办法让 argparse 帮助输出表明确实应该首先指定目标?
4

1 回答 1

1

正如前面在评论中提到的,POSIX 系统上表示选项结束的标准方法是将参数和选项用--.

至于第二个问题:您可能必须创建自己的 HelpFormatter 来实现这一点,请参阅formatter-class。您可能能够从默认格式化程序继承并仅覆盖必要的函数来生成使用行。

于 2012-04-24T11:18:14.193 回答