2013-02-19 110 views
8

我有一个调用其插件的特定配置文件。可以将参数传递给这些插件。这个配置文件还允许我在运行时调用任意命令。覆盖默认的argparse -h行为

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

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

我很清楚,大多数人希望-h给予帮助,但它是我自己的脚本,我认为我比使用argparse开发者更了解我想要使用的标志。

+0

你确实比专家的开发者知道得更清楚,这就是为什么你必须说出你的意思,而不是相信他们正确地猜测你的想法。默认'-h --help'是有意义的,因为它很常见。告诉你什么时候你意外地引入了与默认期望值相冲突的事情是件好事。所有你需要做的是告诉argparse你打算这样做,一切都很好! – Ben 2013-02-19 06:28:41

回答

11

照照argparse documentation为ArgumentParser参数。有一个名为 的add_help,默认为True。

parser = argparse.ArgumentParser('Cool', add_help=False) 
parser.add_argument('-h', '--hi', action='store_true', dest='hi') 

这个按预期工作。

+2

Darn,我想保留'--help',但不是'-h -' – ThorSummoner 2015-07-15 23:09:06

+8

@ThorSummoner,'parser.add_argument(' - help',action ='help',help ='显示此帮助信息并退出')'除了'add_help = False'。 – 2016-06-15 07:46:09

5

有一个kwarg压制这些东西(docs)。
这样创建解析器:

parser = argparse.ArgumentParser(prog='PROG', add_help=False) 
+0

非常感谢!我将其他答案标记为第一个,因为它是第一个,而且几乎完全相同。 我一定是错过了它的文档... – 2013-02-19 06:50:53

+3

其实,我的第一,但从来没有:P – wim 2013-02-19 07:30:46

+0

哦,你可能确实是对的。最深的歉意 - 漫长的夜晚。 – 2013-02-19 11:52:00