Используя Python optparse.py, там способ удаться, было ли определенное значение опции установлено из командной строки или из значения по умолчанию.
Идеально я хотел бы иметь dict точно так же, как значения по умолчанию, но содержащий опции, на самом деле предоставленные из командной строки
Я знаю, что Вы могли сравнить значение для каждой опции со значениями по умолчанию, но это не будет различать, значение было передано через командную строку, которая соответствовала значению по умолчанию.
Спасибо!
Править
Извините моя исходная формулировка не была очень четкой.
У меня есть большое количество сценариев, которые называют от пакетных файлов. Для целей аудита я хотел бы сообщить относительно опций, передаваемых, и передаются ли они из командной строки, значения по умолчанию или некоторых других средств, к файлу журнала.
Используя значения по умолчанию можно сказать, соответствует ли опция значению по умолчанию, но это все еще не говорит Вам, была ли она на самом деле предоставлена из командной строки. Это может быть релевантно: если опция будет передана из командной строки и согласится со значением по умолчанию, если Вы затем измените значение по умолчанию в коде, то сценарий все еще получит то же значение.
Мне чувствовало бы себя довольно естественным иметь эквивалент значениям по умолчанию, содержа значения, на самом деле предоставленные.
Сделать бетон вопроса, в этом примере:
>>> sys.argv = ['myscript.py','-a','xxx']
>>> import optparse
>>> parser = optparse.OptionParser()
>>> parser.add_option('-a', default = 'xxx')
>>> parser.add_option('-b', default = 'yyy')
Как я знаю, что опция a была передана из командной строки. Единственный путь состоит в том, чтобы проанализировать командную строку вручную?
(Я знаю, что это - довольно мелкая деталь, но я думал, что это будет стоить спросить в случае, если я пропускаю smthing на optparse),
Еще раз спасибо
Не зная, что ваш код, невозможно дать лучший ответ, но ...
просто не передавайте значения по умолчанию синтаксическому анализатору и проверяйте наличие Нет
значений. Значение None
является значением по умолчанию для optparse
lib, поэтому вы можете получить собственное значение по умолчанию и действовать как обычно;
extend optparse
для его специализации.
Я не знаю вашу программу, но обычно это не очень хорошее поведение при изменении дизайна, когда конфигурация такая же.