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 | |
| } |