python脚本名_python获取类名函数名、脚本路径

1).python获取当前运行的类名函数名import inspect

def get_current_function_name():

return inspect.stack()[1][3]

class MyClass:

def function_one(self):

print "%s.%s invoked"%(self.__class__.__name__, get_current_function_name())

if __name__ == "__main__":

myclass = MyClass()

myclass.function_one()

动态获取当前运行的函数名很方便,特别是对于一些debug系统来说

2).获取脚本名(三种方式)import os,sys,inspect

def path():

return inspect.getfile(sys.modules[__name__])

def path2():

return inspect.getfile(inspect.currentframe())

def path3():

return inspect.stack()[1][1]

print path()

print path2()

print path3()

打印结果:

34.py

34.py

34.py

分——割——————线——————————————————————

以下三个py文件是有联系的,后面一个引用前面一个中的相关函数,测试顺序pathtest.py-->aaa.py-->test01.py,通过它们的打印结果,可以印证python获取路径的三种情况。|---bin

|---test01.py

|---src

|---aaa.py

|---testcase

|---group01

|---pathtest.py

Python获取路径的三种情况:获取函数定义所在脚本路径,获取调用函数脚本所在路径,获取启动Python解释器脚本所在路径。最常用的方式就是pathtest.py中current_path中获取路径的方式。

inspect.getfile(inspect.currentframe())和inspect.stack()[0][1]得到的是定义该函数的脚本文件的路径,包含脚本名称

inspect.stack()[1][1]得到的是调用该脚本的脚本文件的路径,包含脚本名称

os.path.dirname(os.path.realpath(sys.argv[0]))得到的是执行python x.py命令时,脚本参数x.py(也就是argv[0])所在路径

os.path.dirname(os.path.realpath(sys.path[0])),根据sys.path[0],sys.path[1],sys.path[2]取不同的值,获取调用函数脚本所在路径或者获取启动Python解释器脚本所在路径

1.  pathtest.py

获取脚本路径(五种方式):

cd /soft/testcase/group01

vim pathtest.py#coding:utf-8

import os,sys,inspect

def path():

dir = inspect.getfile(sys.modules[__name__])

return os.path.abspath(os.path.dirname(dir))

def path1():

dir = os.path.realpath(sys.argv[0])

if os.path.isfile(dir):

path=os.path.dirname(dir)

return os.path.abspath(path)

def path2():

this_file = inspect.getfile(inspect.currentframe())#得到定义该函数的脚本路径

return os.path.abspath(os.path.dirname(this_file))

def script_path():

caller_file = inspect.stack()[0][1]#stack()[0][1]得到定义该函数的脚本路径,stack()[1][1]获取调用该函数的脚本所在路.径

return os.path.abspath(os.path.dirname(caller_file))

def current_path():

dir = os.path.realpath(sys.path[0])

if os.path.isfile(dir):

path=os.path.dirname(dir)

return os.path.abspath(path)

else:

caller_file=inspect.stack()[1][1]

return os.path.abspath(os.path.dirname(caller_file))

#print path()

#print path1()

#print path2()

#print script_path()

#print current_path()

打印结果:

/soft/testcase/group01

/soft/testcase/group01

/soft/testcase/group01

/soft/testcase/group01

/soft/testcase/group01

2.  aaa.py

cd /soft/src

vim aaa.pyimport os

import sys

import inspect

sys.path.append("../testcase/group01")

import pathtest

def caller_func():

caller_path=pathtest.script_path()

return caller_path

def def_func():

def_path=pathtest.path2()

return def_path

def real_func():

real_func=pathtest.path1()

return real_func

def curr_func():

cur_func=pathtest.current_path()

return cur_func

#print caller_func()

#print def_func()

#print real_func()

#print curr_func()

打印结果:

/soft/testcase/group01

/soft/testcase/group01

/soft/src

/soft/src

3.  test01.py

cd /soft/bin

vim test01.pyimport os,sys,inspect

sys.path.append("../src")

import aaa

def func_a():

return aaa.caller_func()

def func_b():

return aaa.def_func()

def func_c():

return aaa.real_func()

def func_d():

return aaa.curr_func()

print func_a()

print func_b()

print func_c()

print func_d()

打印结果:

/soft/testcase/group01

/soft/testcase/group01

/soft/bin

/soft/src

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值