Python argparse中的参数
我试图传递2个参数,条件是如果第一个参数不为null,那么它应该存储第二个参数。代码如下所示Python argparse中的参数,python,python-2.7,argparse,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 但我得
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'
C:\app\Tools\exam\Python25>python nwe.py-one abc
回溯(最近一次呼叫最后一次):
文件“nwe.py”,第8行,在
如果args.one!="":
AttributeError:“命名空间”对象没有属性“一”
有人能告诉我到底发生了什么吗你可以使用
default
和parser
:
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')
我认为你掩盖了多头期权和空头期权之间的区别
add_参数
创建动作对象。您的示例生成(如交互式会话中所示):
请注意,dest
是'two',取自您的'--two'-“一”在选项\u字符串列表中,但不设置dest
。此语句创建一个操作,而不是两个
测试时,最好打印args
对象。这让您更好地了解解析器产生了什么。不要直接测试那些甚至可能不存在的属性
'prog.py-one-value'
和'prog.py-two-value'
都将生成一个
Namespace(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
请检查新答案。它说的太长了,所以我添加了新的答案。stackoverflow是个新手,请记住@Kobi KYou定义了1个参数,而不是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