File size: 1,201 Bytes
dd87944
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
"""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))