Мне нужно иметь асинхронно интерактивную обработку журналов (читать, когда что-то происходит и записывать) через сокет 2eb некоторых файлов на сервере, но сначала я хочу понять, как интерактивно и асинхронно читать и напишите файл.Tornado and tornado.iostream.PipeIOStream
Я все еще нахожусь в «чтении».
Если я выполнить следующий фрагмент кода и то время я открываю консоль и написать через
echo foo > file.txt
Я ожидаю, что что-то произойдет в консоли торнадо. Но ничего. Некоторые советы? Документация не содержит какой-либо пример о tornado.iostream.PipeIOStream (или я не нашел их)
import os
import tornado.ioloop
import tornado.web
clientpath = '../client'
port = 8888
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render("index.html")
def tail(data):
print "> ", data, " ."
if __name__ == "__main__":
settings = {
"template_path": os.path.join(os.path.dirname(__file__), clientpath)
}
handlers = [
(r"/", MainHandler),
]
fd = open("file.txt")
stream = tornado.iostream.PipeIOStream(fd.fileno())
stream.read_until('\n', tail)
application = tornado.web.Application(handlers, **settings)
application.listen(port)
tornado.ioloop.IOLoop.instance().start()
Я думал, что избежать PeriodicCallback - это лучший способ. Так что же, вместо обычного файла, использовать некоторые внешние устройства? Обычно, если я пишу 'open ('/ dev/tty ..')' Я получаю хорошие результаты .. может ли он работать с PipeIOStream? – nkint
Я не очень много сделал, но думаю, что PipeIOStream работает с устройствами TTY. –