Spaces:
Running
Running
| import subprocess | |
| import sys | |
| import os | |
| import tempfile | |
| __all__ = ['PythonSandboxTool'] | |
| class PythonSandboxTool(): | |
| dependencies = [] | |
| inputSchema = { | |
| "name": "PythonSandboxTool", | |
| "description": "Executes Python code in a sandbox environment.", | |
| "parameters": { | |
| "type": "object", | |
| "properties": { | |
| "code": { | |
| "type": "string", | |
| "description": "The Python code to execute." | |
| } | |
| }, | |
| "required": ["code"] | |
| } | |
| } | |
| def run(self, **kwargs): | |
| code = kwargs.get("code") | |
| if not code: | |
| return {"status": "error", "message": "Missing required parameter: 'code'", "output": None} | |
| # Create a temporary directory | |
| with tempfile.TemporaryDirectory() as tmpdir: | |
| # Create a temporary file inside the directory | |
| with tempfile.NamedTemporaryFile(suffix='.py', mode='w', delete=False, dir=tmpdir) as temp_file: | |
| temp_file.write(code) | |
| temp_file_name = temp_file.name | |
| # Construct the command to execute the Python code | |
| command = [sys.executable, temp_file_name] | |
| try: | |
| # Execute the command in a subprocess | |
| process = subprocess.run( | |
| command, | |
| capture_output=True, | |
| text=True, | |
| timeout=10, # Timeout after 10 seconds | |
| check=False # Do not raise an exception on non-zero exit code | |
| ) | |
| # Get the output and error messages | |
| stdout = process.stdout | |
| stderr = process.stderr | |
| # Check the return code | |
| return_code = process.returncode | |
| # Prepare the result | |
| result = { | |
| "stdout": stdout, | |
| "stderr": stderr, | |
| "return_code": return_code | |
| } | |
| # Return the result | |
| return {"status": "success", "message": "Python code executed successfully.", "output": result} | |
| except subprocess.TimeoutExpired: | |
| return {"status": "error", "message": "Python code execution timed out.", "output": None} | |
| except Exception as e: | |
| return {"status": "error", "message": f"Python code execution failed: {str(e)}", "output": None} | |