【发布时间】:2019-04-25 08:17:26
【问题描述】:
我正在编写一个 python 程序,我希望有一个以特定方式运行的命令行界面
命令行界面应该接受以下调用:
my_prog test.svg foo
my_prog --font=Sans test.svg foo
(它会生成一个带有foo字样的svg,以指定或默认字体书写)
现在我希望这个命令也能接受下面的调用...
my_prog --list-fonts
这将列出--font 的所有有效选项,由系统上可用的字体确定。
我正在使用argparse,我有这样的东西:
parser = argparse.ArgumentParser()
parser.add_argument('output_file')
parser.add_argument('text')
parser.add_argument('--font', help='list options with --list-fonts')
parser.add_argument('--list-fonts', action='store_true')
args = parser.parse_args()
但是,这不会使 --list-fonts 选项的行为符合我的意愿,因为仍然需要两个位置参数。
我也尝试过使用子解析器,但这些仍然需要解决方法以防止每次都需要其他选项。
如何使用 argparse 获得所需的行为。
【问题讨论】:
-
如果你有一个
nargs='*'的位置,它应该接受所有的替代方案。解析后,您可以检查位置是否具有正确数量的字符串,并在必要时引发错误(或忽略不需要的值)。否则我认为你必须走自定义的Action路线。
标签: python-3.x argparse