Spaces:
Build error
Build error
File size: 1,485 Bytes
64eae68 2c47baa 64eae68 2c47baa faecb60 2c47baa faecb60 2c47baa 64eae68 0410277 64eae68 2c47baa 0410277 2c47baa faecb60 2c47baa faecb60 2c47baa 64eae68 faecb60 64eae68 faecb60 |
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 39 40 41 42 43 44 45 46 47 48 49 50 |
import io
import sys
import ast
from logger import logger
def run_code(code):
"""
Executes user-provided Python code and captures its output.
Detects function definitions and provides feedback if functions are not invoked.
Parameters:
code (str): Python code entered by the user.
Returns:
str: Captured output or error messages.
"""
# Redirect stdout to capture code output
old_stdout = sys.stdout
redirected_output = sys.stdout = io.StringIO()
# Create a dedicated execution namespace
exec_globals = {}
try:
# Parse the code to detect function definitions
tree = ast.parse(code)
function_names = [
node.name for node in ast.walk(tree) if isinstance(node, ast.FunctionDef)
]
# Execute the code in the dedicated namespace
exec(code, exec_globals)
# Check if functions are defined but not called
if function_names:
captured_output = redirected_output.getvalue()
captured_output += f"\n\nDefined functions: {', '.join(function_names)}\n"
captured_output += "Note: Functions need to be explicitly called to see their output."
return captured_output
except Exception as e:
logger.error(f"Execution error: {e}")
return f"Error: {e}"
finally:
# Reset stdout
sys.stdout = old_stdout
# Return the captured output
return redirected_output.getvalue()
|