展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > Python获取当前程序名称的多种方法

Python获取当前程序名称的多种方法

Python获取当前程序名称有多种方法:基础场景使用sys.argv[0]或__file__配合os.path.basename来获取;打包后需判断sys.frozen并取sys.executable;Jupyter环境依赖IPython配置;此外也可用inspect或psutil模块;最佳实践推荐pathlib实现跨平台与路径安全处理。

本文目录

    在 Python 开发中,获取当前运行程序的名称,看似简单,实则藏着不少细节。尤其是当你需要应对不同运行环境、打包后的可执行文件,甚至是 Jupyter Notebook 时,方法选择会直接影响代码的健壮性。下面这份实用指南,从基础到进阶,帮你在各种场景下都能准确拿到程序名。

    基础方法(适用于脚本文件)

    1. 使用 sys.argv[0](最常用)

    这是最直接的思路——sys.argv[0] 就是脚本启动时传入的第一个参数,通常就是程序路径。配合 os.path.basename 提取纯文件名,干净利落。

    import sys
    import os
    # 获取包含路径的完整文件名
    full_path = sys.argv[0]
    # 提取纯文件名(不含路径)
    program_name = os.path.basename(full_path)
    print(f"当前程序名称: {program_name}")

    2. 使用 __file__ 特殊变量

    如果你在模块内部,__file__ 直接指向当前文件路径。注意,它可能返回相对路径,但用 os.path.basename 处理一下就行。

    import os
    
    # 获取当前模块的文件路径
    current_file = __file__
    
    # 提取文件名
    program_name = os.path.basename(current_file)
    
    print(f"当前程序名称: {program_name}")
    

    高级场景处理

    1. 处理打包后的可执行文件(PyInstaller)

    当程序被 PyInstaller 打包成 .exe 后,sys.argv[0] 的行为会变化。这时需要判断 sys.frozen 属性,若是打包状态,程序名应取自 sys.executable。

    import sys
    import os
    
    def get_program_name():
        if getattr(sys, 'frozen', False):
            # 打包后的可执行文件
            return os.path.basename(sys.executable)
        else:
            # 普通脚本文件
            return os.path.basename(sys.argv[0])
    
    print(f"程序名称: {get_program_name()}")
    

    2. 获取不带扩展名的程序名

    有时你只需要“myscript”而不是“myscript.py”。用 os.path.splitext 轻松去掉扩展名。

    import os
    import sys
    
    def get_base_name():
        full_name = os.path.basename(sys.argv[0])
        return os.path.splitext(full_name)[0]  # 移除扩展名
    
    print(f"基础名称: {get_base_name()}")  # 例如: "myscript" 而不是 "myscript.py"
    

    3. 处理符号链接(软链接)

    如果你的脚本被软链接调用,sys.argv[0] 可能指向链接本身。用 os.path.realpath 解析出真实路径再取文件名。

    import os
    
    def get_real_program_name():
        # 获取实际路径(解析符号链接)
        real_path = os.path.realpath(sys.argv[0])
        return os.path.basename(real_path)
    
    print(f"实际程序名称: {get_real_program_name()}")
    

    特殊场景解决方案

    1. Jupyter Notebook 环境

    在 Notebook 中,sys.argv[0] 和 __file__ 都不靠谱,需要借助 IPython 的配置信息来获取内核文件名。

    try:
        from IPython import get_ipython
        notebook_name = get_ipython().config['IPKernelApp']['connection_file'].split('/')[-1]
        print(f"Notebook 名称: {notebook_name}")
    except:
        print("不在 Jupyter 环境中")
    

    2. 获取调用者程序名称

    如果你想在函数内部知道是谁调用了它,可以借助 inspect 模块查看调用栈的上层文件。

    import inspect
    
    def get_caller_name():
        # 获取调用栈中上一层的文件名
        frame = inspect.stack()[1]
        return os.path.basename(frame.filename)
    
    def example_function():
        print(f"调用者程序: {get_caller_name()}")
    
    # 测试调用
    example_function()
    

    3. 获取程序完整路径信息

    有时需要同时拿到文件名、目录、绝对路径等全套信息,一个字典全搞定。

    import sys
    import os
    
    def get_full_program_info():
        return {
            "argv0": sys.argv[0],
            "basename": os.path.basename(sys.argv[0]),
            "dirname": os.path.dirname(sys.argv[0]),
            "absolute_path": os.path.abspath(sys.argv[0]),
            "real_path": os.path.realpath(sys.argv[0])
        }
    
    print("程序信息:", get_full_program_info())
    

    最佳实践

    1. 使用 pathlib(Python 3.4+)

    Python 3.4 引入的 pathlib 让路径操作更直观、更跨平台。推荐在新项目中使用。

    from pathlib import Path
    
    # 获取当前文件路径
    current_file = Path(__file__).resolve()
    
    # 获取程序名称
    program_name = current_file.name
    
    print(f"当前程序: {program_name}")
    

    2. 跨平台兼容解决方案

    Windows 和 Linux/Mac 的路径分隔符不同,显式地按 \\ 或 / 分割,能避免跨平台问题。

    import sys
    import os
    import platform
    
    def get_program_name():
        """跨平台获取当前程序名称"""
        if platform.system() == 'Windows':
            # Windows 路径处理
            return os.path.basename(sys.argv[0]).split('\\')[-1]
        else:
            # Linux/Mac 路径处理
            return os.path.basename(sys.argv[0]).split('/')[-1]
    
    print(f"程序名称: {get_program_name()}")
    

    3. 安全获取程序名称(避免异常)

    在极少数情况(如交互式环境)下,sys.argv[0] 可能为空。加上 try-except 兜底,保证不崩。

    import sys
    import os
    
    def safe_get_program_name(default="unknown"):
        try:
            return os.path.basename(sys.argv[0])
        except:
            return default
    
    print(f"程序名称: {safe_get_program_name()}")
    

    常见问题及解决方案

    问题:在交互式环境中获取名称

    当你在 Python 交互模式或 IDLE 中运行时,sys.argv[0] 可能是空字符串。先判断一下再处理。

    import sys
    
    if not sys.argv[0]:
        # 在交互模式中
        print("当前在交互模式中")
    else:
        # 在脚本文件中
        print(f"程序名称: {os.path.basename(sys.argv[0])}")
    

    问题:打包后资源路径错误

    打包后的程序,资源文件路径往往需要基于 sys.executable 所在目录来定位,而不是 __file__。

    import sys
    import os
    
    def get_base_path():
        if getattr(sys, 'frozen', False):
            # 打包后的可执行文件
            return os.path.dirname(sys.executable)
        else:
            # 普通开发环境
            return os.path.dirname(os.path.abspath(__file__))
    
    # 获取程序所在目录
    program_dir = get_base_path()
    print(f"程序所在目录: {program_dir}")
    

    问题:相对路径不可靠

    如果你用相对路径调用脚本,__file__ 返回的相对路径可能随工作目录变化。始终转为绝对路径,一劳永逸。

    import os
    
    # 总是使用绝对路径
    script_dir = os.path.dirname(os.path.abspath(__file__))
    program_name = os.path.basename(os.path.abspath(__file__))
    
    print(f"绝对路径程序名: {program_name}")
    

    方法选择指南

    场景推荐方法示例输出
    普通脚本os.path.basename(sys.argv[0])main.py
    模块开发os.path.basename(__file__)module.py
    打包应用os.path.basename(sys.executable)myapp.exe
    Jupyterget_ipython().config[...]kernel-1234.json
    跨平台Path(__file__).resolve().namescript.py

    说到底,选哪个方法取决于你的具体场景。对于绝大多数日常脚本,os.path.basename(sys.argv[0]) 已经足够简单可靠;如果追求更现代、更安全的写法,直接用 pathlib 就好。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。