【发布时间】:2011-10-22 12:05:23
【问题描述】:
我正在编写一个记录终端交互的 Python 程序(类似于脚本程序),我想以 XML 格式存储日志。
问题是终端交互包含VT100转义码。如果我将数据以 UTF-8 编码格式写入文件,Python 不会抱怨,例如:
...
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,这会导致像 etree 这样的 XML 解析器在转义码上出错。
解决此问题的一种方法是先发送至filter out the escape codes。但是,是否有可能在维护转义码并且生成的文件可以由 XML 工具(如 etree)解析的情况下做这样的事情?
【问题讨论】:
标签: python xml unicode tty vt100