如何从argparse获取参数名称?

时间:2015-09-04 09:06:37

标签: python 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)

1 个答案:

答案 0 :(得分:2)

听起来更合理的方法是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)