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

如何获取被调用的Python脚本名称而非当前执行脚本名

获取被调用子脚本的文件名解决方案

针对你在Build_all.py中调用多个子脚本,却无法在子脚本中获取自身文件名的问题,分以下几种场景给出可行方案:

场景1:子脚本通过import加载(推荐)

如果你的Build_all.py是通过import方式引入子脚本,比如:

# Build_all.py
import First_build
import Second_build

那么在First_build.py/Second_build.py中直接使用__file__即可获取自身的文件路径,提取文件名可以结合os.path.basename():

# First_build.py
import os
current_script = os.path.basename(__file__)
print(current_script)  # 输出: First_build.py

这是Python模块调用的标准方式,__file__属性会准确指向当前模块的文件路径,不会受主脚本影响。

场景2:子脚本通过exec直接执行代码内容

如果你的Build_all.py是通过读取子脚本内容并执行(比如exec(open("First_build.py").read())),此时代码运行在主脚本的上下文里,默认的__file__会指向主脚本。解决方法是在调用时手动给子脚本传入__file__参数:

# Build_all.py
def run_script(script_path):
    with open(script_path, 'r', encoding='utf-8') as f:
        script_code = f.read()
    # 构造局部命名空间,传入子脚本的路径作为__file__
    local_namespace = {'__file__': script_path}
    exec(script_code, globals(), local_namespace)

# 调用子脚本
run_script("First_build.py")
run_script("Second_build.py")

之后在子脚本中就能正常使用__file__获取自身路径:

# First_build.py
import os
current_script = os.path.basename(__file__)
print(current_script)  # 输出: First_build.py

场景3:子脚本作为独立进程启动

如果允许子脚本以独立进程运行,可使用subprocess模块调用,这样子脚本的上下文完全独立,__file__或sys.argv[0]都能正常获取自身文件名:

# Build_all.py
import subprocess

# 调用子脚本,根据你的Python环境调整命令(比如python3)
subprocess.run(["python", "First_build.py"])
subprocess.run(["python", "Second_build.py"])

子脚本中无需额外处理,直接使用:

# First_build.py
import os
import sys

# 两种方式都可行
current_script1 = os.path.basename(__file__)
current_script2 = os.path.basename(sys.argv[0])
print(current_script1)  # 输出: First_build.py

内容的提问来源于stack exchange,提问作者Vincent

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 08:37:41