2017-02-08 17 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)