2017-08-08 123 views
3

我在想爲什麼Python的​​中可選參數和位置參數的大小寫轉換之間的不一致。將'--optional-argument'添加到解析器將被命名爲'optional_argument',但位置參數將保留positional-argumentPython argparse可選參數和位置參數之間的大小寫不一致

import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument('positional-argument') 
parser.add_argument('--optional-argument') 
arg_dict = vars(parser.parse_args('Positional --optional-argument Optional'.split())) 
print(arg_dict) 
# {'positional-argument': 'Positional', 'optional_argument': 'Optional'} 

我可以改變我的位置參數添加到解析器的方式,但矛盾將繼續(雖然在不同的地方)

parser.add_argument('positional_argument') 
parser.add_argument('--optional-argument') 
# {'positional_argument': 'Positional', 'optional_argument': 'Optional'} 
+0

破折號替換允許您使用'args.optional_argument'(使用有效的Python屬性名稱)訪問該值。你通常在選擇定位'dest'時有更多的自由。如果你使用'metavar',你的用戶甚至不會在'help'中看到'dest'。 – hpaulj

回答

3

看起來這是一個已知的問題。 https://bugs.python.org/issue15125

建議的解決方法:

  • 如果使用'positional-argument',您可以使用getattr()命名空間提取它。

  • 如果您使用'positional_argument',您可以通過metavar='positional-argument'更改幫助輸出中的顯示方式。