问题描述
因此,我尝试将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
但是现在我有兴趣在执行此脚本的同时为其设置目标,例如:
#BUILD
py_binary(
name = "binary1",srcs = ["main.py"],main = "main.py",visibility = ["//public"],)
是否可以使用类似以下的方式运行该脚本:
bazel run //path/to/py_binary --arg1=val1
如果不是,使用此bazel目标时运行该python脚本的替代方法是什么?
P.S。我正在使用Python 3.5 +
解决方法
您可以通过在要传递给二进制文件的命令行选项之前放置--
来实现此目的,例如:
bazel run //pkg:binary1 -- --arg1=val1
或
bazel run -- //pkg:binary1 --arg1=val1
请参见https://docs.bazel.build/versions/master/user-manual.html#run