在Python Argsparser中为子解析器添加没有名称的单一参数
有很多关于如何做复杂事情的详细文档,但我找不到一些非常简单的内容。
我有一个脚本,里面有一些操作:
subparsers = parser.add_subparsers(dest='action', help='do this')
parser_act_one = subparsers.add_parser('actone')
parser_act_one.add_argument('--function', type=str)
parser_act_two = subparsers.add_parser('acttwo')
parser_act_two.add_argument('--function', type=str)
因为这些操作每个只需要一个参数,所以我想做一个类似于 parser_enmod.add_argument()
的操作,但不想给它起名字,这样似乎不行。
编辑:
为了更清楚,我想运行的是:
python my_script.py actone 'special_name'
而不是:
python my_script.py actone --function='special_name'
1 个回答
2
你仍然需要给你的位置参数起个名字,但你只需要不在它们前面加上--
这个前缀,这样它们就变成位置参数了:
subparsers = parser.add_subparsers(dest='action', help='do this')
parser_act_one = subparsers.add_parser('actone')
parser_act_one.add_argument('function', type=str)
parser_act_two = subparsers.add_parser('acttwo')
parser_act_two.add_argument('function', type=str)
示例:
>>> import argparse
>>> parser = argparse.ArgumentParser(description='Demo')
>>> subparsers = parser.add_subparsers(dest='action', help='do this')
>>> parser_act_one = subparsers.add_parser('actone')
>>> parser_act_one.add_argument('function', type=str)
_StoreAction(option_strings=[], dest='function', nargs=None, const=None, default=None, type=<type 'str'>, choices=None, help=None, metavar=None)
>>> parser_act_two = subparsers.add_parser('acttwo')
>>> parser_act_two.add_argument('function', type=str)
_StoreAction(option_strings=[], dest='function', nargs=None, const=None, default=None, type=<type 'str'>, choices=None, help=None, metavar=None)
>>> parser.print_help()
usage: [-h] {actone,acttwo} ...
Demo
positional arguments:
{actone,acttwo} do this
optional arguments:
-h, --help show this help message and exit
>>> parser_act_one.print_help()
usage: actone [-h] function
positional arguments:
function
optional arguments:
-h, --help show this help message and exit
>>> parser.parse_args(['actone', 'some_filename.txt'])
Namespace(action='actone', function='some_filename.txt')