You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions Windows环境下Popen额外环境变量的来源与移除

问题:Windows环境下Popen传入自定义env后出现额外环境变量

我在使用Popen时传入了自定义环境变量,期望执行命令时的环境变量完全等于env的内容。代码如下:

proc = Popen(
    command,
    universal_newlines=True,
    bufsize=0,
    shell=False,
    env=env,
)

但在GitHub Actions的Windows机器(运行windows-latest)上执行时,会多出两个额外变量:TERM=xterm-256color和HOME=/c/Users/runneradmin。执行前检查os.environ的内容,主机环境里没有这两个变量。这个问题仅出现在Windows环境,Mac和Linux下环境变量完全与env一致。我运行的command是env命令,用于输出环境变量。请问这两个变量来自何处?如何移除它们?


原因分析

  • TERM变量:Windows环境中,Python的subprocess模块在非shell模式下调用类Unix命令(比如env)时,会自动注入该变量,用于模拟类Unix终端环境,确保这类命令能正常执行。
  • HOME变量:这是Python为了兼容类Unix命令的行为,在Windows系统中自动映射的变量,其值来自GitHub Actions runner的默认用户目录/c/Users/runneradmin(该路径格式由Git for Windows提供)。

解决方法

要完全移除这两个变量,最直接的方式是在自定义env中明确覆盖它们:

# 在自定义环境变量中设置这两个变量为空字符串
env["TERM"] = ""
env["HOME"] = ""

proc = Popen(
    command,
    universal_newlines=True,
    bufsize=0,
    shell=False,
    env=env,
)

或者在构建自定义env时直接包含这两个空值:

# 合并自定义环境变量与空值的TERM、HOME
env = {**your_custom_env, "TERM": "", "HOME": ""}

如果尝试使用shell=True(不推荐,存在命令注入风险),Python不会自动注入这些兼容变量,但此时子进程会继承主机环境的其他变量,可能不符合你“环境变量完全等于env”的需求。


内容的提问来源于stack exchange,提问作者Bastian Venthur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 10:02:43