如何在被导入的文件B中获取文件A的文件名以实现无参PDF函数
解决无参调用PDF函数自动获取调用脚本路径的问题
修改文件B的PDF函数
直接调整文件B中的PDF函数,让它支持无参调用时自动识别调用者(文件A)的路径:
import inspect import os def PDF(input_file: str = None, output_file: str = None): # 未传入输入文件时,自动获取调用脚本的路径 if input_file is None: # 栈帧层级:当前是PDF函数 → f_back是调用PDF的代码所在层(文件A) caller_frame = inspect.currentframe().f_back.f_back input_file = caller_frame.f_code.co_filename # 转换为绝对路径,规避相对路径或临时文件路径问题 input_file = os.path.abspath(input_file) # 未传入输出文件时,自动生成同名PDF路径 if output_file is None: file_base = os.path.splitext(input_file)[0] output_file = f"{file_base}.pdf" # 执行原有的PDF生成逻辑 # CODE TO MAKE A PDF OUT OF THE FILE I NEED TO TURN IN # 示例:打印生成信息(可替换为实际生成代码) print(f"正在从 {input_file} 生成PDF到 {output_file}")
文件A中的调用代码
文件A只需导入后直接无参调用,额外代码极少:
from B import PDF # 无参调用,自动使用当前文件生成同名PDF PDF()
为什么之前的方法失效?
你之前的get_caller_filename只取了inspect.currentframe().f_back,这一层对应的是调用get_caller_filename的代码(即文件B中的PDF函数),所以拿到的是文件B的路径。而我们需要的是调用PDF函数的代码所在层(文件A),因此需要多往上取一层栈帧:f_back.f_back。
注意事项
- 如果存在多层嵌套调用(比如A中还有其他函数包裹PDF调用),需要根据实际栈帧层级调整
f_back的次数,但你的场景是直接调用,两层足够。 - 使用
os.path.abspath可以避免相对路径或临时文件(如__pycache__)的路径问题。
内容的提问来源于stack exchange,提问作者Charles Wszalek
相关产品推荐
相关产品推荐

