實現Linux tail f功能

2021-08-17 17:18:03 字數 2180 閱讀 5899

這個比較好像,不停的去讀檔案,讀到就列印出來

f = open('a','r')

print(f.read(),end='')

while

true:

try:

print(f.read(),end='')

except keyboardinterrupt:

f.close()

break

cpu占用100%,不是乙個好的選擇。

一直以來,對select和poll的用法侷限於套接字,實際上,只要是檔案描述符,都可以監控。

select

import select

f = open('a','r')

while

true:

try:

rs, ws, es = select.select([f, ], , )

for i in rs:

buf = i.read()

print(buf, end='')

except keyboardinterrupt:

f.close()

break

poll

import select

f = open('a','r')

poller = select.poll()

fd_to_file = {}

poller.register(f,select.pollin)

while

true:

try:

events = poller.poll()

for fd,flag in events:

if flag and fd == f.fileno():

print(f.read(),end='')

except keyboardinterrupt:

f.close()

break

然而,cpu佔用率還是100%,原因由於作為乙個普通檔案描述符,時刻準備著讀寫事件,這使得select、poll不會阻塞,自然相當於是死迴圈。

此外,epoll不支援監控普通檔案描述符

inotify 是乙個 linux特性,它監控檔案系統操作,比如讀取、寫入和建立。inotify 反應靈敏,用法非常簡單,並且比 cron 任務的繁忙輪詢高效得多。

tail -f實際上就是inotify+select實現的,python上乙個封裝的比較好的庫pyinotify使用的是inotify+epoll,效率自然不低。

# coding=utf-8

import pyinotify

class

eventhandler

(pyinotify.processevent):

"""事件處理"""

defmy_init

(self, **kargs):

self.fd = kargs['fd']

defprocess_in_modify

(self, event):

print(self.fd.read(), end='')

path = './a'

f = open(path,'r')

wm = pyinotify.watchmanager()

mask = pyinotify.in_modify

notifier = pyinotify.notifier(wm,eventhandler(fd=f))

wm.add_watch(path,mask,auto_add=true,rec=true)

print('now starting monitor %s' % path)

print(f.read(),end='')

while

true:

try:

notifier.process_events()

if notifier.check_events():

notifier.read_events()

except keyboardinterrupt:

notifier.stop()

break

幾乎看不到cpu占用,屬上乘。

實現LoadPE功能

mytestpe.cpp 定義控制台應用程式的入口點。include stdafx.h include include winnt.h include include include using namespace std 本程式實現列印出pe檔案的段資訊 pimage dos header pdo...

HBase功能實現

要實現操作hbase資料表首先要了解它的原理 第一部分 hbase原理篇 hbase就是基於hadoop的乙個開源專案,也是對google的bigtable的一種實現。bigtable最淺顯來看就是一張很大的表,表的屬性可以根據需求去動態增加,但是又沒有表與表之間關聯查詢的需求。bigtable是g...

ztree keyUp功能實現

需求 1.根據輸入框內容,對樹進行模糊查詢 2.將查詢到得樹內容進行標紅,未匹配得資料進行隱藏 頁面效果 頁面 具體keyup 如下 container左側邊欄ztree搜尋 var queryhidenodes 查詢隱藏的 var queryshownodes 查詢展示的 ztreesearch ...