示例#1
0
    def execution_context():
        from org.python.core import Py
        from org.python.util import PythonInterpreter
        from org.python.core import PySystemState

        ps = PySystemState()
        pi = PythonInterpreter({}, ps)
        if locals is not None: pi.setLocals(locals)
        if inp is not None: pi.setIn(inp)
        if out is not None: pi.setOut(out)
        if err is not None: pi.setErr(err)
        try:
            if isinstance(source, types.FunctionType):
                # A function wrapping a compiled code block
                pi.exec(source.func_code)

            elif isinstance(source, java.io.InputStream):
                # A byte-oriented file-like input stream
                pi.execfile(source)

            elif isinstance(source, java.io.Reader):
                # A character-oriented file-like input stream
                code = pi.compile(source)
                pi.exec(code)

            else:
                # A str or unicode (see UnicodeSourceTest)
                pi.exec(source)

        except:
            print
            print '-'*60
            traceback.print_exc(file=sys.stdout)
            print '-'*60