Code_editor / utils.py
vsj0702's picture
Fixing bug
0f6a021 verified
raw
history blame
1.38 kB
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, stdin: str = "") -> tuple:
"""
Execute the provided code and return stdout, stderr and any exceptions
"""
with capture_output() as (stdout, stderr):
try:
# Create a generator for stdin lines
inputs = iter(stdin.splitlines())
# Proper lambda that accepts optional prompt
input_override = lambda prompt='': next(inputs, '')
local_vars = {"input": input_override}
exec(code, {}, local_vars)
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
}