b0e010c6cc
Extracted from #318 (the UTF-8/doctor core, minus the env-wrapper feature): - new agent_reach/utils/process.py: utf8_subprocess_env() + mcporter_utf8_env_args() — Windows GBK consoles otherwise corrupt Chinese output from mcporter/MCP child processes - weibo/douyin/linkedin checks and weibo install/registration now pass the UTF-8 env (and register the MCP server with --env PYTHONUTF8=1) - youtube: extract _has_js_runtime_config() with an OSError guard so an unreadable yt-dlp config can't crash doctor - test_skill_command: open SKILL.md with explicit utf-8 (Windows GBK default broke these tests) Co-authored-by: chidao <2980933590@qq.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
27 lines
706 B
Python
27 lines
706 B
Python
"""Subprocess helpers for consistent cross-platform text handling."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
from collections.abc import Mapping
|
|
|
|
UTF8_ENV = {
|
|
"PYTHONUTF8": "1",
|
|
"PYTHONIOENCODING": "utf-8",
|
|
}
|
|
|
|
|
|
def utf8_subprocess_env(base: Mapping[str, str] | None = None) -> dict[str, str]:
|
|
"""Return an environment that forces Python child processes into UTF-8 mode."""
|
|
env = dict(base or os.environ)
|
|
env.update(UTF8_ENV)
|
|
return env
|
|
|
|
|
|
def mcporter_utf8_env_args() -> list[str]:
|
|
"""Return mcporter --env arguments for UTF-8 Python stdio servers."""
|
|
args = []
|
|
for key, value in UTF8_ENV.items():
|
|
args.extend(["--env", f"{key}={value}"])
|
|
return args
|