wechat-robot-skills/skills/docx/scripts/inspect_environment.py

42 lines
1.8 KiB
Python

#!/usr/bin/env python3
"""Report installed document tools and exact font-family availability."""
from __future__ import annotations
import importlib.metadata
import shutil
from _docx_common import SkillArgumentParser, run_cli, run_program
def main():
parser = SkillArgumentParser(description="检查文档依赖和指定字体是否实际安装")
parser.add_argument("--font", action="append", default=[], help="需精确检查的字体家族,可重复传入")
args = parser.parse_args()
tools = {name: shutil.which(name) for name in ("soffice", "pandoc", "pdftoppm", "pdftotext", "typst", "fc-list")}
packages = {}
for name in ("python-docx", "lxml", "defusedxml", "Pillow", "pdfplumber", "pypdf", "rapidocr", "onnxruntime"):
try:
packages[name] = importlib.metadata.version(name)
except importlib.metadata.PackageNotFoundError:
packages[name] = None
fonts = set()
if tools["fc-list"]:
result = run_program([tools["fc-list"], "--format", "%{family}\n"], timeout=30)
fonts = {name.strip() for line in result.stdout.splitlines() for name in line.split(",") if name.strip()}
lookup = {name.casefold() for name in fonts}
requested = {name: name.strip().casefold() in lookup for name in args.font}
return {
"tools": tools, "packages": packages,
"missing_tools": [name for name, path in tools.items() if not path],
"missing_packages": [name for name, version in packages.items() if not version],
"requested_fonts": requested,
"missing_fonts": [name for name, installed in requested.items() if not installed],
"font_inventory_available": bool(tools["fc-list"]),
"font_families": sorted(fonts),
}
if __name__ == "__main__":
raise SystemExit(run_cli(main))