python 自动化运维之tail -f 实现

一、基础准备

(1)通过read方法传输参数,如read(3),当文件打开方式为文本模式时,代表读取3个字符,当文件打开方式为二进制模式时,代表读取3个字节。
(2)以字节为单位定位,如seek、tell等方法。其中seek有3种移动方式:0、1、2,其中1和2必须在二进制模式下进行,但无论哪种模式,都是以bytes为单位移动的。f.tell()返回文件对象当前所处的位置,它是从文件开头开始算起的字节数。如果要改变文件当前的位置,可以使用f.seek(offset, from_what)函数。from_what如果是0,则表示开头;如果是1,则表示当前位置;如果是2,则表示文件的结尾。例如:

seek(x,0) 表示从起始位置即文件首行首字符开始移动x个字符;
seek(x,1) 表示从当前位置向后移动x个字符;
seek(-x,2) 表示从文件的结尾向前移动x个字符
>>> f=open("tmp.txt","rb+")   	# 以二进制方式打开文件
>>> f.write(b"abxdefgh")    	# 写入文件
8
>>> f.seek(3)           		# 移动到文件的第四个字节
3
>>> print(f.read(1))   			# 读取一个字节
b'd'
print(f.read(3))    

二、基于seek实现类似Linux命令tail -f的功能;代码实现–哆啦A梦的任意门

tail -f 是不断地输出追加的日志,

import time

with open('tmp.txt','rb') as f:     #  打开文件
    f.seek(0,2) 					# 将光标移至文件末尾
    while True:        # 实时显示文件新增的内容
        line=f.read()    # 读取内容
        if line:
            print(line.decode("utf-8"),end='')
        else:
            time.sleep(0.2)    #读取完毕短暂睡眠
            # continue

当tmp.txt追加新的内容时,新内容会被程序立即打印出来。

效果如下:

$ echo 'sdaddasdasd' >> testDemo/tmp.txt  # 向文件追加数据
$ python -u "d:\WorkSpace\python-WorkSpace\testD
emo\tailf.py"
sdad
sdad
sdad
sdad
sdad
sdad
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值