我有一个Python程序,它维护一个联系人列表,我希望它通过命令行支持以下选项:
我需要的是:
prog [--show xyz | --list | --add xyz --number 123 --email abcd@xyz.com ]
Run Code Online (Sandbox Code Playgroud)
我尝试使用subparsers实现它,如下所示:
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
subparser1 = subparsers.add_parser('1')
subparser1.add_argument('--show', type=str, help="Shows the contact based on the given name provided as argument")
subparser1.add_argument('--list', action='store_true', help= "Prints all the contacts")
subparser2 = subparsers.add_parser('2')
subparser2.add_argument('--add', type=str, help="Adds a new contact by this name",required=True)
subparser2.add_argument('--number', type=int, help="The Phone Number for the new contact",required=True)
subparser2.add_argument('--email', type=str, help="Email address for the new contact",required=True)
Run Code Online (Sandbox Code Playgroud)
问题是我不想通过命令行提供我想要使用的subparser的编号/名称.
例如:
prog.py 1 --list
prog.py 2 --add xyz --number 1234 --email abc@xyz.com
我试图使它与mutual_exclusive_group一起工作,但不能.这种用法有办法吗?
--在命令之前你真的需要双短划线()吗?如果没有,你可以这样做:
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='command')
show_subparser = subparsers.add_parser('show')
show_subparser.add_argument('name', type=str)
list_subparser = subparsers.add_parser('list')
add_subparser = subparsers.add_parser('add')
add_subparser.add_argument('phone', type=int)
args = parser.parse_args()
# Do something with your args
print args
Run Code Online (Sandbox Code Playgroud)
这会限制您使用上面定义的参数.因为你可以做任何prog show xyz或prog add 123,但你不能这样做prog show xzy add 123.