Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中获取调用函数的脚本的名称?_Python - Fatal编程技术网

如何在python中获取调用函数的脚本的名称?

如何在python中获取调用函数的脚本的名称?,python,Python,我知道\uuuu文件\uuuu包含包含代码的文件名,但是有没有办法获取调用函数的脚本/文件的名称 如果我有一个名为filenametest_b.py的文件: def printFilename(): print(__file__) from filenametest_b import * printFilename() 我在filenametest_a.py中导入函数: def printFilename(): print(__file__) from filenamet

我知道
\uuuu文件\uuuu
包含包含代码的文件名,但是有没有办法获取调用函数的脚本/文件的名称

如果我有一个名为
filenametest_b.py的文件

def printFilename():
    print(__file__)
from filenametest_b import *

printFilename()
我在
filenametest_a.py
中导入函数:

def printFilename():
    print(__file__)
from filenametest_b import *

printFilename()
我得到:

C:\Users\a150495>python filenametest_a.py
C:\Users\a150495\filenametest_b.py

是否可以在
b
文件中执行某些操作以打印
a
文件的名称?

您可以打印
sys.argv[0]
以获取脚本文件名

要获取调用方的文件名,您需要使用获取调用帧,然后可以从中检索文件名:

import inspect, sys

print inspect.getsourcefile(sys, sys._getframe(1))

您可以打印
sys.argv[0]
以获取脚本文件名

要获取调用方的文件名,您需要使用获取调用帧,然后可以从中检索文件名:

import inspect, sys

print inspect.getsourcefile(sys, sys._getframe(1))

问得有点太早了,我想我已经解决了

我只是在
inspect
模块中四处看看:

我将其添加到
filenametest_b.py
文件中:

def printCaller():
    frame,filename,line_number,function_name,lines,index=\
        inspect.getouterframes(inspect.currentframe())[1]
    print(frame,filename,line_number,function_name,lines,index)
因此:

C:\Users\a150495\filenametest_b.py
(<frame object at 0x000000000231D608>, 'filenametest_a.py', 5, '<module>', ['printCaller()\n'], 0)
C:\Users\a150495\filenametest\u b.py
(,'filenametest_a.py',5',['printCaller()\n'],0)

所以这应该行得通。

问得有点太早了,我想我刚刚解决了它

def printFilename():
    import traceback 
    print traceback.extract_stack()[-2][0] 
我只是在
inspect
模块中四处看看:

我将其添加到
filenametest_b.py
文件中:

def printCaller():
    frame,filename,line_number,function_name,lines,index=\
        inspect.getouterframes(inspect.currentframe())[1]
    print(frame,filename,line_number,function_name,lines,index)
因此:

C:\Users\a150495\filenametest_b.py
(<frame object at 0x000000000231D608>, 'filenametest_a.py', 5, '<module>', ['printCaller()\n'], 0)
C:\Users\a150495\filenametest\u b.py
(,'filenametest_a.py',5',['printCaller()\n'],0)

所以这应该是可行的。

您可能会解析
sys.argv[0]
您可能会解析
sys.argv[0]
inspect.getsourcefile(sys.\u getframe(1))
工作正常。谢谢。
inspect.getsourcefile(sys.\u getframe(1))
工作正常。谢谢
def printFilename():
    import traceback 
    print traceback.extract_stack()[-2][0]