import os import subprocess def run_python_file(working_directory, file_path, args=None): try: abs_path = os.path.abspath(working_directory) new_file_path = os.path.normpath(os.path.join(abs_path, file_path)) valid_target_file = os.path.commonpath([abs_path, new_file_path]) == abs_path if not valid_target_file: return f'Error: Cannot execute "{file_path}" as it is outside the permitted working directory' if not os.path.isfile(new_file_path): return f'Error: "{file_path}" does not exist or is not a regular file' if not file_path.endswith(".py"): return f'Error: "{file_path}" is not a Python file' command = ["python", new_file_path] if args: command.extend(args) completed_process = subprocess.run( command, cwd=abs_path, capture_output=True, text=True, timeout=30 ) output = [] if completed_process.returncode != 0: output.append(f"Process exited with code {completed_process.returncode}") if not completed_process.stdout and not completed_process.stderr: output.append("No output produced") if completed_process.stdout: output.append(f"STDOUT: {completed_process.stdout}") if completed_process.stderr: output.append(f"STDERR: {completed_process.stderr}") return "\n".join(output) except Exception as e: return f"Error: executing Python file: {e}"