在python中,如果模块调用另一个模块的函数,该函数是否可以访问第一个模块的文件路径?

时间:2011-08-11 12:05:57

标签: python module filepath

不将其作为参数传递......

实施例。在test1.py中:

def function():
    print (?????)

并在test2.py

import test1

test1.function()

是否可以写?????所以运行test2.py打印出'test2.py'或完整的文件路径? __ 文件 __ 会打印出'test1.py'。

4 个答案:

答案 0 :(得分:3)

这可以使用sys._getframe()

来实现
% cat test1.py
#!/usr/bin/env python

import sys

def function():
    print 'Called from within:', sys._getframe().f_back.f_code.co_filename

test2.py看起来很像你的import已修复:

% cat test2.py
#!/usr/bin/env python

import test1

test1.function()

试运行......

% ./test2.py 
Called from within: ./test2.py

N.B:

  

CPython实现细节:此函数仅用于内部和专门用途。并不保证在Python的所有实现中都存在。

答案 1 :(得分:1)

您可以先获得来电者的框架。

def fish():
    print sys._getframe(-1).f_code.co_filename

答案 2 :(得分:0)

如果我理解正确,你需要的是:

import sys
print sys.argv[0]

它给出了:

$ python abc.py 
abc.py

答案 3 :(得分:0)

这是你要找的吗?

test1.py:

import inspect
def function():
  print "Test1 Function"
  f = inspect.currentframe()
  try:
    if f is not None and f.f_back is not None:
      info = inspect.getframeinfo(f.f_back)
      print "Called by: %s" % (info[0],)
  finally:
    del f

test2.py:

import test1
test1.function()
$ python test2.py
Test1 Function
Called by: test2.py