See More

from __future__ import unicode_literals from codeop import Compile import os import sys import json import traceback import platform import struct NODE_CHANNEL_FD = int(os.environ['NODE_CHANNEL_FD']) UNICODE_TYPE = unicode if sys.version_info[0] == 2 else str if sys.version_info[0] <= 2: # print('PY2') def _exec(_code_, _globs_): exec('exec _code_ in _globs_') else: _exec = getattr(__builtins__, 'exec') _locals = {'__name__': '__console__', '__doc__': None} _compile = Compile() if platform.system() == 'Windows': # hacky reimplementation of https://github.com/nodejs/node/blob/master/deps/uv/src/win/pipe.c def read_data(f): header = f.read(16) if not header: return header try: msg_length, = struct.unpack('', 'exec'), _locals) response = dict(type='success') else: value = eval(_compile(data['code'], '', 'eval'), _locals) response = dict(type='success', value=value) except: t, e, tb = sys.exc_info() response = dict(type='exception', value=format_exception(t, e, tb)) data = json.dumps(response, separators=(',', ':')).encode('utf-8') + b'\n' write_data(writer, data) # Closing is messy try: reader.close() except IOError: pass try: writer.close() except IOError: pass