[关闭]
@wenshizhang 2016-08-23T17:13:40.000000Z 字数 2254 阅读 480

crmsh阅读笔记

crmsh suse实习 python


笔记

main.py

crm的入口是main模块中的run函数(crm模块调用了./crmsh/main模块的run函数),run函数顺序执行:

main_input_loop函数

循环接受用户输入并执行相应操作的函数。
执行流程:

  • 虽然调试过了,前面的判断操作还是不明白其意图
  • 设置上下文环境(不明白意图)
  • 循环开始
  • 用户输入命令,记为inp
  • 如果inp是None并且此时是在终端运行,执行退出函数。
  • 如果inp不是None,执行context模块中的run函数(执行inp对应的操作)
  • 如果在run函数执行过程中捕获到value异常,打印出异常
  • 如果在整个循环中捕获到keyborad异常(用户输入了ctrl+c),执行退出函数。

run函数执行流程:

  • 如果用户输入(参数line)为空或者line以#起始,直接返回
  • 更新栈顶指针(栈中存储的level,因此栈顶指针可以认为指向当前的level)
  • line是用户输入的数据(包括了用户想要执行的命令和参数),split参数和命令
  • 根据命令去当前的level下查找输入command的information(include function,type和name等等)
  • 如果没有查找到,打印出错信息返回
  • 如果command_info.type是level执行enter_level函数
  • 如果command_info.type是command,执行execute_command函数

enter_level函数就是创建一个新的level,并且压入栈(self.stack)。
enter_level函数执行:

  • 在创建level之前设置interactive(不明白这个标志是做什么用的)
  • 调用level函数创建新的level
  • 检查新创建的level是不是miss requires(??)
  • 调用stack的append函数,压新的level入栈
  • 清read缓存

execute_command函数就是根据输入的命令,调用对应的函数。
执行流程:
* 创建参数列表
* 检查参数是否合法(符合functions函数)
* 调用self.command_info.functions(command_info在main_input_loop函数中已经获取到了)
注意:command_info的functions成员填充的是command对应的处理函数。

问题

1、options.py中的成员分别代表什么意思?总是看到在判断options.interactive和options.batch?

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注