有時候打印調(diào)試信息時,希望獲取當前文件名粤咪,有幾種方法:
一验烧、獲取當前文件名3種方法
1.使用python文件默認的‘ file ’屬性
os.path.basename(__file__)
2.使用sys.argv[0]
os.path.basename(sys.argv[0])
3.使用sys._getframe()
os.path.basename(sys._getframe().f_back.f_code.co_filename)
二虐拓、獲取上級(調(diào)用者)文件名方法
而有時候在封裝log時沼沈,log.debug('this is msg')
是在外部調(diào)用的,所以無法定位到具體輸出最終lineno嘱函、function甘畅、filename,而這里剛好通過sys._getframe()來完成实夹。
1.獲取當前文件的frame
cur_frame = sys._getframe()
cur_filename = os.path.basename(cur_frame.f_code.co_filename)
cur_funcname = cur_frame.f_code.co_name
cur_lineno = cur_frame.f_lineno
print(cur_filename)
print(cur_funcname)
print(cur_lineno)
2.獲取調(diào)用者所在文件的frame
back_frame = sys._getframe().f_back
back_filename = os.path.basename(back_frame.f_code.co_filename)
back_funcname = back_frame.f_code.co_name
back_lineno = back_frame.f_lineno
print(back_filename)
print(back_funcname)
print(back_lineno)
好了橄浓,不管是當前文件還是調(diào)用者文件信息都能獲取,且調(diào)用者可以不斷的back逆推亮航,根據(jù)業(yè)務需要而定荸实。