Python_Code_Assistance / interpreter.py
valiant21's picture
Update interpreter.py
faecb60 verified
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()