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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章