为了账号安全,请及时绑定邮箱和手机立即绑定

无法打开应该位于基本路径中的文件

无法打开应该位于基本路径中的文件

Go
吃鸡游戏 2023-05-22 17:28:23
我有一个 Go 项目(bazel-remote),当使用 Bazel 构建时,它试图读取在命令行中传递的 YAML 文件。此 YAML 文件与我运行命令的位置相同bazel run。但它无法运行,因为os.Open失败了_no such file or directory_。我打印了basePathusing os.Getwd,因为有人建议我basePath可能设置错误。但是 mybasePath设置为 my 中/private/var/tmp/创建和存储 Bazel 对象的位置:/private/var/tmp/_bazel`_`<username>``/312feba8ddcde6737ae7dd7ef9bc2a5a/execroot/__main__/bazel-out/darwin-fastbuild/bin/darwin_amd64_static_pure_stripped/bazel-remote.runfiles/__main`__如何basePath正确设置我的?为什么我的basePath设置到它所在的位置?
查看完整描述

1 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

以 开头的二进制文件bazel run在内部 Bazel 目录中执行。他们将有权访问“运行文件”,这些文件是data二进制规则或其依赖项的属性中提到的文件。例如,如果您有如下规则,您将能够读取foo.txt,但不能读取bar.txt或 其他文件:


load("@io_bazel_rules_go//go:def.bzl", "go_binary")


go_binary(

    name = "hello",

    srcs = ["hello.go"],

    data = ["foo.txt"],

)

请注意,二进制文件的工作目录对应于存储库根目录,而不是定义二进制文件的目录。您可以使用os.Getwd和进行调试filepath.Walk。


您提到过您想要访问在命令行中传入的 yaml 文件。据推测,您希望能够访问用户传入的任何文件,而不仅仅是属性中提到的文件data。对于这种情况,请查看BUILD_WORKING_DIRECTORY环境变量(bazel run设置)。bazel run这给出了调用目录的路径。此外,BUILD_WORKSPACE_DIRECTORY是工作区根目录的路径。


查看完整回答
反对 回复 2023-05-22
  • 1 回答
  • 0 关注
  • 70 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信