Python argparse allow combined flags

天涯浪子 提交于 2020-12-24 12:36:05

问题


Is it possible for argparse to parse combined flags like this:

app.py -bcda something

In this case, I would want something to be set to -a and the rest would be stored True. Basically:

app.py -b -c -d -a something

I know most programs allow this, e.g. grep -rEw, but how hard would it be to do this with with argparse?

Edit: The answer is that it comes out-of-the-box. I didn't even bother to try it.


回答1:


You can achieve this with store_const:

parser = argparse.ArgumentParser()
parser.add_argument('-a', action='store_const', const=True, default=False)
parser.add_argument('-b', action='store_const', const=True, default=False)
args = parser.parse_args()

Then you can call this from the command line either with -a -b or with -ab (or -a, or -b).

Edit: and if you want one of the flags to take an argument, you need to pass it as the last item of the chain. So if a takes an argument, you'd need to do -bcda something




回答2:


Here's what I found with a little Googling:

Several short options can be joined together, using only a single - prefix, as long as only the last option (or none of them) requires a value:

>>> parser = argparse.ArgumentParser(prog='PROG')
>>> parser.add_argument('-x', action='store_true')
>>> parser.add_argument('-y', action='store_true')
>>> parser.add_argument('-z')
>>> parser.parse_args('-xyzZ'.split())
Namespace(x=True, y=True, z='Z')

http://docs.python.org/dev/library/argparse.html#option-value-syntax



来源:https://stackoverflow.com/questions/21286203/python-argparse-allow-combined-flags

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!