2

我正在开发一个小软件,它能够控制(启动、停止、重启等 - 使用 gnu 屏幕)每个可能的游戏服务器(有命令行),并包括一个带有完整网络界面的小型独立网络服务器(您可以从那里访问 gnu 屏幕,就像您已连接到它一样)在 linux 上。

几乎一切正常,现在需要一些代码清理。

它是用python编写的,独立的网络服务器使用cherrypy作为框架。

问题是,Web 界面上的 gnu 屏幕输出是通过日志文件完成的,这在启用时会导致高 I/O(好的,这取决于正在运行的内容)。

有没有办法将输出直接传送到独立的网络服务器(它必须很快)?也许有套接字的东西,但我还不知道如何处理它们。

4

3 回答 3

2

如果您创建一个 FIFOmkfifo mypipe.log并将您的日志写入其中,您应该能够从 python 打开它并读入。Python 和 FIFO可能会有所帮助。如果您还想要日志的硬拷贝,您可以通过管道输出tee

于 2013-03-27T12:07:36.113 回答
1

写入管道会起作用,但这很危险,因为当您从管道读取数据的速度不够快时,您的命令(写入管道的命令)会阻塞。

更好的解决方案是创建一个在套接字上发布标准输入的本地“日志服务器”。现在您可以将命令的输出通过管道传输到从标准输入读取的日志服务器,并将输入的副本发送给连接到它的套接字的任何人。

当没有人连接时,输出将被忽略。

编写这样一个“日志服务器”是微不足道的(我猜在 Python 中大约需要 1 小时)。

另一个优点是您可以将部分日志文件保存在内存中(比如最后 100 行)。当您的命令崩溃时,您仍然可以从日志服务器获取最后的输出。

为此,您不得在 stdin 返回 EOF 时终止日志服务器。缺点是您需要自己清理过时的日志服务器。当您使用套接字时,您可以从您的网络应用程序中向它发送一个“kill”命令。

于 2013-03-27T14:17:27.213 回答
0

您可以使用 syslog,甚至更好的是,您可以将其配置为将所有日志发送到数据库!

于 2014-08-18T02:56:24.730 回答