python - 跟踪文本文件中读取的最后一行的最佳方法

标签 python linux text daemon

我正在设计一个守护进程,它将连续从单个文本文件中读取行并处理这些行。如果在守护进程未运行时将行写入文本文件,跟踪最后处理的行(独立于文件名)的通用方法是什么?

每隔一段时间,文件就会被归档并在其位置创建一个新的空白文件。守护程序将停止以进行归档。

我的第一个想法似乎过于复杂,是计算并存储最后成功处理的记录的散列和行号。然后,当守护程序再次启动时,运行到该行号并计算哈希值。如果哈希匹配,则继续处理下一条记录。如果哈希值不匹配,则从文件的开头重新开始,因为这会表明这是一个新文件。

我感觉日志文件分析器或教科书中的某些东西使用了一种很好的通用技术,但我没有接触过。

最佳答案

假设您有权限、足够的磁盘空间并假设您安全地终止了守护进程... 只需将处理的最后一行写入文件(在守护程序关闭时)。

如果需要,您可以将守护进程的每个实例包装在上下文管理器中

从上下文库导入上下文管理器

http://docs.python.org/library/contextlib.html

class a_daemon():
    def __init__(self,last_line):
        print "initilizing.."
        self.last_line=last_line

    def run_me(self):
        print "running.."
        #while true, process lines, set last_line to current line being processesed.
        self.last_line='blah'

from contextlib import contextmanager

@contextmanager
def run_new_daemon():
    print "getting last line"
    last_line=open("last_line.txt").read() #you should get a "file does not exist" error the first time running this unless you created the file already

    my_daemon=a_daemon(last_line)
    yield my_daemon

    print "shutting down, writing last line to file."
    with open("last_line.txt",'w') as last_line_file:
        last_line_file.write(my_daemon.last_line)

with run_new_daemon() as my_daemon:
    my_daemon.run_me()

关于python - 跟踪文本文件中读取的最后一行的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9170364/

相关文章:

python - 如何使用有状态的 Python 模块正确实现测试隔离?

php - 无法执行此命令

CSS "sunken"/"inset"不使用图片的字母效果

python - 在 Django 中使用 Join 进行查询

python - 系统不响应 pexpect 命令

c - 如何将十六进制字符转换为 4 位二进制表示形式?

linux - 如何查找几分钟前访问/创建的文件

mysql - 将不同大小的文本存储在不同的mysql表中是否有效?

python - 如何在调整/缩小 tkinter 应用程序窗口时保持小部件可见

python - 使用 pandas 应用多个 boolean 掩码以设置列中的值的有效方法