在 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 教程的一部分,肯定会提升您的游戏水平。帮助了我吨