2016-02-16 58 views
-1

简单但困扰我很长时间的问题。我有以下命令行的情况来处理:关于可选参数argparse的问题

program.py 
program.py foo 
program.py anyotherstring 

这些都是3种情况下,我不得不处理在命令行中,我会在if语句中使用它们作为布尔低于以下。第一个只是程序本身,第二个情况下,下面的字符串必须是'foo',第三个'anyotherstring'只是意味着除'foo'之外的任何其他字符串。我感到困惑的是argparse的文档,无法找到实现它的方法。任何人都可以提供解决方案吗?

感谢您的回答!

+0

什么迷惑你关于[documentation](https://docs.python.org/2/library/argparse.html),并且不会使用[sys.argv](https://docs.python.org/2/library/sys .html#sys.argv)是足够的无论如何呢? – jsfan

+0

没有if语句 –

+0

@StidZhang从理论上来看是非常合法的问题,但从人体工程学的角度来看它是设计不佳的命令行界面。我建议使用三个子命令'program.py base','program.py foo'和'program.py procstring ',因为它提供了更可预测的行为。 –

回答

1

你可以尝试sompething这样的:

import argparse 

parser = argparse.ArgumentParser(usage="-h for full usage") 
parser.add_argument('query', nargs='?') 
args = parser.parse_args() 
if not args.query: 
    print 'no arguments' 
elif args.query == 'foo': 
    print 'foo argument' 
else: 
    print 'random string' 
+0

正是我想要的!谢谢! –

0

而不是使用​​的,你可以尝试docopt

"""optargs - testing optional arguments 
Usage: 
    optargs 
    optargs foo 
    optargs <somestring> 
""" 

if __name__ == "__main__": 
    from docopt import docopt 
    args = docopt(__doc__) 
    print args 

人们可以寻求帮助:

$ python optargs.py -h 
optargs - testing optional arguments 
Usage: 
    optargs 
    optargs foo 
    optargs <somestring> 

然后,调用它没有任何参数:

$ python optargs.py 
{'<somestring>': None, 
'foo': False} 

然后用参数foo(你"foo"键值设为True):

$ python optargs.py foo 
{'<somestring>': None, 
'foo': True} 

,最后用任意字符串(你"<somestring>"键值设为"somstring"

$ python optargs.py somstring 
{'<somestring>': 'somstring', 
'foo': False} 
+0

谢谢回答!虽然不能在我的代码中使用,但相当有用! –