代码实践
module2.py:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'shouke'
import sys
import os
import traceback
def get_cur_info():
# 获取函数名称
print('函数名称:', sys._getframe().f_code.co_name)
# 获取函数所在模块文件名
print('获取函数所在模块文件名:', sys._getframe().f_code.co_filename)
result = traceback.extract_stack()
caller = result[len(result)-2]
# 获取调用函数的模块文件绝对路径
file_path_of_caller = str(caller).split(',')[0].lstrip('<FrameSummary file ')
print('调用函数的模块文件绝对路径:', file_path_of_caller)
# 调用函数的模块文件名
file_name_of_caller = os.path.basename(file_path_of_caller) # 获取被调用函数所在模块文件名称
print('调用函数的模块文件名:', file_name_of_caller)
# 获取函数被调用时所处模块的代码行
# 方法1
print('函数被调用时所处模块的代码行:', sys._getframe().f_back.f_lineno)
# 方法2
code_line_when_called = sys._getframe().f_back.f_lineno
print('函数在被调用时所处代码行数:',code_line_when_called)
module1.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'shouke'
from study1 import get_cur_info
get_cur_info()

结果:

使用场景
设置配置文件路径
思路:获取被调用函数所在模块文件名,然后获取其路径,同配置文件所在路径比较,这样基于模块文件路径、父级路径,可知配置文件所在的相对路径,这样不管当前工作目录在哪里,都可以获取到配置文件的绝对路径。
例子:设置配置文件路径为“相对路径”
log.py中原代码:
#……其它略
logsignleton = LogSignleton('./conf/log.conf')
logger = logsignleton.get_logger()
按上述方式编写代码,存在问题,当进入到plugin目录,并执行pluginfunc.py时,会提示找不到LOGGING session,也就是说找不到log.conf,解决方式,修改log.py如下:
co_filepath = sys._getframe().f_code.co_filename
head, tail = os.path.split(co_filepath)
conf_filepath = os.path.join(head, '../conf/log.conf')
conf_filepath = os.path.normpath(conf_filepath)
logsignleton = LogSignleton(conf_filepath)
logger = logsignleton.get_logger()
当然,我们也可以在模块中通过 __file__
获取logg.py自身文件的绝对路径,如下:
head, tail = os.path.split(os.path.abspath(__file__))
文章转载自授客的知识库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




