Я пишу программу на Python, которая регистрирует взаимодействие с терминалом (по аналогии со скриптовой программой), и я хотел бы сохранить журнал в формате XML.
Проблема в том, что взаимодействие с терминалом включает escape-коды VT100. Python не жалуется, если я записываю данные в файл в кодировке UTF-8, например:
...
pid, fd = pty.fork()
if pid==0:
os.execvp("bash",("bash","-l"))
else:
# Lots of TTY-related stuff here
# see http://groups.google.com/group/comp.lang.python/msg/de40b36c6f0c53cc
fout = codecs.open("session.xml", encoding="utf-8", mode="w")
fout.write('<?xml version="1.0" encoding="UTF-8"?>\n')
fout.write("<session>\n")
...
r, w, e = select.select([0, fd], [], [], 1)
for f in r:
if f==fd:
fout.write("<entry><![CDATA[")
buf = os.read(fd, 1024)
fout.write(buf)
fout.write("]]></entry>\n")
else:
....
fout.write("</session>")
fout.close()
Этот сценарий «работает» в том смысле, что он записывает файл на диск, но в результате получается неверный файл utf-8, что приводит к тому, что парсеры XML, такие как etree, блокируют escape-коды.
Один из способов справиться с этим - сначала отфильтровывать управляющие коды . Но возможно ли сделать что-то подобное, если сохраняются управляющие коды и полученный файл может быть проанализирован с помощью таких инструментов XML, как etree?