我正在开发一个小软件,能够控制(启动,停止,重启等等 - 使用gnu屏幕)每个可能的游戏服务器(有一个命令行)并包含一个小型的独立网络服务器有一个完整的网络界面(你可以从那里访问gnu屏幕,就好像你已经连接到它)。
几乎所有东西都在工作,现在需要一些代码清理。
它是用python编写的,独立的web服务器使用cherrypy作为框架。
问题是,web界面上的gnu屏幕输出是通过日志文件完成的,这可能会在启用时导致高I / O(好吧,这取决于正在运行的内容)。
有没有办法将输出直接传输到独立的Web服务器(它必须快速)?也许有套接字的东西,但我不知道如何处理它们。
答案 0 :(得分:2)
如果您使用mkfifo mypipe.log
创建FIFO并将日志写入其中,您应该能够从python中打开并阅读。Python and FIFOs可能会有所帮助。如果您还想要日志的硬拷贝,可以通过tee
管道输出。
答案 1 :(得分:1)
写入管道会起作用,但这很危险,因为当你没有足够快地从管道读取数据时,你的命令(编写管道的命令)会阻塞。
更好的解决方案是创建一个本地“日志服务器”,它在套接字上发布stdin。现在,您可以将命令的输出传递给从stdin读取的日志服务器,并将输入的副本发送给连接到它的套接字的任何人。
当没有人连接时,输出就会被忽略。
编写这样一个“日志服务器”是微不足道的(在Python中约1小时,我猜)。
另一个优点是您可以将部分日志文件保留在内存中(比如最后100行)。当命令崩溃时,您仍然可以从日志服务器获取最后一个输出。
为此,当stdin返回EOF时,不得终止日志服务器。缺点是您需要自己清理过时的日志服务器。使用套接字时,可以从Web应用程序发送“kill”命令。
答案 2 :(得分:0)
您可以使用syslog,甚至可以更好地配置它以将所有日志发送到数据库!