作了兩個版本,一是websocket輸出,一是直接顯示指定行數。
classwebsockethandler(tornado.websocket.websockethandler):
file_content = ""
filename = "
test.log"#
檔案總大小,每次讀取均更新長度
f_size =0
#每次讀取的位元組數,防止每次讀得太多而卡死
f_chunk = 1024
#檔案讀取指標位置
f_pos =0
defcheck_origin(self, origin):
return
true
defopen(self):
pass
defupdate_client(self):
self.write_message(self._read_file(self.filename))
defon_message(self, message):
self.filename = '
-'.join(message.split('
-')[1:])
#判斷是否已存在log檔案,如果沒有,則先建立乙個空檔案內容
if os.path.exists("
/tmp/
" +self.filename):
self.update_client()
else
: with open(
"/tmp/
" + self.filename, 'w'
) as f:
f.write(
"empty file.....\n")
defon_close(self):
pass
def_read_file(self, filename):
f = open("
/tmp/
"+filename, "r"
)
#seek裡引數2是將指標放在末尾,檢測檔案長度
f.seek(0, 2)
self.f_size =f.tell()
#指標復位
f.seek(self.f_pos, 0)
#判斷檔案長度是否大過單次讀取位元組
if (self.f_size - self.f_pos) >self.f_chunk:
ret_str =f.read(self.f_chunk)
self.f_pos +=self.f_chunk
return
ret_str
else
:
#如果(最後)一次可讀取所有位元組,則檔案指標指到末尾,這是考慮可能下次再讀時有新資料
if self.f_size >self.f_pos:
ret_str = f.read(self.f_size -self.f_pos)
self.f_pos =self.f_size
return
ret_str
elif self.f_size return
"reset
"else
:
return
""f.close()
'''with open("/tmp/"+filename) as f:
content = f.read()
if len(content) >= len(self.file_content):
content_diff = content.replace(self.file_content, '')
self.file_content = content
return content_diff
else:
self.file_content = ""
return "reset"
'''class
indexpagehandler(tornado.web.requesthandler):
defget(self):
self.render(
"websockets.html")
class
def__init__
(self):
handlers =[
(r'/ws_log/
', indexpagehandler),
(r'/websocket/ws
', websockethandler)
]settings =dict(
template_path=os.path.join(os.path.dirname(__file__), "
templates"),
static_path=os.path.join(os.path.dirname(__file__), "
static"),
debug=true
)__init__(self, handlers, **settings)
if__name__ == '
__main__':
server.listen(9527)
tornado.ioloop.ioloop.instance().start()
defsql_log(request):
dev_version = request.get.get('
dev_version')
log_line = int(request.get.get('
log_line'))
if platform.system() == "
windows":
log_file = '
d://tmp//
' +dev_version
elif platform.system() == "
linux":
log_file = '
/tmp/
' +dev_version
else
: log_file = '
/tmp/
' +dev_version
with open(log_file) as f:
if log_line >0:
sql_log_str =f.readlines()[0:log_line]
elif log_line <0:
sql_log_str =f.readlines()[log_line:]
else
: sql_log_str =f.readlines()
return render(request, '
sar/sql_log.html
', locals())
SQLSERVER 儲存過程輸出LOG檔案
名 稱 sqlserver用 出力拡張 版 版 數 0.90 動作環境 sqlserver 動作確認 windows2003 server sqlserver2000 ee sp3,windows2000 server sqlserver2000 de sp3 提供形式 zip形式圧縮 制限事項 版...
大檔案分割並將字段定長輸出
場景 接到需求,需要將乙個五千萬的表資料匯出上傳 要求 檔案大小小於2g,每個檔案需增加行號,檔案中的每個字段長度與介面規範保持一致 操作 第一步 將表中資料匯出生成檔案di tmp.20200229,指定tab符為分割符 根據每行檔案的總長度,每個檔案大小小於2g,計算出每個檔案的記錄數為80萬 ...
上傳大檔案 關於大檔案上傳
js計算檔案md5使用spark md5.js,據說這個庫使用的是世界上最快的md5演算法。js對檔案切片並使用ajax上傳切片 let size file.size 獲取檔案大小 const shardsize 1024 1024 塊大小1mb let shardcount math.ceil s...