如何在Python被调用脚本中识别并打印发起调用的源脚本名称?
获取Python调用链的源头脚本名称
Python没有专门的内置函数直接返回调用链最顶端的源头脚本,但可以通过sys和inspect模块组合实现。
核心思路
调用栈的最底部就是最初启动的脚本,我们可以通过遍历调用栈定位它;如果遍历出现异常,sys.argv[0]可作为备选方案——直接执行脚本时,它就是启动脚本的路径。
实现代码(z.py中)
import sys import inspect import os def get_root_script(): # 从调用栈最底层(最早的调用)开始遍历 for frame_info in reversed(inspect.stack()): filename = frame_info.filename # 排除交互式环境、字节码文件等非用户脚本 if filename != '<stdin>' and not filename.endswith('.pyc') and '__pycache__' not in filename: return filename # 兜底返回启动脚本路径 return sys.argv[0] # 打印完整路径 print(get_root_script()) # 仅打印文件名 print(os.path.basename(get_root_script()))
测试场景
- x.py代码:
import y - y.py代码:
import z - 执行
python x.py,z.py会输出x.py(或完整路径,取决于执行目录)
注意事项
- 如果在交互式Python环境(如命令行)运行,该方法会返回
<stdin>,需根据场景自行判断处理。 - 对于pyinstaller等工具打包后的脚本,可能需要额外适配,但普通脚本场景完全适用。
内容的提问来源于stack exchange,提问作者LearningCpp
相关产品推荐
相关产品推荐

