【问题标题】:Handling stdin with tornado用龙卷风处理标准输入
【发布时间】:2016-03-01 07:31:31
【问题描述】:

如何在 Tornado 循环中监听 stdin 上发生的事件?

特别是,在龙卷风系统中,我想从标准输入读取数据,对其做出反应,并在标准输入关闭时终止。同时,Tornado Web 服务也在同一个进程上运行。

在寻找这个时,我能找到的最相似的是处理外部产生的进程的流。但是,这不是我想要的:我想处理 current 进程的 i/o 流,即拥有 Web 服务器的进程。

在结构上,我的服务器几乎是hello-world tornado,所以我们可以以此为基础。我只需要添加一个标准输入处理程序。

【问题讨论】:

    标签: python pipe tornado


    【解决方案1】:

    您可以在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()
    

    【讨论】:

    • 谢谢!获取套接字中的数据就足够了。但是,我很难赶上“标准输入关闭”事件。在此处发布后续问题:stackoverflow.com/questions/35741435/…
    • 给我ogram Files (x86)\Python35-32\workspace\webSocketServer.py == Traceback (most recent call last): File "C:\Program Files (x86)\Python35-32\workspace\webSocketServer.py", line 38, in <module> tornado.ioloop.IOLoop.instance().add_handler(sys.stdin, on_stdin, tornado.ioloop.IOLoop.READ) File "C:\Program Files (x86)\Python35-32\lib\site-packages\tornado\ioloop.py", line 719, in add_handler fd, obj = self.split_fd(fd) File "C:\Program Files (x86)\Python35-32\lib\site-packages\tornado\ioloop.py", line 648, in split_fd return fd.fileno(), fd io.UnsupportedOperation: fileno
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多