我将
Popen
与自定义环境变量一起使用。我的期望是当我运行这样的东西时:
proc = Popen(
command,
universal_newlines=True,
bufsize=0,
shell=False,
env=env,
)
运行
command
时设置的环境变量正是env
的内容。然而,当我在 Windows 机器上的 github actions 上运行这个时,(确切地)设置了两个附加变量:TERM=xterm-256color
和HOME=/c/Users/runneradmin
。有趣的是,当我检查 os.environ
before 执行的内容时,主机环境集上有很多变量,除了那两个。
这只发生在 Windows 上(运行
windows-latest
)。在Mac和Linux上,环境正是env
的内容。
我在这种情况下运行的
command
是输出环境变量的env
。
我的问题是,这两个变量从哪里来以及如何摆脱它们?
这似乎是因为 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
时会预先设置这些环境变量。