2012-08-28 83 views
168

假設我有以下argparse片段:Argparse:在'--help'中包含默認值的方法?

diags.cmdln_parser.add_argument('--scan-time', 
        action = 'store', 
        nargs = '?', 
        type = int, 
        default = 5, 
        help = "Wait SCAN-TIME seconds between status checks.") 

目前,--help返回:

usage: connection_check.py [-h] 
          [--version] [--scan-time [SCAN_TIME]] 

      Test the reliability/uptime of a connection. 



optional arguments: 
-h, --help   show this help message and exit 
--version    show program's version number and exit 
--scan-time [SCAN_TIME] 
        Wait SCAN-TIME seconds between status checks. 

我寧願是這樣的:

--scan-time [SCAN_TIME] 
        Wait SCAN-TIME seconds between status checks. 
        (Default = 5) 

在幫助格式化代碼偷看顯示有限的選擇。有沒有一種聰明的方法可以讓argparse以類似的方式打印'--scan-time'的默認值,或者我應該只對幫助格式化程序進行分類?

+2

您可能感興趣的[docopt(https://github.com/docopt/docopt)。我從來沒有再看過argparse。 –

+5

@PauloScardine - 建立在語言之上對於argparse來說是一大好處。 – jordanm

+0

@PauloScardine:將一個非標準的庫引入我當前的項目確實會很痛苦,但我確定喜歡docopt輸出的外觀。謝謝你的提示! –

回答

251

使用argparse.ArgumentDefaultsHelpFormatter formatter

parser = argparse.ArgumentParser(
    # ... other options ... 
    formatter_class=argparse.ArgumentDefaultsHelpFormatter) 

引述文件:

其他格式化類可用,ArgumentDefaultsHelpFormatter,將新增大約每個參數的默認值的信息。

注意,這僅適用於具有幫助文本定義的參數;有用於一個參數沒有help值,所以注意到將信息添加到

爲您掃描時間選項的準確輸出則變爲:

--scan-time [SCAN_TIME] 
         Wait SCAN-TIME seconds between status checks. 
         (default: 5) 
+5

我可以控制只有顯式爲'default ='的參數顯示默認值嗎?因爲我不喜歡'默認:無'文本。 – ziyuang

+8

您可以將'default'設置爲'SUPPRESS':'default = argparse.SUPPRESS'。注意,在這種情況下,沒有屬性將被添加到該命名空間的結果,如果省略這樣的說法,見[了'default'文檔】(http://docs.python.org/2/library/argparse.html#default)。 –

+1

請注意,您需要爲每個創建的子分析器指定此值。 – KomodoDave

117

添加'%(default)'的幫助參數來控制顯示的內容。

parser.add_argument("--type", default="toto", choices=["toto","titi"], 
           help = "type (default: %(default)s)") 
+4

我喜歡這個選項,因爲我已經使用了format_class = argparse.RawTestHelpFormatter,並且感覺不像OOP放屁。 – mqsoh

+11

不要忘記在格式化字符串中包含變量「type」 - 例如字符串的'%(默認)s',或數字的'%(默認)d'。 – strongMA

-5

Python中沒有默認的Optparser。
但是,您可以使用follwing -

# show help as default 
if len(sys.argv) == 1: 
    os.system("python " + sys.argv[0] + " -h") 
    exit() 

這將與-h選項,運行和退出相同的腳本。
請注意 - 您將需要導入OS + SYS模塊才能使用此選項。