如何从另一个Python脚本中调用使用absl flags参数的Python文件
解决方案
有两种常用的实现方式,按需选择即可:
方案1:通过subprocess调用(无需修改script1,适配性最高)
不需要改动script1的原有代码,直接把生成的参数拼成命令执行即可:
import subprocess # 此处为你在script2中已经生成的参数值 input1_val = "你生成的input1参数" input2_val = "你生成的input2参数" # 构造命令列表执行,避免字符串拼接的转义问题 run_cmd = [ "python", "script1.py", "--input1", input1_val, "--input2", input2_val ] # check=True表示script1运行出错时会直接抛出异常 subprocess.run(run_cmd, check=True)
如果需要捕获script1的运行输出,可在subprocess.run中添加capture_output=True参数。
方案2:直接导入script1模块调用
如果不想启动新进程,要在当前进程内直接调用script1逻辑,可以手动给absl的FLAGS赋值再调用入口:
首先确认script1的代码结构,标准absl脚本一般会把主逻辑抽成main函数:
# script1.py 示例结构 from absl import app from absl import flags FLAGS = flags.FLAGS flags.DEFINE_string("input1", "", "参数1说明") flags.DEFINE_string("input2", "", "参数2说明") def main(argv): # 脚本主逻辑 print(FLAGS.input1, FLAGS.input2) if __name__ == "__main__": app.run(main)
对应在script2中按以下方式调用即可:
import sys from absl import flags from script1 import FLAGS, main # 你生成的参数值 input1_val = "xxx" input2_val = "yyy" # 给FLAGS赋值 FLAGS.input1 = input1_val FLAGS.input2 = input2_val # 如果遇到flags已被解析的报错,可加下面这行 # FLAGS.unparse_flags() # 调用script1的主函数,第一个参数为脚本名,任意填写即可 main([sys.argv[0]])
注意:如果script1没有把主逻辑抽成独立的main函数,而是直接写在
if __name__ == "__main__"块里,这种方式无法直接使用,优先选方案1。
内容的提问来源于stack exchange,提问作者Beembo
相关产品推荐
相关产品推荐

