Не удается открыть файл, который должен быть в базовом пути - PullRequest
0 голосов
/ 01 января 2019

У меня есть проект Go (bazel-remote), который пытается прочитать файл yaml, переданный в командной строке, при сборке с bazel.Этот файл yaml находится в том же месте, откуда я запускаю команду bazel run .

Но он не запускается, потому что os.Open не работает с без такого файла или каталога .

Я напечатал basePath, используя os.Getwd, потому что кто-то предположил, что мой basePath может быть установлен неправильно.Но мой basePath установлен в моем / private / var / tmp / месте, где создаются и хранятся объекты bazel:

/ private / var / tmp / bazel /312feba8ddcde6737ae7dd7ef9bc2a5a / execroot / main / bazel-out / darwin-fastbuild / bin / darwin_amd64_static_pure_stripped / bazel-remote.runfiles / main * 10122 * 10 * 10 10 I1020правильно установить basePath?Почему мой basePath установлен на то место, где он находится?

1 Ответ

0 голосов
/ 02 января 2019

Двоичные файлы, начинающиеся с bazel run, выполняются во внутреннем каталоге Bazel.Они будут иметь доступ к «runfiles», которые являются файлами, упомянутыми в атрибуте 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 - это путь к корневому каталогу рабочей области.

...