可选参数中 argparse 的问题

Problems on argparse in optional arguments

简单但困扰我很久的问题。我有以下命令行情况需要处理:

program.py
program.py foo
program.py anyotherstring

这些是我必须在命令行中处理的 3 种情况,我将在下面的 if 语句中将它们用作 bool。第一种只是程序本身,第二种情况后面的字符串必须是 'foo',第三种 'anyotherstring' 只是指除 'foo' 之外的任何其他字符串。我对 argparse 的文档感到困惑,无法找到实现它的方法。谁能给出解决方案?

感谢您的回答!

你可以这样尝试:

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'

您可以尝试 docopt:

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