【问题标题】:How to make a path from a string in starlark?如何从starlark中的字符串创建路径?
【发布时间】:2020-05-28 16:51:46
【问题描述】:

我正在为 bazel 构建规则编写一些验证代码,我需要进行一些路径验证。我需要检查某个文件是否存在于与 BUILD 文件相同的目录中。我注意到有一个上下文属性 build_file_path 指向 BUILD 文件。我想从中提取父目录。

看起来我无法创建新的 path 对象 - 我没有看到构造函数/初始化程序。 Starlark 似乎也不像 python 那样支持os.path,因为不支持导入。

获取表示 Starlark 中路径的字符串对象的父目录的规范方法是什么?

【问题讨论】:

  • 你有没有解决过这个问题?我正在尝试做一件非常相似的事情。我需要创建一个符号链接,但是unresolved symlinks are only in expermintal。在执行规则时,我在 api 中找不到使路径对象可用的任何地方。
  • 不幸的是我没有,我不记得我是否最终放弃了需要此验证工作的任务(已经很久了......)

标签: bazel starlark


【解决方案1】:

我无法回答您的最后一个问题,但希望以下内容有助于解决最初的问题:

您可以使用正在为其构建此规则实例的目标的标签并找到它的包。这将为您提供一个表示 BUILD 文件的父目录的字符串。

即ctx.label.package

【讨论】:

  • 这有帮助,但不幸的是并没有解决我的问题。可能是我不够有创意。
【解决方案2】:

load("@bazel_skylib//lib:paths.bzl", "paths")

paths.dirname(path_str)

https://github.com/bazelbuild/bazel-skylib/blob/main/docs/paths_doc.md

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 2015-07-27
  • 2016-11-09
  • 2014-05-09
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
相关资源
最近更新 更多