首页 > 解决方案 > 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

标签: python

解决方案


因此,正如@chemicalwill 指出的那样,您实际上并没有调用 close 函数,而是将其作为变量调用。要“运行”一个函数,你必须用括号调用它,即

f = open("/tmp/write_test", "w")
f.write("test string\n")
f.close()

作为最后的想法。withpython中的语句值得探索。将其用于文件 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

更多文档


推荐阅读