在Github Actions中使用Popen在Windows上设置自定义环境变量

0 投票
1 回答
47 浏览
提问于 2025-04-12 17:17

我正在使用 Popen 来运行一些命令,并且我设置了自定义的环境变量。我原本期待,当我运行类似下面的代码时:

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

运行 command 时,环境变量应该和 env 的内容完全一致。然而,当我在 GitHub Actions 上的 Windows 机器上运行这个时,发现多了两个额外的变量:TERM=xterm-256colorHOME=/c/Users/runneradmin。有趣的是,当我在执行之前检查 os.environ 的内容时,发现主机环境中有很多变量,但就是没有这两个。

这种情况只发生在 Windows 上(运行 windows-latest)。在 Mac 和 Linux 上,环境变量完全和 env 的内容一致。

我运行的 commandenv,它会输出当前的环境变量。

我的问题是,这两个变量是从哪里来的,我该如何去掉它们?

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 时,这些环境变量会被预先设置的原因。

撰写回答