![](https://i-blog.csdnimg.cn/blog_migrate/81f3b7338daf0349dfb0a2ee243f29e1.jpeg)
3、Reeading Rasa Source Code —— entry
在创建各命令的参数设置后,rasa 又对 log 设置、第三方包的 log 设置以及 TensorFlow 的 cpu/gpu 运行环境等做了一些准备工作,这部分的内容比较简单,就不做介绍。
# rasa.__main__.main()
if hasattr(cmdline_arguments, "func"): # 如果具有 func 属性,则执行 func
rasa.utils.io.configure_colored_logging(log_level) # 利用 coloredlogs 配置带颜色的日志输出
set_log_and_warnings_filters() # 设置日志和警告信息过滤器
rasa.telemetry.initialize_telemetry() # 初始化遥测(略)
rasa.telemetry.initialize_error_reporting() # 初始化遥测的错误报告(略)
cmdline_arguments.func(cmdline_arguments) # 进入到各子命令的执行入口中
在此前的 CLI 部分,我们介绍过,各个子命令最终都有一个 set_defaults
方法,该方法的参数便是该命令在执行时具体执行的函数。也就是说正常情况下,cmdline_arguments
都有 func
属性的。接下来两行是采用第三方包 coloredlogs 对日志的颜色做了一些修饰,以及对日志的警告信息进行过滤器设置。再接下来两行是 rasa 执行遥测相关的内容,只是方便 rasa 官方团队收集一些 rasa 用户在使用过程中的一些行为,该部分可整体忽略掉。
最后一句 cmdline_arguments.func(cmdline_arguments)
,则是进入到指定命令在 set_defaults
方法的参数中执行的函数下。此处我们以 rasa train
命令为例,
此时程序会进入到
# rasa.cli.train.add_subparser()
...
train_parser.set_defaults(func=lambda args: train(args, can_exit=True))
# 运行 rasa train 命令会运行 train() 函数,附带函数参数 can_exit=True
...
从而进入到下面的 train(args: argparse.Namespace, can_exit: bool = False)
中。
对于其他命令的入口函数也是如此,这些函数相当于各个命令的主函数,接下来我们便从这些函数入手开始深度阅读。