0

所以我试图将 python 和 bazel 结合使用,我想知道是否有一种方法可以在通过 bazel 目标运行该脚本时传递 python 脚本参数的值。

所以这个想法是:

我有一些main.py文件接受 args 并执行一些逻辑

#main.py
import argparse

class ClassA:
  def __init__(self, arg1):
    pass
  #incredible logic happens here :D 


def parse_arguments():
    parser = argparse.ArgumentParser(description="....")
    parser.add_argument(
        "--arg1",
        required=True)

if __name__ == "__main__":
    ARGS = parse_arguments()
    ClassA(ARGS.arg1) # will execute whatever has to happen and return something

通常,为了运行这个脚本,我会运行类似的东西:

python -m main.py --arg1=val1

但现在我有兴趣在执行此脚本的同时为其设置 bazel 目标,例如:

#BUILD 

py_binary( 
    name = "binary1",
    srcs = ["main.py"],
    main = "main.py",
    visibility = ["//public"],
)

有没有办法使用类似的东西来运行该脚本: bazel run //path/to/py_binary --arg1=val1

如果不是在使用此 bazel 目标时运行该 python 脚本的替代方法是什么?

PS我正在使用Python 3.5+

4

1 回答 1

2

您可以通过将--要传递给二进制文件的命令行选项放在前面来做到这一点,如下所示:

bazel run //pkg:binary1 -- --arg1=val1

或者

bazel run -- //pkg:binary1 --arg1=val1

请参阅https://docs.bazel.build/versions/master/user-manual.html#run

于 2020-08-28T17:17:13.920 回答