Python 重写默认argparse-h行为
我有一个特定的配置文件,它调用它的插件。可以将参数传递给这些插件。这个配置文件还允许我在运行时调用任意命令 插件使用了许多参数:其中一个参数是Python 重写默认argparse-h行为,python,argparse,Python,Argparse,我有一个特定的配置文件,它调用它的插件。可以将参数传递给这些插件。这个配置文件还允许我在运行时调用任意命令 插件使用了许多参数:其中一个参数是-h,它不代表--help。现在,我的问题是,我想调用我自己的Python脚本,并向它传递一些参数。我正在使用argparse,为了与配置的其余部分保持一致,我创建了一个-h标志。令我惊讶的是,argparse只给了我argparse.ArgumentError:argument-h/--help:冲突的选项字符串:-h,而不关心自己的事情 有没有办法阻止
-h
,它不代表--help
。现在,我的问题是,我想调用我自己的Python脚本,并向它传递一些参数。我正在使用argparse,为了与配置的其余部分保持一致,我创建了一个-h
标志。令我惊讶的是,argparse只给了我argparse.ArgumentError:argument-h/--help:冲突的选项字符串:-h
,而不关心自己的事情
有没有办法阻止这种情况发生
我很清楚,大多数人都希望
-h
能提供帮助,但这是我自己的脚本,我想我比argparse devs更清楚我想用一个标志来做什么。有一个kwarg来抑制那些东西()。按如下方式创建解析器:
parser = argparse.ArgumentParser(prog='PROG', add_help=False)
在中查找ArgumentParser参数。有一个叫
添加默认为True的帮助
parser = argparse.ArgumentParser('Cool', add_help=False)
parser.add_argument('-h', '--hi', action='store_true', dest='hi')
这与预期一样有效。如果您给ArgumentParser一个conflict\u 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())
你确实比argparse开发者更清楚,这正是为什么你必须说出你的意思,而不仅仅是相信他们能正确地猜测你的想法。Default
-h--help
之所以有意义,是因为它非常常见。告诉您何时意外引入了与常见默认预期的冲突是一件好事。您需要做的就是告诉argparse您打算这么做,一切都很好!非常感谢你!我会将另一个答案标记为第一个答案,并且几乎完全相同。我一定是在文件里漏掉了……哦,你可能是对的。最深的歉意-漫漫长夜。该死,我想保持--help
,但不是-h-
@ThorCaller,解析器。除了添加帮助=False
之外,还要添加参数('--help',action='help',help='show this help message and exit')
。这是正确的答案,或者更确切地说,是在大多数用例中有用的答案。