我的知识记录

Python 打开文件夹或用默认程序打开文件:跨平台方法

用 Python 打开资源管理器定位文件夹、用系统默认程序打开文件、打开网址,跨 Windows/Mac/Linux 三种方案,附完整代码和注意事项。

场景痛点

脚本跑完生成了一堆报告文件,你还要手动去资源管理器里一层层点过去找。希望脚本执行完自动弹出输出目录,或者直接用系统默认看图软件打开刚生成的图片,或者用默认浏览器打开生成的 HTML 报告。跨平台脚本还要兼容 Windows、Mac、Linux,不能每台机器换一次写法。

用到的库

# 全部标准库,不需要 pip 安装
# os, subprocess, sys, webbrowser

完整代码

import os
import sys
import subprocess
import webbrowser


def open_in_file_manager(path):
"""在系统文件管理器里打开并定位到 path(文件或文件夹)"""
path = os.path.abspath(path)
if sys.platform.startswith("win"):
# Windows: /select, 会在资源管理器里选中这个文件
subprocess.Popen(["explorer", "/select,", path])
elif sys.platform == "darwin":
# Mac: -R 在 Finder 里高亮文件
subprocess.Popen(["open", "-R", path])
else:
# Linux: 直接打开所在目录
folder = path if os.path.isdir(path) else os.path.dirname(path)
subprocess.Popen(["xdg-open", folder])
print(f"已打开:{path}")


def open_with_default_app(path):
"""用系统默认程序打开文件(图片用看图软件、PDF 用阅读器)"""
path = os.path.abspath(path)
if sys.platform.startswith("win"):
os.startfile(path)
elif sys.platform == "darwin":
subprocess.Popen(["open", path])
else:
subprocess.Popen(["xdg-open", path])
print(f"已用默认程序打开:{path}")


def open_url(url):
"""用默认浏览器打开网址,跨平台最稳的方式"""
webbrowser.open(url)
print(f"已在浏览器打开:{url}")


def main():
# 1. 打开当前脚本所在目录
open_in_file_manager(".")

# 2. 用默认看图软件打开一张图
# open_with_default_app("./photos/test.jpg")

# 3. 用默认浏览器打开网址
open_url("https://www.baidu.com")


if __name__ == "__main__":
main()

代码讲解

  • sys.platform 判断当前操作系统:win32 是 Windows,darwin 是 Mac,linux 是 Linux,用一个函数分发三种命令。
  • Windows 的 explorer /select,路径 能在资源管理器里打开并选中文件,比单纯打开目录体验好。
  • os.startfile 是 Windows 独有的,调用系统 Shell 用关联程序打开文件,一行搞定;Mac/Linux 没有这个函数,分别用 openxdg-open
  • webbrowser.open(url) 是 Python 标准库,自动选系统默认浏览器,跨平台最稳,做自动化报告时直接弹浏览器。
  • subprocess.Popen 不等待子进程结束,脚本继续往下跑,不会卡在打开文件上。

运行结果

运行后会在系统文件管理器里打开当前目录;如果取消注释第二行,会用默认看图软件打开指定图片;最后用默认浏览器打开百度首页。脚本本身不阻塞,打开后立刻结束。

注意事项

  • os.startfile 只在 Windows 存在,跨平台脚本一定要用 sys.platform 判断,别直接调。
  • Linux 服务器没有图形界面,xdg-open 会报错,这个功能只适合桌面环境。
  • WSL 里跑 xdg-open 不能直接弹 Windows 资源管理器,需要单独配置 WSLg。
  • webbrowser.open 在 Linux 服务器上如果没装浏览器会失败,自动化部署脚本别依赖这个。
  • 路径带中文在 Windows 下没问题,但传给 subprocess 时建议用 list 形式,不要拼字符串,避免空格路径被拆错。

Python 打开文件夹或用默认程序打开文件:跨平台方法

标签:

更新时间:2026-09-14 20:36:42

上一篇:Python schedule 定时任务执行教程:轻量级任务调度入门

下一篇:Python 数字转中文大写金额:财务报销发票必备