如何监听Tornado循环中stdin上发生的事件?
特别是在龙卷风系统中,我想从stdin读取,对它做出反应,并在stdin关闭时终止.与此同时,Tornado Web服务正在运行相同的进程.
在寻找这个时,我发现最相似的是处理外部生成过程的流.但是,这不是我想要的:我想处理当前进程的i / o流,即具有Web服务器的进程.
从结构上讲,我的服务器差不多是hello-world tornado,所以我们可以将这个例子作为基础.我只需要添加一个stdin处理程序.
解决方法:
您可以在IOLoop实例上使用add_handler方法来监视stdin上的事件.
这是一个最小的工作示例:
from tornado.ioloop import IOLoop
from tornado.web import Application, RequestHandler
import sys
class MainHandler(RequestHandler):
def get(self):
self.finish("foo")
application = Application([
(r"/", MainHandler),
])
def on_stdin(fd, events):
content = fd.readline()
print "received: %s" % content
if __name__ == "__main__":
application.listen(8888)
IOLoop.instance().add_handler(sys.stdin, on_stdin, IOLoop.READ)
IOLoop.instance().start()
标签:python,tornado,pipe
来源: https://codeday.me/bug/20190824/1705848.html