from StringIO import StringIO
def execute(code, _globals={}, _locals={}):
import sys
fake_stdout = StringIO()
__stdout = sys.stdout
sys.stdout = fake_stdout
try:
#try if this is expressions
ret = eval(code, _globals, _locals)
result = fake_stdout.getvalue()
sys.stdout = __stdout
if ret:
result += str(ret)
return result
except:
try:
exec(code, _globals, _locals)
except:
sys.stdout = __stdout
import traceback
buf = StringIO()
traceback.print_exc(file=buf)
return buf.getvalue()
else:
sys.stdout = __stdout
return fake_stdout.getvalue()