python optparse обрабатывает следующую опцию как аргумент опции для текущей, если она отсутствует

Я использую optparse для разбора параметров команды для моего скрипта. У меня есть опции -f и -c, которые оба требуют аргумента опции. Но если он отсутствует, он будет рассматривать следующий параметр как аргумент параметра для текущего параметра. например

./myScript -f -c

это будет рассматривать "-c" как аргумент опции для "-f" вместо того, чтобы жаловаться на отсутствие аргумента опции для "-f" и "-c". Для других нормальных сценариев это работает отлично.

Спасибо за любую информацию и решения!

обновление: решение, используя argparse, этой проблемы можно избежать. он выходит с ошибкой, сообщая об отсутствии аргумента для опций.

1 ответ

Решение

optparse не рекомендуется использовать Python 2.7, поэтому вы должны использовать argparse модуль, который имеет такое поведение, встроенное в:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-f')
parser.add_argument('-c')

parser.parse_args(['-f', 'f_val', '-c', 'c_val'])   #works as expected
parser.parse_args(['-f', '-c'])                     #errors as expected

Если вы остались с Python < 2,7 и optparse модуль, вы можете легко сделать это с пользовательской проверкой после этапа анализа:

parser = OptionParser('usage')
parser.add_option("-f", "--ff", dest="f_value")
parser.add_option("-c", "--cc", dest="c_value")

(options, args) = parser.parse_args()

if options.f_value == '-c':
    print 'error: -f requires an argument'
    exit(1)
Другие вопросы по тегам