python - close() 不刷新缓冲区吗?
问题描述
# cat write_file.py
#!/usr/bin/python
import os
f=open("/tmp/write_test", "w")
f.write("test string\n")
f.close
#f=open("/tmp/write_test", "r")
#f.close
os.system("ls -l /tmp/write_test")
os.system("cat /tmp/write_test")
调用不会产生输出(write_test
为空),但在 python 脚本完成执行后,字符串就在那里。
# ./write_file.py
-rw-r--r-- 1 root root 0 Apr 25 18:29 /tmp/write_test
# ls -la /tmp/write_test
-rw-r--r-- 1 root root 12 Apr 25 18:29 /tmp/write_test
# cat /tmp/write_test
test string
打开文件进行阅读并在os.system()
工作前立即关闭它。我的理解是close()
调用flush()
并且所有数据都应该放在文件中。我想念什么?
Python 版本是 3.9.3
解决方案
因此,正如@chemicalwill 指出的那样,您实际上并没有调用 close 函数,而是将其作为变量调用。要“运行”一个函数,你必须用括号调用它,即
f = open("/tmp/write_test", "w")
f.write("test string\n")
f.close()
作为最后的想法。with
python中的语句值得探索。将其用于文件 IO 被认为是标准的。当文件超出范围时,它将自动关闭您的文件。
with open("/tmp/write_test", "w") as f:
f.write("test string\n")
# f is now closed by python itself, as it is out of scope
推荐阅读
- json - JOLT Spec 从一组类似名称的键中构建数组
- mysql - Mysql 使用硬编码数据
- jquery - 图像在子模态选项卡中不可见 - MVC 5 .NET 中的模态内模态
- python - 如何在 Python 中截取屏幕截图?
- r - 将文件名和工作表名称分配给 R 中的(多个)观察值
- vue.js - 使用 Vue/Axios 调用访问 Jenkins api 的问题
- javascript - 在背景上添加元素(圆圈)但在html css js中的文本后面
- cron - 如果 cron 作业在 Cronitor 上成功,则发送电子邮件
- javascript - Firebase 用户配置文件添加自定义字段
- maven - Maven 不在带有 Spring Boot 的多模块项目中运行单元测试