#!/usr/bin/python3
"""
Author:finger
Time:20180802
func:给每一行代码添加代码分析日志
"""
FILE_PATH ="./test_log.code"
"""
日志函数:
def log_message(a,b):
print(a,b)
"""
code_str="""
root = settings.TEMPLATES[0]["DIRS"][index]
if path.endswith(".html") or path.endswith(".o"):
from django.template.loader import render_to_string
context = {"DEBUG": settings.DEBUG}
advert_id = request.GET.get("advert", "")
if advert_id.isdigit():
from main.models import Advert
advert = Advert.objects.get(id=advert_id)
"""
import os
def handle(hand):
def get_block_py(s):
for i in s.split(" "):
if i!=" ":
return i
return ""
pass
def get_impt_block_py(s):
for i in s.split(" "):
if i=="from" or i=="import" or i=="def":
continue
return i
return " "
pass
def compu_space(strs):
for i in range(len(strs)):
if not strs[i].isspace():
return i
return 0
pass
def get_space_str(i):
if i==0:return " "
res=""
for j in range(i):
res+=" "
return res
pass
with open(os.path.basename(FILE_PATH)+".rsf","a+",encoding="utf-8") as fw:
with open(FILE_PATH,"r",encoding="utf-8") as f:
line = f.readline()
print(line)
add_line=""
while line:
line=line.replace("\n","")
space_str=get_space_str(compu_space(line))
if line.find("from") > 0 or line.find("import") > 0:
add_line=space_str+"log_message(\'导入 %s 新模块\",\'%s\')"%(get_impt_block_py(line),str(line))
elif line.find("def")>0:
add_line=space_str+"log_message(\'进入 %s 函数 \',\'\')"%(get_impt_block_py(line))
elif line.find(":")>0 and line.split(":")[1]=="":
add_line=space_str+" log_message(\'进入%s代码块\',\'%s\')"%(get_block_py(line),str(line))
elif line.find(":")>0 and line.split(":")[1]!="":
add_line=space_str+"log_message(\'执行 %s \',\'\')"%(str(line))
elif line.find("=")>0 and line.find("==")<0:
code = str(line[:line.find("=")])
add_line=space_str+"log_message(\'%%s\',\'%%s=%%s\')%%(str(\'%s\'),str(\'%s\'),str(%s))"%(str(line),code,code)
elif line.find("log_message")>0:
add_line=""
else :
add_line=space_str+" #log_message(\'执行代码块\',\'%s\')"%(str(line))
fw.write("\n")
fw.write(line)
if add_line!="":fw.write("\n")
fw.write("%s"%(add_line))
print(line)
line=f.readline()
if __name__=="__main__":
handle(1)