Python中文件打开未关闭便调用文件或未关闭文件便多次以写的方式打开文件导致异常
复现
利用python代码解析字符串,生成一个临时python文件,并执行该文件。
发现临时python文件中的部分code没有被执行,或由临时python文件输出的结果错误
例如以下场景:
1)使用python解析伪代码,并生成tmp_python.py
临时python文件,在没有close()
掉tmp_python.py
临时python文件,便通过python3 tmp_python.py
执行,此时并不会产生任何结果。
2)使用python以a
或w
方式打开文件,没有close()
,再次以a
或w
方式打开文件,导致写入的新数据异常
原因
- 在os.system()、subprocess.Popen()前,没有将文件对象close()
close()
相当于执行 “保存并退出”- 多次打开文件并没有
close()
,此时文件指针机会产生混乱,从而导致数据开始写的位置异常
解决
- 执行文件前,必须
close()
文件,如果后续还需要再次写文件,重新打开文件生成文件对象 - 当出现第二次以
a
或w
方式打开文件时,先将原来的文件对象close()