如何从 argparse 获取参数名称?

How can I get an argument name from argparse?

这是我的命令行脚本

import argparse


parser = argparse.ArgumentParser('My command line app')

parser.add_argument('--start', type=start, metavar='HOST', dest='result', nargs='*', default='all', help='Start hosts')
parser.add_argument('--stop', type=stop, metavar='HOST', dest='result', nargs='*', default='all', help='Stop hosts')
parser.add_argument('--status', type=status, metavar='HOST', dest='result', nargs='*', default='all', help='Show hosts status')

args = parser.parse_args()

目前我为每个选项定义了一个函数,但我想为这三个选项将它们包装在一个函数中。然后我需要知道使用了哪个参数。 argparse 可以吗?

解决方案

最后我是这样走的:

import argparse


def wrapper(command, hosts):
    pass


parser = argparse.ArgumentParser('My script')
parser.add_argument('action', choices=['start', 'stop', 'status'], help='Action')
parser.add_argument('hosts', metavar='HOST', nargs='*', default='all')

args = parser.parse_args()

wrapper(args.action, args.hosts)

听起来更明智的处理方法是 choices 参数:

commands = {'start': start, 'stop': stop, 'status': status}

parser = argparse.ArgumentParser('My command line app')
parser.add_argument('command', choices=commands.keys())
parser.add_argument('hosts', nargs='*', default=[])
args = parser.parse_args()

commands[args.command](*args.hosts)