在Python Argsparser中为子解析器添加没有名称的单一参数

1 投票
1 回答
628 浏览
提问于 2025-04-18 13:58

有很多关于如何做复杂事情的详细文档,但我找不到一些非常简单的内容。
我有一个脚本,里面有一些操作:

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')

撰写回答