| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- """
- agent67.tools.system_info — 系统信息查询
- Lambda: λ query_json. system_info(query)
- """
- import json
- import platform
- import subprocess
- def _run(cmd: str) -> str:
- try:
- r = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=10)
- return r.stdout.strip()
- except Exception:
- return "N/A"
- def query_system(input_json: str) -> str:
- """
- 查询系统信息。
- 支持: cpu / memory / disk / network / process / battery / all
- """
- try:
- data = json.loads(input_json)
- query = data.get("query", "all")
- except (json.JSONDecodeError, AttributeError):
- query = str(input_json).strip().lower()
- is_mac = platform.system() == "Darwin"
- sections = []
- if query in ("cpu", "all"):
- if is_mac:
- cpu_info = _run("sysctl -n machdep.cpu.brand_string")
- cores = _run("sysctl -n hw.ncpu")
- cpu_usage = _run("top -l 1 -n 0 | grep 'CPU usage'")
- sections.append(f"🖥️ CPU:\n 型号: {cpu_info}\n 核心数: {cores}\n {cpu_usage}")
- else:
- sections.append(f"🖥️ CPU:\n {_run('lscpu | head -15')}")
- if query in ("memory", "mem", "all"):
- if is_mac:
- total = _run("sysctl -n hw.memsize")
- try:
- total_gb = int(total) / (1024 ** 3)
- sections.append(f"🧠 内存: {total_gb:.1f} GB")
- except ValueError:
- sections.append(f"🧠 内存: {total}")
- else:
- sections.append(f"🧠 内存:\n {_run('free -h')}")
- if query in ("disk", "all"):
- sections.append(f"💾 磁盘:\n {_run('df -h / | tail -1')}")
- if query in ("network", "net", "all"):
- ip_info = _run("ifconfig | grep 'inet ' | grep -v 127.0.0.1")
- sections.append(f"🌐 网络:\n {ip_info}")
- if query in ("process", "proc", "top"):
- top_procs = _run("ps aux --sort=-%cpu 2>/dev/null | head -6 || ps aux -r | head -6")
- sections.append(f"📊 Top 进程:\n{top_procs}")
- if query in ("battery", "bat", "all") and is_mac:
- battery = _run("pmset -g batt")
- sections.append(f"🔋 电池:\n {battery}")
- if not sections:
- return f"❌ 未知查询: {query}. 支持: cpu/memory/disk/network/process/battery/all"
- return "\n\n".join(sections)
|