问题背景
这几天在做大创项目,要写一个画图的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本质上不难排除,但是重点还是在于提升对于路径变化的敏感度,
也算加强了对相对路径这一概念的认识。