You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在被导入的文件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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:52:17