Python 动态命令行参数

Python dynamic command line parameter

我需要根据另一个参数指定命令行参数。 所以第一个指定的参数应该指定操作,然后是该操作的参数。

python test.py create -d what -s size -t type
python test.py delete -d what -a now
python test.py status -x something

是否有 framwork/library 可以轻松完成此操作? 到目前为止,我已经调查了 argparse,但找不到任何可以做到这一点的东西?

问题是argparse is absolutely gigantic and I guess that's why you couldn't find it easily, but if you had read through the entire documentation (or knew the terms to look for) you would find that the concept of subcommands可能会实现你想做的事情。这是一个非常快速和简单的例子:

import argparse

parser = argparse.ArgumentParser(prog='PROG')
subparsers = parser.add_subparsers(dest='command', help='sub-command help')
parser_create = subparsers.add_parser('create')
parser_create.add_argument('-d')
parser_create.add_argument('-s')
parser_create.add_argument('-t')

parser_delete = subparsers.add_parser('delete')
parser_delete.add_argument('-d')
parser_delete.add_argument('-a')

parser_status = subparsers.add_parser('status')
parser_status.add_argument('-x')

一个简单的用法:

>>> p = parser.parse_args(['create', '-d', 'what', '-s', 'size', '-t', 'type'])
>>> p.command
'create'
>>> p.d
'what'

>>> p = parser.parse_args(['delete', '-d', 'what', '-a' 'now'])
>>> p.command
'delete'
>>> p.a
'now'

当然,请查看文档以了解所有详细信息,例如使用 dest 为其赋予更有意义的名称(您可以在示例中看到它与 add_subparsers 调用一起使用)。