日常开发经常需要使用python写各种工具辅助,因为工作中使用erlang作为主要语言,python作为作为工具支持避免不了和erlang有交集的地方。
例如使用python读取erlang的数据格式进行处理,例如合服。

通常erlang的数据格式多出现以下两种格式:

  • 使用erlang:term_to_binary( term )序列号的二进制 erlang binary term
  • 直接明文显示的数据格式,例如”#{a => a,d => [1, 2, 3, 4],{c,c} => {c,c,c}}”

针对这两种数据格式,分别使用python进行解析,然后转换成python自定义的数据类型,根据初版的python-erlastic fork之后进行修改:

  • 新增codec.ErlangStrDecoder类,用于使用python直接解析文本形式的erlang结构,仅支持解析常用的binary,atom,tuple,list,map类型
  • 在读取二进制支持maps类型
  • 重写原有类型的str函数,方便格式化成erlang原有的显示格式
  • 新定义的类型放在types.py,新格式全部继承自原生格式,方便使用

erlang和python类型参照表:

erlang type python new type python native type
atom Atom str
binary Binary bytes
tuple Tuple tuple
bitstring ErlString str
maps Maps dict
list List list
reference Reference Object
port Port Object
pid Pid Object
export Export Object

源码和使用方式请参考:python-erlterm