Попробовал библиотеку @asolovyov для разбора аргументов командной строки в
Python, которая называется opster (вот доки, исходники). Это ещё
одна библиотека, решающая те же задачи, что и стандартные getopt, optparse и
argparse.
Впечатления приятные. Кода действительно надо писать меньше. Самая главная идея — отделить код обработки опций от кода функции, которой они нужны как аргументы. То есть если у меня есть функция:
def test(arg1, arg2, include=[], exclude=[], verbose=False):
'''A test command.'''
...
то для превращения её в утилиту командной строки мне не надо её менять, только
снабдить декоратором @command или обернуть её в этот декоратор непосредственно
в main:
@command(usage='%name [hIXv] arg1 arg2',
options=[
('I', 'include', [], 'include names'),
('X', 'exclude', [], 'exclude names'),
('v', 'verbose', False, 'be more verbose')])
def test(arg1, arg2, include=[], exclude=[], verbose=False):
'''A test command.'''
...
Получилось 5 строк. Этот же пример на getopt занимает где-то 30 строк.
Затем можно вызвать функцию, передав аргументы командной строки:
if __name__ == '__main__':
test(argv=sys.argv[1:])
либо вызывать как обычную функцию:
test('foo', 'bar', include=['path1', 'path2'], verbose=True)
При этом у программы появится автоматическая справка по -h:
$ ./test -h
test [hIXv] arg1 arg2
A test command.
options:
-I --include include names
-X --exclude exclude names
-v --verbose be more verbose
-h --help show help
Ещё несколько слов об особенностях. Есть поддержка подкоманд (в духе Mercurial,
Git). Нет обязательных опций, но это даже хорошо. Какой смысл в обязательных
опциях? Есть поддержка задания одной опции несколько раз (значений типа
[str]), а также значений bool, str, int и интересных значений str ->
a, то есть функций по преобразованию значения во что угодно.
Из минусов можно назвать не всегда корректную работу с Unicode, stack trace при указании неверных значений опций вместо красивых сообщений об ошибках, невозможность задать только короткое имя опции и ещё несколько мелочей.
Библиотека opster определённо заслуживает внимания.
См. также:
Here you can find markdown vim syntax file made by Ben Williams. Put it to the ~/vim/syntax/ folder.
To add syntax...
“This image was taken on September 15, 2006 and received on Earth September 20, 2006. The camera was pointing toward Saturn at approximately 2M...
Well, it looks like GCC 4.3.2 does not comply to C99 specification. It clearly states that:
6.8.6.4.1 ... A...