文章目录
递归展开filelist
有时候filelist中嵌套了很多层, 仿真报错时不太容易找到出错是的文件在哪个fileslist, 这时使用展开的filelist就比较容易定位问题.
code
dict_variables = dict()
dict_variables['STEM'] = '/project/xx/a0/work_dir'; #filelist中出现的环境变量, 在展开新filelist时用于打开对应文件.
def _parse_line_str(line):
for k, v in dict_variables.items():
#把变量替换为实际路径
line = re.sub(r'\$' + k + r'\b', v, line)
line = re.sub(r'\$\{' + k + r'\}', v, line)
return line
def _parse_filelist(s_one_file, depth=0):
_list = list()
_s_prefix = ' ' * (depth*4)
fin = open(s_one_file, 'r')
for line in fin:
line = _parse_line_str(line)
_o_match_filelist = re.match(r'^\s*-f\s+(\S+)\s*$', line)
if _o_match_filelist:
_list.append(f'{_s_prefix}//----------')
_list.append(f'{_s_prefix}//found a new filelist')
_list.append(f'{_s_prefix}//{line}')
_list.append(f'{_s_prefix}//----------')
#遇到新的filelist, 递归调用函数, 展开新的filelist
_s_new_filelist = _o_match_filelist.group(1)
_list.extend(_parse_filelist(_s_new_filelist, depth+1))
else:
#遇到普通文件, 或其它行(注释, 空行, -v -y +incdir等), 直接保留
_list.append(f'{_s_prefix}{line}')
fin.close()
return _list
def _write_output_file(list_lines):
fout = open(f'output.file', 'w')
for line in list_lines:
fout.write(f'{line}\n')
fout.close()
list_lines = _parse_filelist('tmb_rtl.f')
_write_output_file(list_lines)
1073

被折叠的 条评论
为什么被折叠?



