一种将gnu屏幕输出“管道”到运行中的python进程的方法?

2024-09-19 20:45:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

几乎所有的东西都在工作,现在需要一些代码清理。在

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

问题是,webinterface上的gnu屏幕输出是通过一个日志文件完成的,当启用时,这可能导致高I/O(好的,这取决于运行的是什么)。在

有没有一种方法可以将输出直接通过管道传输到独立的web服务器(必须很快)?也许是带插座的东西,但我还不知道怎么处理。在


Tags: 文件方法代码命令行gnu网络服务器框架
3条回答

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

写入管道可以工作,但很危险,因为当您从管道中读取数据不够快时,您的命令(写入管道的命令)将阻塞。在

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

当没有人连接时,输出就会被忽略。在

编写这样一个“日志服务器”很简单(我想在Python中大约需要1h)。在

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

要使其正常工作,您不能在stdin返回EOF时终止日志服务器。缺点是您需要自己清理过时的日志服务器。使用套接字时,可以从web应用程序向其发送“kill”命令。在

您可以使用syslog,甚至可以更好地配置它来将所有日志发送到数据库!在

相关问题 更多 >