覆盖默认的argparse -h行为

Mat*_*zyk 16 python argparse

我有一个调用其插件的特定配置文件.可以将参数传递给这些插件.此配置文件还允许我在运行时调用任意命令.

插件使用了许多参数:其中一个是-h并且它不代表--help.现在,我的问题是我想调用我自己的Python脚本以及传递一些参数.我正在使用argparse,并希望与配置的其余部分保持一致,我创建了一个-h标志.令我惊讶的是,argparse只是给了我argparse.ArgumentError: argument -h/--help: conflicting option string(s): -h而不是自己创业.

有没有办法阻止这种情况发生?

我很清楚,大多数人都希望-h提供帮助,但这是我自己的脚本,我想我比argparse devs更清楚我想要使用标志.

dea*_*dpa 22

argparse文档中查找ArgumentParser参数.有一个名为add_help,默认为True.

parser = argparse.ArgumentParser('Cool', add_help=False)
parser.add_argument('-h', '--hi', action='store_true', dest='hi')
Run Code Online (Sandbox Code Playgroud)

这按预期工作.

  • @ThorSummoner,`parser.add_argument(' - help',action ='help',help ='显示此帮助消息并退出')`以及`add_help = False`. (14认同)
  • Darn,我想保留`--help`,但不是`-h -` (2认同)

wim*_*wim 10

有一个kwarg压制那些东西(docs).
像这样创建你的解析器:

parser = argparse.ArgumentParser(prog='PROG', add_help=False)
Run Code Online (Sandbox Code Playgroud)

  • 实际上,我的第一,但没关系:P (5认同)

Alc*_*aro 10

如果您为 ArgumentParser 提供一个 conflict_handler="resolve" 参数,则添加您自己的 -h 将覆盖现有参数,同时保持 --help 功能。

#!/usr/bin/env python3
import argparse
parse = argparse.ArgumentParser(conflict_handler="resolve")
parse.add_argument("-h", "--hello")
print(parse.parse_args())
Run Code Online (Sandbox Code Playgroud)