Spaces:
Build error
Build error
Update interpreter.py
Browse files- interpreter.py +8 -18
interpreter.py
CHANGED
@@ -6,13 +6,13 @@ from logger import logger
|
|
6 |
def run_code(code):
|
7 |
"""
|
8 |
Executes user-provided Python code and captures its output.
|
9 |
-
|
10 |
|
11 |
Parameters:
|
12 |
code (str): Python code entered by the user.
|
13 |
|
14 |
Returns:
|
15 |
-
|
16 |
"""
|
17 |
# Redirect stdout to capture code output
|
18 |
old_stdout = sys.stdout
|
@@ -21,18 +21,6 @@ def run_code(code):
|
|
21 |
# Create a dedicated execution namespace
|
22 |
exec_globals = {}
|
23 |
|
24 |
-
# Store user inputs
|
25 |
-
input_log = []
|
26 |
-
|
27 |
-
# Custom input function to simulate input() behavior
|
28 |
-
def custom_input(prompt=""):
|
29 |
-
user_input = input(prompt) # Prompt the user dynamically
|
30 |
-
input_log.append(user_input)
|
31 |
-
return user_input
|
32 |
-
|
33 |
-
# Add the custom input function to the execution namespace
|
34 |
-
exec_globals["input"] = custom_input
|
35 |
-
|
36 |
try:
|
37 |
# Parse the code to detect function definitions
|
38 |
tree = ast.parse(code)
|
@@ -44,16 +32,18 @@ def run_code(code):
|
|
44 |
exec(code, exec_globals)
|
45 |
|
46 |
# Check if functions are defined but not called
|
47 |
-
captured_output = redirected_output.getvalue()
|
48 |
if function_names:
|
|
|
49 |
captured_output += f"\n\nDefined functions: {', '.join(function_names)}\n"
|
50 |
captured_output += "Note: Functions need to be explicitly called to see their output."
|
51 |
-
|
52 |
-
return {"output": captured_output, "inputs": input_log}
|
53 |
|
54 |
except Exception as e:
|
55 |
logger.error(f"Execution error: {e}")
|
56 |
-
return
|
57 |
finally:
|
58 |
# Reset stdout
|
59 |
sys.stdout = old_stdout
|
|
|
|
|
|
|
|
6 |
def run_code(code):
|
7 |
"""
|
8 |
Executes user-provided Python code and captures its output.
|
9 |
+
Detects function definitions and provides feedback if functions are not invoked.
|
10 |
|
11 |
Parameters:
|
12 |
code (str): Python code entered by the user.
|
13 |
|
14 |
Returns:
|
15 |
+
str: Captured output or error messages.
|
16 |
"""
|
17 |
# Redirect stdout to capture code output
|
18 |
old_stdout = sys.stdout
|
|
|
21 |
# Create a dedicated execution namespace
|
22 |
exec_globals = {}
|
23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
try:
|
25 |
# Parse the code to detect function definitions
|
26 |
tree = ast.parse(code)
|
|
|
32 |
exec(code, exec_globals)
|
33 |
|
34 |
# Check if functions are defined but not called
|
|
|
35 |
if function_names:
|
36 |
+
captured_output = redirected_output.getvalue()
|
37 |
captured_output += f"\n\nDefined functions: {', '.join(function_names)}\n"
|
38 |
captured_output += "Note: Functions need to be explicitly called to see their output."
|
39 |
+
return captured_output
|
|
|
40 |
|
41 |
except Exception as e:
|
42 |
logger.error(f"Execution error: {e}")
|
43 |
+
return f"Error: {e}"
|
44 |
finally:
|
45 |
# Reset stdout
|
46 |
sys.stdout = old_stdout
|
47 |
+
|
48 |
+
# Return the captured output
|
49 |
+
return redirected_output.getvalue()
|