吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 452|回复: 3
收起左侧

[经验求助] Python 使用yaml.dump修改文件后,调用另外的EXE文件,但是读取的文件还是原内容

[复制链接]
kaijie117 发表于 2025-2-16 08:51
40吾爱币
本帖最后由 kaijie117 于 2025-2-16 08:58 编辑

[Asm] 纯文本查看 复制代码
    def CopyConfig(self,WebName):
        Newpath=self.WorkPath+'/'+WebName+'/'
        shutil.copy(self.WorkPath+'/main.exe',Newpath)
        shutil.copy(self.WorkPath+'/config.yaml',Newpath)
    def read_yaml_all(self,WebName):
        try:
            with open(self.WorkPath+'/'+WebName+'/'+'config.yaml','r',encoding='utf-8') as file:
                data=yaml.load(file,Loader=yaml.FullLoader)
                return data
        except:
            return None
    def ChangeYaml(self,WebName):
        old_data=self.read_yaml_all(WebName)
        old_data['key']=WebName
        old_data['input']=WebName+'.csv'
        old_data['output']=WebName+'_out.csv'
        with open(self.WorkPath+'/'+WebName+'/'+'config.yaml','w',encoding='utf-8') as file:
            yaml.dump(old_data,file,sort_keys=True,allow_unicode=True)
        return
    def OpenEXE(self,WebName):
        # event = threading.Event()
        # event.wait(5)
        ExePath=self.WorkPath+'\\'+WebName+'\\'+'main.exe'
        print(ExePath)
        os.startfile(ExePath)


self.path 是用os.getcwd()获取的.py当前运行路径
我将yaml文件和EXE批量复制到了子文件夹中,用于后续的批处理运行
使用yaml.load读取文件内容, yaml.dump 修改文件内容

后面调用了子目录下的EXE,该EXE在默认手动启动的情况下,是读取EXE运行目录的下yaml文件内容
结果出现读取的yaml文件内容还是未修改的内容


已做的检查:
1.EXE运行的路径正确
2.yaml已被修改
3.单独运行该EXE正常读取子目录下的yaml文件

怀疑原因:
1.os.startfile调用的EXE,判断路径还是在.py代码运行的路径下,而不是子目录
2.在.py运行中,yaml内容保存在缓存中,调用EXE时,读取的是缓存中的旧内容


请大佬能帮忙提供个解决方案

最佳答案

查看完整内容

返回的是你当前的工作目录而非文件的目录,如果你的 exe 中也是使用同样的方法读取 yaml,那么获取到的就是你当前的工作目录即 self.WorkPath

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Arcticlyc 发表于 2025-2-16 08:51
[Asm] 纯文本查看 复制代码
os.getcwd
返回的是你当前的工作目录而非文件的目录,如果你的 exe 中也是使用同样的方法读取 yaml,那么获取到的就是你当前的工作目录即 self.WorkPath

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
kaijie117 + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| kaijie117 发表于 2025-2-16 09:41
Arcticlyc 发表于 2025-2-16 09:05
返回的是你当前的工作目录而非文件的目录,如果你的 exe  ...

那我用
os.chdir
切换到子目录
是不是可以解决
电脑不在身边,所以没办法测试,先问一下方向对不对,晚上再改
Arcticlyc 发表于 2025-2-16 10:47
kaijie117 发表于 2025-2-16 09:41
那我用
os.chdir
切换到子目录

可能是这个问题,还是得测试了才知道
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-4-18 08:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表