Прошло много времени с тех пор, как я что-то сделал с optparse, но я кратко рассмотрел документы и старую программу.
" -f / -s,-e / -d являются обязательными параметрами, но -f & -s нельзя использовать вместе, и то же самое, что и с параметрами -e & -d - нельзя использовать вместе. Как я могу поставить чек на место?"
Для взаимной исключительности вы должны выполнить проверку самостоятельно, например:
parser.add_option("-e", help="e desc", dest="e_opt", action="store_true")
parser.add_option("-d", help="d desc", dest="d_opt", action="store_true")
(opts, args) = parser.parse_args()
if (parser.has_option("-e") and parser.has_option("-d")):
print "Error! Found both d and e options. You can't do that!"
sys.exit(1)
Поскольку здесь приведены варианты логических параметров, вы можете заменить строку if выше на:
if (opts.e_opt and opts.d_opt):
Подробнее см. В разделе Как optparse обрабатывает ошибки .
" Как использовать параметр -w (если используется) со значением или w / oa? "
Я никогда не искал способ иметь опцию optparse, для которой значение, ну, в общем, необязательно.AFAIK, вы должны установить опцию, чтобы иметь значения или не иметь значения.Самое близкое, что я пришел, - это указать значение по умолчанию для опции, которая должна иметь значение.Тогда эту запись не нужно указывать в командной строке.Пример кода:
parser.add_option("-w", help="warning", dest="warn", default=0)
Кроме того, с (надеюсь, полезным) предложением:
Если вы видели документы, вы увидели часть о том, что «обязательные опции» - оксюморон, верно?;-p Кроме юмора, вы можете рассмотреть возможность перепроектирования интерфейса, чтобы:
- Необходимая информация не вводилась с использованием «опции».
- Только один аргумент(или группа аргументов) вводит данные, которые могут быть взаимоисключающими.Другими словами, вместо «-e» или «-d» используйте «-e on» или «-e off».Если вы хотите что-то вроде «-v» для подробного и «-q» для тихого / подробного отключения, вы можете сохранить значения в одной переменной:
parser.add_option("-v", help="verbose on", dest="verbose", action="store_true")
parser.add_option("-q", help="verbose off", dest="verbose", action="store_false")
Этот конкретный пример заимствован (снебольшое расширение) из секции Обработка логических (флаговых) опций .Для чего-то подобного вы также можете проверить раздел Опции группировки ;Я не использовал эту функцию, поэтому не буду больше о ней говорить.