代码调试
接着上一章节,在cmdline模块中的main方法中或者直接在__main__模块中的main方法中,改成如下代码:
if __name__ == '__main__': execute(['scrapy','bench'])
并在此方法处下断点,随后继续debug模式调试
1.获取项目配置:
if settings is None: settings = get_project_settings() # set EDITOR from environment if available try: editor = os.environ['EDITOR'] except KeyError: pass else: settings['EDITOR'] = editor
(读取系统默认的default_settings配置文件,并存储到内存中
读取项目的cfg文件,通过读取cfg的[settings]选项下的default属性,获取项目的配置文件,并将重复配置覆盖之前内存中的default_settings配置
['/etc/scrapy.cfg', 'c:\\scrapy\\scrapy.cfg', '/home/wangsir/.config/scrapy.cfg', '/home/wangsir/.scrapy.cfg']
['/etc/scrapy.cfg', 'c:\\scrapy\\scrapy.cfg', '/home/wangsir/.config/scrapy.cfg', '/home/wangsir/.scrapy.cfg', '/home/wangsir/code/sourceWorkSpace/scrapy/scrapy.cfg'])
2.通过以下方法查看你当前执行命令的位置是否在一个scrapy项目内:
inproject = inside_project()
(通过对比每个指令类的requires_project属性,完成是否可以显示该指令或者说该指令是否可用的判定,这也就是为什么有的指令没有显示在scrapy -help中)
3.获取命令字典:
cmds = _get_commands_dict(settings, inproject)
4.返回当前命令名字(key=命令:value=实例对象):
cmdname = _pop_command_name(argv)
5.初始化一个指令解析对象:
parser = optparse.OptionParser(formatter=optparse.TitledHelpFormatter(), \ conflict_handler='resolve')
6.指令判定:
if not cmdname: