Python Option Parser: логический флаг с необязательными параметрами

Я использую optparse.OptionParser для управления аргументами для некоторых скриптов, и мне было интересно / хотелось бы иметь логические флаги (т.е. action=store_true), которые также могут принимать параметр.

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

script -c -g

означает использовать все, что вы можете из всех процессоров и графических процессоров, и

script -c 2 -g 3

это означает ограничение выполнения сценария до 2 процессоров и 3 графических процессоров.

Прочитав документацию optparse, я ничего не понял. О великие ТАК гуру! Одолжи мне свою мудрость!


person Bolster    schedule 11.05.2011    source источник


Ответы (1)


Вы можете легко реализовать это с помощью действия callback. В частности, пример 6 в документации действие обратного вызова OptionParser обсуждает переменное количество аргументов. Вот показательная цитата из этого примера:

Когда вы хотите, чтобы опция принимала переменное количество аргументов, все усложняется. В этом случае вы должны написать обратный вызов, так как optparse не предоставляет для него никаких встроенных возможностей.

person Eli Bendersky    schedule 11.05.2011
comment
Спасибо, Эли, видел это, но надеялся на что-то более чистое для углового случая «я либо логическое значение, либо аргумент». - person Bolster; 11.05.2011
comment
@Andrew: я вижу это скорее как 0 или 1 аргумент - person Eli Bendersky; 11.05.2011
comment
Насколько близок к ответу, насколько практичен. Спасибо @Эли - person Bolster; 17.05.2011