Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
打开文本文件,仅在python中打印新行_Python_Readlines_Os.path - Fatal编程技术网

打开文本文件,仅在python中打印新行

打开文本文件,仅在python中打印新行,python,readlines,os.path,Python,Readlines,Os.path,我打开一个文本文件,它一旦创建,就会不断地被写入,然后将它打印到控制台上任何新行,因为我不想每次都重新打印整个文本文件。我正在检查文件是否变大,如果是,请打印下一行。这基本上是可行的,但有时它会对下一个新行感到有点困惑,新行出现在几行中,与旧行混合在一起。 有没有更好的方法,下面是我目前的代码 infile = "Null" while not os.path.exists(self.logPath): time.sleep(.1) if os.path.isfile(self.log

我打开一个文本文件,它一旦创建,就会不断地被写入,然后将它打印到控制台上任何新行,因为我不想每次都重新打印整个文本文件。我正在检查文件是否变大,如果是,请打印下一行。这基本上是可行的,但有时它会对下一个新行感到有点困惑,新行出现在几行中,与旧行混合在一起。 有没有更好的方法,下面是我目前的代码

infile = "Null"
while not os.path.exists(self.logPath):
    time.sleep(.1)

if os.path.isfile(self.logPath):
    infile = codecs.open(self.logPath, encoding='utf8')
else:
    raise ValueError("%s isn't a file!" % file_path)

lastSize = 0
lastLineIndex = 0
while True:
    wx.Yield()
    fileSize = os.path.getsize(self.logPath)
    if fileSize > lastSize:
        lines = infile.readlines()
        newLines = 0
        for line in lines[lastLineIndex:]:
            newLines += 1
            self.running_log.WriteText(line)

        lastLineIndex += newLines

        if "DBG-X: Returning 1" in line:
            self.subject = "FAILED! - "
            self.sendEmail(self)
            break
        if "DBG-X: Returning 0" in line:
            self.subject = "PASSED! - "
            self.sendEmail(self)
            break
    fileSize1 = fileSize
    infile.flush()
    infile.seek(0)

infile.close()
另外,我的应用程序在等待创建文本文件时会冻结,因为它需要几秒钟的时间才能显示出来,这并不好

干杯。

也许你可以:

每次需要读取文件时,请打开该文件, 使用lastSize作为参数,直接查找到上次阅读时停止的位置。 附加注释:我不知道您是否需要一些保护,但我认为您不应该费心测试给定的文件名是否是文件;只要打开它一试…除了阻止和捕捉问题,如果有的话


至于应用程序的冻结,您可能需要使用某种线程,例如:一个线程(您的主线程)正在处理GUI,另一个线程将等待创建文件。创建文件后,第二个线程向GUI线程发送信号,其中包含要显示的数据。

解决方案可能会有所帮助。您还需要使用os.path.isfile和time.sleep等待文件出现。

如果您在windows上,您可能只需要使用linux tail-f fname命令-use cygwin。相关: