可选参数中argparse的问题

时间:2016-02-16 22:16:14

标签: python python-2.7 argparse

简单但问题困扰我很长一段时间。我有以下命令行情况来处理:

program.py
program.py foo
program.py anyotherstring

这是我必须在命令行中处理的3种情况,我将在下面的if语句中将它们用作bool。第一个只是程序本身,第二个情况是以下字符串必须是' foo'确切地说,第三个' anyotherstring'只是表示除了“foo”之外的任何其他字符串。我对argparse的文档感到困惑,无法找到实现它的方法。任何人都可以为此提供解决方案吗?

感谢您的回答!

2 个答案:

答案 0 :(得分:1)

你可以这样尝试这样做:

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'

答案 1 :(得分:0)

您可以尝试argparse

,而不是使用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}