2016-10-14 39 views
1

我有以下命令行工具:定義與argparse參數的順序 - Python的

import argparse 

parser = argparse.ArgumentParser(description = "A cool application.") 
parser.add_argument('positional') 
parser.add_argument('--optional1') 
parser.add_argument('--optional2') 

args = parser.parse_args() 
print args.positionals 

python args.py輸出是:

usage: args.py [-h] [--optional1 OPTIONAL1] [--optional2 OPTIONAL2] 
       positional 

但是我想有:

usage: args.py [-h] positional [--optional1 OPTIONAL1] [--optional2 OPTIONAL2] 

我怎麼能重新排序?

+0

你還可以用你想要的輸出運行它嗎?閱讀API說它的順序與可選和位置參數無關。 https://docs.python.org/3/howto/argparse.html#combining-positional-and-optional-arguments – MooingRawr

回答

1

你要麼必須提供自己的幫助格式化,或者指定一個明確的使用字符串:

parser = argparse.ArgumentParser(
    description="A cool application.", 
    usage="args.py [-h] positional [--optional1 OPTIONAL1] [--optional2 OPTIONAL2]") 

在幫助消息的順序,但是,並不影響順序,您可以指定參數。​​從左到右處理任何定義的選項,然後從左到右分配任何剩餘的參數給位置參數。選項和位置參數大部分可以混合使用。

1

關於彼此,positionals的順序是固定的 - 這就是爲什麼他們被稱爲。但optionals(所標記的參數)可以以任何順序出現,並且通常可與postionals穿插(那裏允許可變長度nargs時有一些實際的約束。)

對於usage線,​​移動positionals到端的名單,但這只是一個顯示約定。

有關於更改顯示順序的SO問題,但我認爲通常不需要。如果您必須更改顯示順序,則使用自定義usage參數是最簡單的選項。編程方式要求繼承幫助格式化程序並修改關鍵方法。