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

Python跨目录调用EXE时相对路径失效的解决方法

解决方案

问题核心是html-to-pdf.exe会基于当前工作目录解析HTML中的相对路径,当Python脚本从仓库根目录运行时,工作目录与HTML文件所在目录不一致,导致资源加载失败。以下两种Python层面的解决方法无需修改HTML或EXE:

方法1:临时切换工作目录

先切换到HTML文件所在目录执行EXE,完成后恢复原工作目录,确保EXE以正确上下文解析相对路径:

import os
import subprocess

# 配置实际路径
exe_path = "C:/path/to/html-to-pdf.exe"
html_file = "./subdir/source.html"
output_pdf = "./subdir/output.pdf"

# 获取HTML文件的绝对目录
html_dir = os.path.dirname(os.path.abspath(html_file))
original_cwd = os.getcwd()

try:
    # 切换到HTML所在目录
    os.chdir(html_dir)
    # 调用EXE,仅传递HTML文件名和输出路径
    subprocess.run([exe_path, os.path.basename(html_file), output_pdf], check=True)
finally:
    # 恢复原工作目录
    os.chdir(original_cwd)

方法2:指定subprocess的工作目录(更简洁)

利用subprocess.run()的cwd参数,直接指定EXE运行时的工作目录为HTML文件所在目录,无需手动切换目录:

import os
import subprocess

# 配置实际路径
exe_path = "C:/path/to/html-to-pdf.exe"
html_file = "./subdir/source.html"
output_pdf = "./subdir/output.pdf"

# 获取HTML文件的绝对目录
html_dir = os.path.dirname(os.path.abspath(html_file))

# 调用EXE时指定工作目录
subprocess.run(
    [exe_path, os.path.abspath(html_file), os.path.abspath(output_pdf)],
    cwd=html_dir,
    check=True
)

原理说明

两种方法本质都是让html-to-pdf.exe在HTML文件所在目录下运行,此时EXE解析HTML中的相对CSS/JS路径时,会以该目录为基准,和你在命令行中cd到HTML目录后执行EXE的效果完全一致,无论Python脚本从哪个目录启动都能正常加载资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:33:27