我正在尝试使用astor和python AST提取日志语句前后的源代码行,这要感谢我前面的StackOverflow问题的答案:
import ast
import astor
import json
class LogPrinter(astor.TreeWalk):
def pre_Call(self):
if (isinstance(self.cur_node.func, ast.Attribute) and
isinstance(self.cur_node.func.value, ast.Name) and
(self.cur_node.func.value.id.lower() == "logging" or self.cur_node.func.value.id.lower() == "log" or self.cur_node.func.value.id.lower() == "logger")
):
print(astor.to_source(self.cur_node))
def post_Call(self):
if (isinstance(self.cur_node.func, ast.Attribute)):
print(astor.to_source(self.cur_node))
我可以从上述代码中获取日志语句,但无法获取完整的前面和下面的语句:
例如:
def db_contecton(string url):
if URL:
#multiline logger
logger.debug(
"connecting to
URL : " +url)
#multiline source code
db = db
.conn.
init()
db.connect(url)
#multiline logger
logger.
info("connection
to DB
successful")
我试图获得的输出是: (一)
if url:
logger.debug("connecting to URL : " +url)
db = db.conn.init()
及 (二)
db = db.conn.init()
db.connect(url)
logger.info("connection to DB successful")
注:多行记录器和源代码转换为单行
在这一点上,我可以提取记录器并获得以下没有完整源代码的语句: 我当前的输出是
#the statement above logger is missing
logger.debug("connecting to URL : " +url)
db.conn.init() #the db variable is missing should be db = db.conn.init()
以上只是python源代码的示例片段,逻辑上可能不正确
我不确定我是否理解了您的问题:您是否希望将python文件解析为文本,并提取上面的1行和下面的1行,只要它有一些与日志相关的代码
您可以将文件读取为文本,将其分成几行,与所需的单词匹配(例如:logger,logging,log),保留这些行的索引,然后对其执行任何操作:
它检查每一行中每个给定文件的每个所需单词。 但这不是表演性的。 但我相信它解决了你的问题
相关问题 更多 >
编程相关推荐