Разбор dhcpd.conf с помощью textXPython

Программы на Python
Ответить
Anonymous
 Разбор dhcpd.conf с помощью textX

Сообщение Anonymous »

Я использую https://github.com/igordejanovic/textX для анализа файла dhcpd.conf (нет, https://pypi.org/project/iscconf/ у меня не работает, это происходит сбой в моем файле dhcpd.conf), в частности, извлекайте хосты с фиксированными адресами.

Записи такие:

Код: Выделить всё

    host example1 {
option host-name "example1";
ddns-hostname "example1";
fixed-address 192.168.1.181;
}

host example2 {
hardware ethernet aa:bb:ff:20:fa:13;
fixed-address 192.168.1.191;
option host-name "example2";
ddns-hostname "example2";
}
Код:

Код: Выделить всё

def get_hosts(s):
grammar = """
config: hosts*=host ;

host: 'host' hostname=ID '{'
(
('hardware ethernet' hardware_ethernet=/[0-9a-fA-F:]+/';')?

'fixed-address' fixed_address=/([0-9]{1,3}\.){3}[0-9]{1,3}/';'

('option host-name' option_host_name=STRING';')?

('ddns-hostname' ddns_hostname=STRING';')?
)#
'}'
;
"""
mm = metamodel_from_str(grammar)
model = mm.model_from_str(s)
for host in model.hosts:
print host.hostname, host.fixed_address
Теперь я не могу разобрать весь dhcpd.conf с этой грамматикой (очевидно, я получаю синтаксические ошибки, поскольку в файле очень много других элементов, которые грамматически не учитывается); с другой стороны, я не хочу создавать полную грамматику для этого файла, так как мне нужно только извлечь определенные типы записей хоста.

Я, конечно, могу извлечь только записи хоста, используя регулярные выражения, и проанализировать их отдельно, но мне интересно, есть ли какой-нибудь способ заставить textX извлекать только хост< /code> записывает данные из файла и игнорирует остальное содержимое?

Подробнее здесь: https://stackoverflow.com/questions/533 ... with-textx
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»