python web界面整合 tail_如何使用Python Tornado在HTTP上实现“ tail”?
我正在嘗試使用Python在HTTP上實現“ tail -f”之類的東西.當前,我正在嘗試使用Tornado,但即使我執行異步請求,它一次也只能處理一個連接.
import socket
import subprocess
import tornado.gen as gen
import tornado.httpserver
import tornado.ioloop
import tornado.iostream
import tornado.options
import tornado.web
from tornado.options import define, options
define("port", default=8888, help="run on the given port", type=int)
define(
"inputfile",
default="test.txt",
help="the path to the file which we will 'tail'",
type=str)
class MainHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
@gen.engine
def get(self):
print "GOT REQUEST"
inputfile = open(options.inputfile)
p = subprocess.Popen(
"./nettail.py",
stdin=inputfile,
stdout=subprocess.PIPE)
port_number = int(p.stdout.readline().strip())
self.write("
")self.write("Hello, world
")
self.flush()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
stream = tornado.iostream.IOStream(s)
yield gen.Task(stream.connect, ("127.0.0.1", port_number))
while True:
data = yield gen.Task(stream.read_until, "
")
self.write(data)
self.flush()
def main():
tornado.options.parse_command_line()
application = tornado.web.Application([
(r"/", MainHandler),
])
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()
我正在啟動的過程是輸出到套接字的簡單“尾巴”.
import random
import socket
import sys
import time
#create an INET, STREAMing socket
s = socket.socket(
socket.AF_INET, socket.SOCK_STREAM)
# Open the connection.
try:
for attempt_number in xrange(5):
port_number = random.randint(9000, 65000)
try:
s.bind(("localhost", port_number))
except socket.error:
continue
# We successfully bound!
sys.stdout.write("{0}".format(port_number))
sys.stdout.write("
")
sys.stdout.flush()
break
#become a server socket
s.listen(5)
# Accept a connection.
try:
(clientsocket, address) = s.accept()
while True:
line = sys.stdin.readline()
if not line:
time.sleep(1)
continue
clientsocket.sendall(line)
finally:
clientsocket.close()
finally:
s.close()
./nettail.py可以正常工作,但是Tornado HTTP服務器一次僅處理一個請求.
我想使用長期運行的持久HTTP連接來執行此操作,因為它與舊版瀏覽器兼容.我了解Web套接字就是在現代瀏覽器中的工作方式.
編輯:
我在Linux和Solaris而不是Windows上運行它.這意味著我可以在文件上使用tornado.iostream,而不是通過套接字程序使用.不過,這不是文檔功能,因此我為每個連接啟動一個套接字程序.
總結
以上是生活随笔為你收集整理的python web界面整合 tail_如何使用Python Tornado在HTTP上实现“ tail”?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 照顾低视力用户:索尼新相机套件可将图像投
- 下一篇: sqlserver查看用户名密码_php