一、如何在运行时获取文件路径
#-*- 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)的信息。该模块主要提供四种类型的服务——类型核对、源代码获取、检阅类和函数以及检查解析器栈信息,它对获取运行时信息提供了很好的支持。