一、如何在運作時擷取檔案路徑
#-*- coding:utf-8 -*-
import os
import inspect
#擷取目前frame對象
current_frame = inspect.stack()[0][0]
try:
#檔案名
filename = inspect.getfile(current_frame)
filepath = os.path.abspath(filename)
print filepath
except Exception, e:
raise e
finally:
#删除reference cycles,避免記憶體浪費
del current_frame
二、如何實作主函數裝飾器
#-*-encoding:utf-8-*-#
"""
main_decorator.py
"""
import sys
import inspect
def main(fn):
"""
裝飾器,用來辨別子產品的主函數。
@main
def mymain_function():
# function body
該函數用來取代 if __name__ == '__main__' 語句。
"""
caller_frame = inspect.stack()[1][0]
try:
if caller_frame.f_locals['__name__'] == '__main__':
args = sys.argv[1:]
fn(*args)
except Exception, e:
raise e
finally:
del caller_frame
#-*- encoding:utf-8 -*-
from main_decorator import main
@main
def hello_main_decorator():
print 'hello main decorator!'
三、inspect子產品備忘
inspect子產品能夠在運作時擷取對象(live objects)的資訊。該子產品主要提供四種類型的服務——類型核對、源代碼擷取、檢閱類和函數以及檢查解析器棧資訊,它對擷取運作時資訊提供了很好的支援。