小弟想在web上显示log文件的最新的五十条,遇到这个问题,希望大家帮帮忙。不甚感激。
学习是最好的投资!
file.readlines()[-50:]
幾種方式:
用subprocess調tail -f
用pyinotiy監聽文件變化
自己實現,例如先拿到檔案大小,讀到最後一個字節,然後往回退到第一個n,這就是倒數第一行了,然後依次往回退
樓上幾位說的都可行, 不過 @nealnote 的方法如果讀大文件會有性能問題, 建議用 @manong 所說, subprocess调unix系统自带的一个tail程序去做, 具體實現如下:
subprocess
unix
tail
import subprocess fh = subprocess.Popen("tail -n 50 /var/log/dmesg", stdout=subprocess.PIPE, shell=True) for line in fh.stdout.readlines(): print(line.decode('ascii'), end="")
運行結果:
... ... rdac: device handler registered device-mapper: multipath round-robin: version 1.0.0 loaded EXT4-fs (sdd5): mounted filesystem with ordered data mode. Opts: EXT4-fs (sdd2): mounted filesystem with ordered data mode. Opts: EXT4-fs (dm-1): mounted filesystem with ordered data mode. Opts: EXT4-fs (dm-0): warning: maximal mount count reached, running e2fsck is recommended EXT4-fs (dm-0): mounted filesystem with ordered data mode. Opts: Adding 1023996k swap on /dev/sdd3. Priority:-1 extents:1 across:1023996k
file.readlines()[-50:]
幾種方式:
用subprocess調tail -f
用pyinotiy監聽文件變化
自己實現,例如先拿到檔案大小,讀到最後一個字節,然後往回退到第一個n,這就是倒數第一行了,然後依次往回退
樓上幾位說的都可行, 不過 @nealnote 的方法如果讀大文件會有性能問題, 建議用 @manong 所說,
subprocess
调unix
系统自带的一个tail
程序去做, 具體實現如下:運行結果: