可选参数中argparse的问题

2024-10-04 05:28:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

program.py
program.py foo
program.py anyotherstring

这是我必须在命令行中处理的3种情况,我将在下面的if语句中使用它们作为bool。第一种只是程序本身,第二种情况下面的字符串必须是'foo',第三种情况'anyotherstring'只表示除'foo'以外的任何其他字符串。我对argparse的文档感到困惑,无法找到实现它的方法。有人能给我一个解决办法吗?你知道吗

谢谢回答!你知道吗


Tags: 方法字符串命令行文档py程序iffoo
2条回答

您可以尝试使用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}

你可以这样做:

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'

相关问题 更多 >