如何在Python的script_4.py中获取初始执行脚本的文件名?
获取Python入口脚本文件名(无需参数传递)
你可以通过以下两种方法在script_4.py中获取入口脚本的文件名,无需通过参数传递:
方法1:使用sys.argv[0]
sys.argv的第一个元素始终是启动Python程序时指定的脚本文件路径,直接提取文件名即可:
import sys import os # 提取入口脚本的文件名 entry_script_name = os.path.basename(sys.argv[0]) print(entry_script_name) # 输出script_1.py/script_2.py/script_3.py
方法2:遍历调用栈(inspect模块)
通过inspect模块遍历调用栈,找到最顶层的帧(即入口脚本对应的执行帧),从中提取文件名:
import inspect import os def get_entry_script(): frame = inspect.currentframe() # 一直向上遍历到没有父帧的顶层帧 while frame.f_back is not None: frame = frame.f_back # 获取顶层帧对应的文件名 return os.path.basename(frame.f_code.co_filename) entry_script_name = get_entry_script() print(entry_script_name)
为什么之前的方法无效?
你之前用inspect.getfile(inspect.currentframe())得到的是script_4.py,因为currentframe()返回的是当前执行代码所在的帧(也就是script_4.py的执行帧),而非入口脚本的帧。必须向上遍历调用栈到最顶层,才能拿到入口脚本的信息。
内容的提问来源于stack exchange,提问作者Hyuntae Kim
相关产品推荐
相关产品推荐

