Spaces:
Running
Running
| """Exécute un script Python local.""" | |
| from __future__ import annotations | |
| import subprocess | |
| import sys | |
| from pathlib import Path | |
| from typing import Any | |
| from emo.desktop.actions._base import SkillResult | |
| def run(args: dict) -> Any: | |
| path = args.get("path") or args.get("script") or "" | |
| if not path: | |
| q = (args.get("query") or "") | |
| for word in q.split(): | |
| if word.endswith(".py"): | |
| path = word | |
| break | |
| p = Path(path).expanduser() | |
| if not p.is_file(): | |
| return SkillResult.fail(f"Script introuvable: {path}") | |
| try: | |
| proc = subprocess.run( | |
| [sys.executable, str(p)], | |
| capture_output=True, | |
| text=True, | |
| timeout=int(args.get("timeout") or 60), | |
| cwd=str(p.parent), | |
| ) | |
| return SkillResult.ok( | |
| exit_code=proc.returncode, | |
| stdout=proc.stdout[:4000], | |
| stderr=proc.stderr[:2000], | |
| message=proc.stdout[:500] or proc.stderr[:200] or f"exit {proc.returncode}", | |
| ) | |
| except subprocess.TimeoutExpired: | |
| return SkillResult.fail("timeout") | |
| except OSError as e: | |
| return SkillResult.fail(str(e)) | |