日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python web界面整合 tail_如何使用Python Tornado在HTTP上实现“ tail”?

發布時間:2023/12/15 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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”?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。