在Github Actions中使用Popen在Windows上设置自定义环境变量
我正在使用 Popen
来运行一些命令,并且我设置了自定义的环境变量。我原本期待,当我运行类似下面的代码时:
proc = Popen(
command,
universal_newlines=True,
bufsize=0,
shell=False,
env=env,
)
运行 command
时,环境变量应该和 env
的内容完全一致。然而,当我在 GitHub Actions 上的 Windows 机器上运行这个时,发现多了两个额外的变量:TERM=xterm-256color
和 HOME=/c/Users/runneradmin
。有趣的是,当我在执行之前检查 os.environ
的内容时,发现主机环境中有很多变量,但就是没有这两个。
这种情况只发生在 Windows 上(运行 windows-latest
)。在 Mac 和 Linux 上,环境变量完全和 env
的内容一致。
我运行的 command
是 env
,它会输出当前的环境变量。
我的问题是,这两个变量是从哪里来的,我该如何去掉它们?
1 个回答
1
这似乎是因为 GH Actions 中的 cmd.exe
其实并不是你想象中的那个 cmd
,而是一个终端模拟器。
你可以用这个来验证:
- name: "Print shell"
shell: cmd
run: |
uname -a
env
uname -a
(这是一个 Linux 命令)会输出类似这样的内容:
MSYS_NT-10.0-20348 fv-az1702-301 3.4.10-87d57229.x86_64 2024-02-14 20:17 UTC x86_64 Msys
MSYS 是一个 Windows 终端模拟器,它提供了很多在 Windows 上构建不同软件的功能,这可能就是 GH Actions 默认使用它的原因。它还允许你在同一个终端上运行几个 Linux 命令,比如你提到的 env
命令。
它还会设置一些默认的环境变量,比如 TERM=xterm-256color
,这个变量让终端模拟器支持颜色显示。
Popen()
会尝试使用这个默认的 cmd,这就是为什么当你运行 env
时,这些环境变量会被预先设置的原因。