Как заставить Python argparse правильно интерпретировать аргумент, соответствующий команде? - PullRequest
0 голосов
/ 03 сентября 2018

Предположим, у меня есть следующие настройки:

parser.add_argument('-v', '--version', help='Print version',  action='version', version=VERSION)
parser.add_argument('-a', '--analyse', help='Analyse command execution',  nargs='*', action='append')

Команда analyse получает n параметров для анализа. Эти параметры могут соответствовать сигнатуре команд --version и / или --help. Примеры:

  1. cli --analyse key1 --version
  2. cli --analyse key2 --help
  3. cli --analyse key1 --version key2 --help

Если я запускаю 1, 2 или 3, вместо того, чтобы перейти к выполнению analyse, argparse выполняет:

  • --version за 1;
  • --help для 2;
  • --version для 3;

Для данных сценариев, где команда начинается с --analyse, я хочу, чтобы последующие --version и --help интерпретировались как параметры analyse, а не как команды, которые соответствуют сигнатуре , Это возможно?

1 Ответ

0 голосов
/ 03 сентября 2018

Вы можете использовать argparse.Remainder (объяснение в последней маркированной точке здесь, в документе ):

import argparse

VERSION = "1.0"
parser = argparse.ArgumentParser(description='Argparse test')
parser.add_argument('-v', '--version', help='Print version',  action='version', version=VERSION)
parser.add_argument('-a', '--analyse', help='Analyse command execution',  nargs=argparse.REMAINDER, action='append')
args = parser.parse_args()

if args.analyse:
    print(args.analyse)
...