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
相关产品推荐
相关产品推荐

