在 python 中读取文件,而其他程序正在写入文件
Read a file while some other program is writing the file in python
我正在连续读取一个文件,另一个程序修改了它。当我尝试阅读它时,它只打印空格。
读取的文件
import os
import time
f=open("file.py","r",os.O_NONBLOCK)
while 1:
x=f.read()
if x.find("bye")!=-1:
break
else:
time.sleep(1)
f.close()
写入的文件
import os
f=open("file.py","w",os.O_NONBLOCK)
f.write("bye")
f.flush()
f.close()
file.py
hello
程序只打印空格
您尝试做的事情应该相当简单。我很确定您的代码在技术上可以工作,但您确实应该使用上下文管理器处理文件。我还重组了您的代码以完成我认为您打算做得更好的事情。
读取的文件
import os
import time
we_have_written_bye = False
while we_have_written_bye = False:
with open("file.py", "r") as f
x = f.read()
if x.find("bye")!=-1:
we_have_written_bye = True
# file closes automatically with a context manager so
# this is removed. Note, if bye was not written yet, we
# close the file, then wait for a second by sleeping below
time.sleep(1)
写入的文件
import os
with open("file.py", "w", os.O_NONBLOCK) as f
f.write("bye")
f.flush() # not sure why you want to flush the file contents here
f.close()
file.py
hello
这两个程序应该可以无缝运行。这是因为如果另一个程序正在写入文件对象,则无法打开该文件对象。你可能 运行 遇到这个问题,但如果写入很小,我相信标准库会等待足够长的时间来放弃文件锁。
有关上下文管理器的教程,请参阅:
https://www.youtube.com/watch?v=Lv1treHIckI
这是一系列很棒的半高级 python 教程的一部分,肯定会提升您的游戏水平。帮助了我吨
我正在连续读取一个文件,另一个程序修改了它。当我尝试阅读它时,它只打印空格。
读取的文件
import os
import time
f=open("file.py","r",os.O_NONBLOCK)
while 1:
x=f.read()
if x.find("bye")!=-1:
break
else:
time.sleep(1)
f.close()
写入的文件
import os
f=open("file.py","w",os.O_NONBLOCK)
f.write("bye")
f.flush()
f.close()
file.py
hello
程序只打印空格
您尝试做的事情应该相当简单。我很确定您的代码在技术上可以工作,但您确实应该使用上下文管理器处理文件。我还重组了您的代码以完成我认为您打算做得更好的事情。
读取的文件
import os
import time
we_have_written_bye = False
while we_have_written_bye = False:
with open("file.py", "r") as f
x = f.read()
if x.find("bye")!=-1:
we_have_written_bye = True
# file closes automatically with a context manager so
# this is removed. Note, if bye was not written yet, we
# close the file, then wait for a second by sleeping below
time.sleep(1)
写入的文件
import os
with open("file.py", "w", os.O_NONBLOCK) as f
f.write("bye")
f.flush() # not sure why you want to flush the file contents here
f.close()
file.py
hello
这两个程序应该可以无缝运行。这是因为如果另一个程序正在写入文件对象,则无法打开该文件对象。你可能 运行 遇到这个问题,但如果写入很小,我相信标准库会等待足够长的时间来放弃文件锁。
有关上下文管理器的教程,请参阅:
https://www.youtube.com/watch?v=Lv1treHIckI
这是一系列很棒的半高级 python 教程的一部分,肯定会提升您的游戏水平。帮助了我吨