【BUG记录】关于os.chdir()改变路径导致的FileNotFound报错

问题背景

这几天在做大创项目,要写一个画图的GUI界面,有一个功能需要调用main.py同目录下的running文件夹下的cal.exe文件。

在这里插入图片描述

经过大佬指点,代码为:

def calculation(self):
"""调用exe文件计算"""
   	   os.chdir('running')  # 调用同目录下子文件夹里的exe文件
       Cal = 'Cal.exe'
       os.system(Cal)

问题来了,因为计算的要求,我要调用两次calculation函数,第一次执行,没问题,画图也OK,第二次执行,就报错了,报错内容为:
FileNotFoundError: [WinError 2] 系统找不到指定的文件 'running'

问题思考

报错代码可以很轻易定位到问题就出在第二次的os.chdir()

当时虽然是大佬告诉我这么做可以,但是可能也没想到我会多次调用这个exe文件。

在观察该代码的结构、以及查询该代码的作用时,脑子里灵光一闪,找不到running文件夹是不是因为此时main.py程序在os.chdir()的作用下进入了running文件夹还没出来呢?

running文件夹下可没有同名的running子文件夹~

推测合理,直接测试!

问题解决

思路:如果os.chdir()可以改变程序的执行路径的话,那么只需要记住最开始的程序路径,每次调用完同目录下子文件夹内的exe文件后再用os跳会原目录即可。

import os

class demo:
    def __init__(self):
    """初始化"""
        self.origin_path = os.getcwd() # 用getcwd记住源程序路径,方便后续跳回

    def calculation(self):
    """调用exe文件计算"""
        os.chdir('running')  # 调用同目录下子文件夹里的exe文件
        Cal = 'Cal.exe'
        os.system(Cal)
        os.chdir(self.origin_path)  # 跳回源程序目录

结果:运行成功,没有报错(〃‘▽’〃)

思考

这个bug本质上不难排除,但是重点还是在于提升对于路径变化的敏感度,

也算加强了对相对路径这一概念的认识。

猜你喜欢

转载自blog.csdn.net/weixin_50593821/article/details/127985087