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)