2013-02-19 109 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