PSRepository регистрируется для каждого пользователя , и, к сожалению, нет общесистемной опции.
Вам необходимо зарегистрировать хранилище как пользователя, под которым вы запускаете запланированное задание. Это может быть и счет SYSTEM
.
Вы можете добавить это к запланированному заданию (зарегистрируйте репо, если оно не существует). Вы также можете сделать это как отдельный процесс, но в любом случае каждому пользователю, нуждающемуся в репо, нужно будет зарегистрировать его.
Я всегда впечатлялся pyparsing. Автор, Paul McGuire, активен на Python list/comp.lang.python и всегда был очень услужлив с любыми запросами относительно него.
Существует много инструментов парсинга Python: http://nedbatchelder.com/text/python-parsers.html
Вот подход, который работает действительно хорошо.
abc= ONETHING( ... )
xyz= ANOTHERTHING( ... )
pqr= SOMETHING( this=abc, that=123, more=(xyz,123) )
Описание. Легкий к синтаксическому анализу.
И...
Это - на самом деле Python. Сделаны несколько объявлений класса и работа. DSL является на самом деле объявлениями класса.
То, что важно, - то, что DSL просто создает объекты. При определении DSL сначала необходимо запустить с объектной модели. Позже, Вы помещаете некоторый синтаксис вокруг той объектной модели. Вы не запускаете с синтаксиса, Вы запускаете с модели.
Peter,
DSLs являются хорошей вещью, таким образом, Вы не должны защищать себя :-) Однако Вы рассмотрели внутренний DSL? Они имеют столько профессионалов по сравнению с внешним (проанализированным) DSLs, что они являются, по крайней мере, стоящими рассмотрения. Смешивание DSL с питанием родного языка действительно решает много проблем для Вас, и Python не действительно плох во внутреннем DSLs, с with
удобный оператор.
Я записал что-то вроде этого в работе, чтобы читать в определениях уведомления SNMP и автоматически генерировать классы Java и SNMP файлы MIB от этого. Используя этот небольшой DSL, я мог записать 20 строк своей спецификации, и это генерирует примерно 80 строк кода Java и 100 строк файл MIB.
Для реализации этого я на самом деле просто использовал прямую строковую обработку Python (разделение (), режущий и т.д.) для парсинга файла. Я нахожу строковые возможности Python быть достаточным для большинства моих (простых) потребностей парсинга.
Помимо библиотек, упомянутых другими, если бы я писал чему-то более сложные и необходимые надлежащие возможности парсинга, я, вероятно, использовал бы ANTLR, который поддерживает Python (и другие языки).
Да, существуют многие - слишком многие - парсинг инструментов, но ни одного в стандартной библиотеке.
Из того, что, что я видел, СГИБ и SPARK популярны. СГИБ похож на yacc, но Вы делаете все в Python, потому что Вы пишете свою грамматику в docstrings.
Лично, мне нравится понятие синтаксического анализатора combinators (взятый от функционального программирования), и я вполне как pyparsing: Вы пишете свою грамматику и действия непосредственно в Python, и легко запуститься с. Я закончил тем, что произвел свои собственные древовидные типы узлов с действиями хотя, вместо того, чтобы использовать их значение по умолчанию ParserElement
ввести.
Иначе можно также использовать существующий декларативный язык как YAML.
Для «малых языков», как тот, который вы описываете, я использую простой split, shlex (помните, что символ # определяет комментарий) или регулярные выражения.
>>> line = 'SOMETHING: !abc @123 #xyz/123'
>>> line.split()
['SOMETHING:', '!abc', '@123', '#xyz/123']
>>> import shlex
>>> list(shlex.shlex(line))
['SOMETHING', ':', '!', 'abc', '@', '123']
Ниже приводится пример, поскольку я не знаю, что именно вы ищете.
>>> import re
>>> result = re.match(r'([A-Z]*): !([a-z]*) @([0-9]*) #([a-z0-9/]*)', line)
>>> result.groups()
('SOMETHING', 'abc', '123', 'xyz/123')