2017-02-08 41 views
0

我有一個說法解析器像這樣:如何抓住從`argparse`所有默認設置?

def args_parser(): 
    parser = argparse.ArgumentParser(description='myparser') 
    parser.add_argument('--k', type=int, default=100, help = 'numbers') 
    return parser 

現在,所有我想要做的只是得到默認的映射,就像這樣:

args = args_parser() 

然後我想args['k']返回100,因爲這是默認的。我如何做到這一點?

+0

'ARGS = args_parser()。 parse_args()'?你必須做'args.k'得到'100',但在其他方面... – jonrsharpe

+0

'parser.parse_args()。k' – metatoaster

回答

0

你需要調用.parse_args()函數解析器對象上,以實際返回解析的命令行參數並分配給您的.add_argument()語句中定義的屬性。因此,像:

parser = args_parser() 
args = parser.parse_args() 
k_value = args.k 

由.parse_args(返回的「ARGS」變量)將具有相應的名稱,你通過.add_argument()調用分配給它分配的屬性,但如果沒有默認和用戶不提供給定的參數,其值將是'無'。

1

這應該爲你做的。我想你應該能夠在ArgumentParser Python文檔發現這個問題,以及:

vars(args.parse_args())['k'] 
0
def args_parser(): 
    parser = argparse.ArgumentParser(description='myparser') 
    parser.add_argument('--k', type=int, default=100, help = 'numbers') 
    return parser 

parser = args_parser(): 
args = parser.parse_args([])  
print(args)  # see all values 
print(args.k) # see just the k attribute 

parse_args()解析sys.argv如在命令行提供。 parse_args([])解析一個空列表,同樣,如果你已經調用的腳本不帶參數。我經常使用這樣的調用來測試解析器設置。

隨着你的論點定義[]工作正常,並顯示了默認k值。有了其他定義,[]可能會產生錯誤。例如,如果您包括

parser.add_argument('infile', help='positional file name') 

現在需要一個字符串。對於一個簡單的位置,就像不需要默認值,也沒有意義。但其他參數組合可以使用默認值。

我可以告訴你如何訪問在add_argument命令中設置的default,但涉及到一些未公開的功能。另外還有幾種定義默認值的方法,所以主題會變得複雜。

反正只是一個空列表運行parse_args往往是不夠的。

你也可以把它顯示有少量的添加在幫助熱線默認:

parser.add_argument('--k', type=int, default=100, help = 'numbers, %(default)s') 

例如,在一個交互式ipython會話:

In [73]: parser=argparse.ArgumentParser() 
In [74]: parser.add_argument('--k', type=int, default=100, help = 'numbers, %(default)s') 
Out[74]: _StoreAction(option_strings=['--k'], dest='k', nargs=None, 
    const=None, default=100, type=<class 'int'>, choices=None, 
    help='numbers, %(default)s', metavar=None) 

In [75]: parser.print_help() 
usage: ipython3 [-h] [--k K] 

optional arguments: 
    -h, --help show this help message and exit 
    --k K  numbers, 100 

In [76]: parser.parse_args([]) # displays args 
Out[76]: Namespace(k=100) 
In [78]: parser.parse_args(['--k','200']) 
Out[78]: Namespace(k=200)