不将其作为参数传递......
实施例。在test1.py中:
def function():
print (?????)
并在test2.py
中import test1
test1.function()
是否可以写?????所以运行test2.py打印出'test2.py'或完整的文件路径? __ 文件 __ 会打印出'test1.py'。
答案 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