Spaces:
Running
Running
import sys | |
from io import StringIO | |
import contextlib | |
import json | |
from datetime import datetime | |
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 | |
} |