首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Bazel运行使GetTempPath返回C:\Windows\

使用Bazel运行使GetTempPath返回C:\Windows\
EN

Stack Overflow用户
提问于 2017-09-18 19:09:26
回答 1查看 157关注 0票数 1

我有一个调用GetTempPathW并试图在返回的dir中创建临时文件的测试。当我直接运行测试时,GetTempPathW返回C:\Users\sgreens\AppData\Local\Temp\并通过测试。当我使用bazel test运行它时,它返回C:\Windows\,并且测试无法在那里创建文件。

来自GetTempPath文档

GetTempPath函数按照以下顺序检查环境变量的存在,并使用找到的第一条路径:

  1. 由TMP环境变量指定的路径。
  2. 由TEMP环境变量指定的路径。
  3. 由USERPROFILE环境变量指定的路径。
  4. Windows目录。

在cmd窗口中我从以下位置运行bazel:

代码语言:javascript
复制
C:\Users\sgreens\yeti\yeti>echo %TMP%
C:\Users\sgreens\AppData\Local\Temp

C:\Users\sgreens\yeti\yeti>echo %TEMP%
C:\Users\sgreens\AppData\Local\Temp

C:\Users\sgreens\yeti\yeti>echo %USERPROFILE%
C:\Users\sgreens

C:\Users\sgreens\yeti\yeti>echo %WINDIR%
C:\WINDOWS

在生成时生成的CROSSTOOL中:

代码语言:javascript
复制
  env_entry {
    key: "TMP"
    value: "C:\\Users\\sgreens\\AppData\\Local\\Temp"
  }
  env_entry {
    key: "TEMP"
    value: "C:\\Users\\sgreens\\AppData\\Local\\Temp"
  }

Bazel是如何使GetTempPath返回C:\Windows\的?我怎么才能修好它?

可能相关的问题:输出基中的“$”符号使所有测试在windows上失败

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-19 12:48:54

当直接运行测试时,您将在正常的命令环境中运行它。测试可以看到与您相同的环境变量,即它使用您打印的TMP/TEMP变量。

当您使用bazel test运行测试时,Bazel会在一个精简的环境中运行它,并且尽可能地定义少量的环境变量。Bazel这样做是为了使测试尽可能可重复:如果测试依赖于客户端环境,那么更改环境变量可能会让它通过或失败,我们不希望出现这种不可预测的行为。

这是一个已知的问题,我正在积极解决这个问题:https://github.com/bazelbuild/bazel/issues/2870

解决方法之一是使用--test_env=TMP。此标志告诉Bazel将TMP值复制到测试的环境中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46286540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档