argparse中的参数

时间:2015-10-29 09:11:45

标签: python python-2.7 argparse

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

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'

谁能告诉我发生了什么?

2 个答案:

答案 0 :(得分:1)

Yu可以使用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')

答案 1 :(得分:0)

我认为你已经掩盖了长期权和空头期权之间的区别

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是&#39;两个&#39;取自您的&#39; - 两个&#39;。 &#39; - 酮&#39;在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