Spaces:
Running
Running
File size: 1,081 Bytes
5d21581 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import sys
from io import StringIO
import contextlib
import json
from datetime import datetime
@contextlib.contextmanager
def capture_output():
"""Capture stdout and stderr"""
stdout, stderr = StringIO(), StringIO()
old_out, old_err = sys.stdout, sys.stderr
try:
sys.stdout, sys.stderr = stdout, stderr
yield stdout, stderr
finally:
sys.stdout, sys.stderr = old_out, old_err
def execute_code(code: str) -> tuple:
"""
Execute the provided code and return stdout, stderr and any exceptions
"""
with capture_output() as (stdout, stderr):
try:
exec(code)
return stdout.getvalue().strip(), stderr.getvalue().strip(), None
except Exception as e:
return stdout.getvalue().strip(), stderr.getvalue().strip(), str(e)
def export_session(code: str, output: str, error: str) -> dict:
"""
Create an exportable session object
"""
return {
"timestamp": datetime.now().isoformat(),
"code": code,
"output": output,
"error": error
} |