如何为Bazel中的execpath中创建的文件获取文件对象?
我有一个bash脚本:如何为Bazel中的execpath中创建的文件获取文件对象?,bazel,Bazel,我有一个bash脚本: mkdir a_dir echo "Hello World!" > a_dir/out1.txt echo "Hello World!" > a_dir/out2.txt 我想创建一个操作来运行脚本,并将它创建的文件声明为输出,并且能够将它们作为输入传递给其他操作 问题是我不知道如何使用ctx.actions.declare\u file或我不知道的其他方法引用文件weather 我想我要寻找的是一种方法来获取引用execroot路径下文件的File对象 注
mkdir a_dir
echo "Hello World!" > a_dir/out1.txt
echo "Hello World!" > a_dir/out2.txt
我想创建一个操作来运行脚本,并将它创建的文件声明为输出,并且能够将它们作为输入传递给其他操作
问题是我不知道如何使用ctx.actions.declare\u file
或我不知道的其他方法引用文件weather
我想我要寻找的是一种方法来获取引用execroot
路径下文件的File
对象
注意:我将运行的实际二进制文件而不是bash脚本不会授予对其输出路径的控制权,因此在实现函数中声明一个文件并将其作为参数传递给二进制文件不是一个选项 在联机查看并打开一个线程之后,似乎没有任何方法在输出根之外声明输出 我选择的解决方案是创建一个包装器脚本,将
cd
s放入输出目录out\u dir
,该目录的计算结果为path.join(ctx.bin\u dir.path,ctx.label.package)
我选择cd
而不是mv
或cp
的原因在bazel讨论线程中讨论
在cd
intoout\u dir
之后,作为参数提供给二进制文件的文件路径不再有效,可以通过在它们前面加来修复它们。
s。如果要修复的文件位于depset
中,并且您需要在不将depset
转换为列表的情况下修复路径,则可以使用args.add\u all()的format\u each
参数预先设置路径修复
这不是最优雅的解决方案,但据我所知,不会影响功能。下面是一些示例代码:
#内部实现功能:
out\u dir=path.join(ctx.bin\u dir.path,ctx.label.package)
path_fix=“/”.join(len(out_dir.split(“/”)))*[“.”
args=ctx.actions.args()
args.add_all(文件\u depset,格式\u each=path\u fix+“/%s”)
actions.run_shell(…,command=“cd{out_dir};{binary}$@”(
out\u dir=out\u dir,
二进制=你的_二进制
))
在联机查看并打开上的线程后,似乎没有任何方法在输出根之外声明输出
我选择的解决方案是创建一个包装器脚本,将cd
s放入输出目录out\u dir
,该目录的计算结果为path.join(ctx.bin\u dir.path,ctx.label.package)
我选择cd
而不是mv
或cp
的原因在bazel讨论线程中讨论
在cd
intoout\u dir
之后,作为参数提供给二进制文件的文件路径不再有效,可以通过在它们前面加来修复它们。
s。如果要修复的文件位于depset
中,并且您需要在不将depset
转换为列表的情况下修复路径,则可以使用args.add\u all()的format\u each
参数预先设置路径修复
这不是最优雅的解决方案,但据我所知,不会影响功能。下面是一些示例代码:
#内部实现功能:
out\u dir=path.join(ctx.bin\u dir.path,ctx.label.package)
path_fix=“/”.join(len(out_dir.split(“/”)))*[“.”
args=ctx.actions.args()
args.add_all(文件\u depset,格式\u each=path\u fix+“/%s”)
actions.run_shell(…,command=“cd{out_dir};{binary}$@”(
out\u dir=out\u dir,
二进制=你的_二进制
))
由于输出预期根在特定位置,是否可以选择编写一个包装器,该包装器接受这些输出
参数,并在调用相关工具后将使用这些硬编码路径生成的结果复制/移动到声明的输出?我将在我将发布的问题答案中对此作出回应。由于输出预期在特定位置扎根,因此是否可以选择编写一个包装器,该包装器接受这些输出
参数,并在调用问题中的工具后,将使用这些硬编码路径生成的结果复制/移动到声明的输出?我将在我将发布的问题答案中对此做出回应。