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

Python调用exe无法读取同目录JSON文件的解决方案咨询

问题原因

通过Python调用外部exe时,默认工作目录是Python脚本的运行目录,而非exe所在目录。双击exe时系统会自动将工作目录设为exe的路径,所以Consults.exe能正常读取同目录JSON;但用subprocess/os.system调用时,工作目录不对,导致程序找不到JSON文件。你之前修改PATH的思路有误,PATH是用来查找可执行文件的路径,和当前程序读取本地配置文件的路径无关。

解决方案

核心是显式将工作目录设置为exe所在的文件夹,以下是正确的实现方式:

使用subprocess模块(推荐)

subprocess的run和Popen方法都支持cwd参数,直接指定工作目录即可:

path_unzip = 'D:\\Test'
path_program = 'Consults.exe'

# 同步执行程序
subprocess.run([path_program], cwd=path_unzip)

# 异步执行程序
subprocess.Popen([path_program], cwd=path_unzip)

也可以传入exe的完整路径,效果一致:

subprocess.run([f"{path_unzip}\\{path_program}"], cwd=path_unzip)

使用os.system

需要先切换到exe所在目录(Windows下切换盘符要加/d参数),再执行程序:

path_unzip = 'D:\\Test'
path_program = 'Consults.exe'

# 同步执行
os.system(f'cd /d "{path_unzip}" && "{path_program}"')

# 用start打开新窗口异步执行
os.system(f'cd /d "{path_unzip}" && start "" "{path_program}"')

注意start后的空字符串是窗口标题参数,必须明确传入,否则start会把exe路径当成窗口标题,无法正常启动程序。

验证方法

可以在Consults.exe中添加打印当前工作目录的代码,确认调用时的工作目录是否正确。比如如果是Python编写的exe,可加入print(os.getcwd());如果是C#编写的exe,可加入Console.WriteLine(Directory.GetCurrentDirectory())。

内容的提问来源于stack exchange,提问作者J.N.N

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:10:30