Spaces:
Sleeping
Sleeping
import re | |
import os | |
import subprocess | |
import sys | |
# Extract Python code block from a LLM response | |
def extract_code(text): | |
try: | |
match = re.search(r"```python(.*?)```", text, re.DOTALL) | |
if match: | |
code = match.group(0).strip() | |
else: | |
code = "" | |
print("No matching code block found.") | |
return code.replace("```python\n", "").replace("```", "") | |
except Exception as e: | |
print(f"Code extraction error: {e}") | |
raise | |
# Extract file path from a code string that uses os.path.join() | |
def extract_file_path(code_str): | |
try: | |
match = re.search(r'os\.path\.join\(\s*["\'](.+?)["\']\s*,\s*["\'](.+?)["\']\s*\)', code_str) | |
if match: | |
folder = match.group(1) | |
filename = match.group(2) | |
return os.path.join(folder, filename) | |
print("No file path found.") | |
return None | |
except Exception as e: | |
print(f"File path extraction error: {e}") | |
raise | |
# Execute extracted Python code in a subprocess using the given interpreter | |
def execute_code_in_virtualenv(text, python_interpreter=sys.executable): | |
if not python_interpreter: | |
raise EnvironmentError("Python interpreter not found.") | |
code_str = extract_code(text) | |
command = [python_interpreter, "-c", code_str] | |
try: | |
print("✅ Running script:", command) | |
result = subprocess.run(command, check=True, capture_output=True, text=True) | |
file_path = extract_file_path(code_str) | |
print("✅ Extracted file path:", file_path) | |
return file_path | |
except subprocess.CalledProcessError as e: | |
return (f"Execution error:\n{e.stderr.strip()}", None) | |