2015-10-29 116 views
1

我想传递2个参数,条件是如果第一个参数不是null,那么它应该存储第二个参数。代码如下所示argparse的参数

import argparse 
store= "" 
parser = argparse.ArgumentParser() 
parser.add_argument('-one','--two', required = True) 

args = parser.parse_args() 

if args.one != "": 
    store = args.two 
    print store 

但我得到以下错误:

C:\app\Tools\exam\Python25>python nwe.py -one abc 
Traceback (most recent call last): 
    File "nwe.py", line 8, in <module> 
    if args.one != "": 
AttributeError: 'Namespace' object has no attribute 'one' 

谁能告诉我什么是正好发生

+0

后,您已经定义了1周的说法,而不是2 – hpaulj

回答

1

郁可使用defaultparser

import argparse 
store = "" 
parser = argparse.ArgumentParser() 
parser.add_argument('--one', help='this is one help', default=None) 
parser.add_argument('--two', help='this is two help') 

sys_args = vars(parser.parse_args()) 

print sys_args.get('one') 
if sys_args.get('one'): 
    print sys_args.get('two') 
+0

请检查新的答案。它说太久了,所以我添加了新的答案。很新的到stackoverflow,请与我联系@Kobi K – Ashok

0

我想你h AVE掩盖了长选项和短选项

https://docs.python.org/3/library/argparse.html#dest

add_argument创建一个Action对象之间的区别。你的榜样产生(如在交互式会话):

In [32]: parser.add_argument('-one','--two', required = True) 
Out[32]: _StoreAction(option_strings=['-one', '--two'], dest='two', nargs=None, 
    const=None, default=None, type=None, choices=None, help=None, metavar=None) 

注意,dest是“两节”,从“--two”拍摄。 '-one'在option_strings的列表中,但未设置dest。这个声明创建了一个Action,而不是两个。

测试时,打印args对象是一个好主意。这可以让您更好地了解解析器生成的内容。不要直接测试可能不存在的属性。

'prog.py -one value''prog.py --two value'都将产生一个args看起来像

Namespace(two='value') 

args.two == 'value' 

如果同时使用,它是将出现在命名空间中的最后一个值(不分次序)

如果您改为定义2个参数:

parser.add_argument('-o','--one') 
parser.add_argument('-t','--two') 

然后,您可以测试/使用两个解析

if args.one is None: # the default default is None, not "" 
    store = args.two 
    etc 
+0

谢谢!帮助了很多! – Ashok