diff --git a/erlastic/__init__.py b/erlastic/__init__.py index 4f3d1f1..95f3a33 100644 --- a/erlastic/__init__.py +++ b/erlastic/__init__.py @@ -1,4 +1,7 @@ """Erlang External Term Format serializer/deserializer""" +import struct +import sys +import six from erlastic.codec import ErlangTermDecoder, ErlangTermEncoder from erlastic.types import * @@ -6,23 +9,31 @@ encode = ErlangTermEncoder().encode decode = ErlangTermDecoder().decode -import struct -import sys +if six.PY3: + stdread = sys.stdin.buffer.read + stdwrite = sys.stdout.buffer.write +else: + stdread = sys.stdin.read + stdwrite = sys.stdout.write + def mailbox_gen(): - while True: - len_bin = sys.stdin.buffer.read(4) - if len(len_bin) != 4: return - (length,) = struct.unpack('!I',len_bin) - yield decode(sys.stdin.buffer.read(length)) + while True: + len_bin = stdread(4) + if len(len_bin) != 4: + return + (length,) = struct.unpack('!I', len_bin) + yield decode(stdread(length)) + def port_gen(): - while True: - term = encode((yield)) - sys.stdout.buffer.write(struct.pack('!I',len(term))) - sys.stdout.buffer.write(term) + while True: + term = encode((yield)) + stdwrite(struct.pack('!I', len(term))) + stdwrite(term) + def port_connection(): - port = port_gen() - next(port) - return mailbox_gen(),port + port = port_gen() + next(port) + return mailbox_gen(), port