限制Python输出文件大小
我有一个在Debian上运行的Python程序,它使用文件对象输出数据。我想对文件的大小设置一个限制,但我不想停止编写文件——我只想删除最旧的一行(在文件顶部)。当数据包从客户端到达时,我的数据被随机写入(想想web日志记录) 我知道它可以工作,但是如果我的文件超过了限制,那么使用File.tell()的组合,然后执行下面的系统命令,这是否符合我的最佳利益限制Python输出文件大小,python,linux,sed,Python,Linux,Sed,我有一个在Debian上运行的Python程序,它使用文件对象输出数据。我想对文件的大小设置一个限制,但我不想停止编写文件——我只想删除最旧的一行(在文件顶部)。当数据包从客户端到达时,我的数据被随机写入(想想web日志记录) 我知道它可以工作,但是如果我的文件超过了限制,那么使用File.tell()的组合,然后执行下面的系统命令,这是否符合我的最佳利益 sed -i '1 d' filename 一旦达到大小限制,它将每次执行sed。有更好的方法吗?您似乎不知道logrotate。您正在
sed -i '1 d' filename
一旦达到大小限制,它将每次执行sed。有更好的方法吗?您似乎不知道
logrotate
。您正在寻找类似的实现。看看这个:
接下来,写入新数据并关闭文件。必须对每个日志消息执行整个过程。祝你好运 您应该签出,更具体地说,签出类。这允许您写入具有固定大小的文件。但是,它不允许在多行上操作。没有日志记录系统使用此策略是有原因的。在不重写整个文件的情况下,无法从文件中删除第一行,因此在大文件中速度非常慢。此外,在重写文件时,不能将新数据写入该文件 通常的策略是在当前文件太大时开始写入新文件。然后,可以删除超过阈值的文件。这就是其他人提到的“日志循环”
如果您真的想创建一个队列,在添加新数据时删除一行数据,我建议使用数据库。MongoDB和其他数据库管理器支持数组,但如果需要,您可以使用SQL数据库执行类似操作。除非您需要从另一个进程接近实时地访问该文件,否则我可能会将每个日志行写入固定大小的
collections.deque
。您可以实现一种方法,根据需要将collections.deque
中的项(行)同步到日志文件中的行