在Python中读取和打印与USB相关的var日志消息
我想打印在Ubuntu中创建的日志消息中与USB相关的行。这是我的密码:在Python中读取和打印与USB相关的var日志消息,python,file,ubuntu,syslog,Python,File,Ubuntu,Syslog,我想打印在Ubuntu中创建的日志消息中与USB相关的行。这是我的密码: >>> import re >>> fd = open("/var/log/syslog.1", "r") >>> for lines in fd: ... if re.match("usb", lines): ... print lines (顺便说一句,我不确定syslog.1文件是否正确。但是,我确实在其中找到了很多消息,有些消息
>>> import re
>>> fd = open("/var/log/syslog.1", "r")
>>> for lines in fd:
... if re.match("usb", lines):
... print lines
(顺便说一句,我不确定syslog.1文件是否正确。但是,我确实在其中找到了很多消息,有些消息与usb有关)对于最新的消息,您需要
/var/log/syslog
-/var/log/syslog.1
基本上是旧消息的备份
阻止代码工作的原因是您正在使用而不是,正如您从这些链接的文档中所看到的,re.match()
只匹配正在搜索的文本的开头
但实际上,您根本不需要使用正则表达式。以下是代码的替代方案:
>>> with open("/var/log/syslog") as f:
... for line in f:
... if "usb" in line.lower():
... print line
...
这里有几点不同:
f
fd
会让阅读你的代码的人认为你在谈论一个,这不是一回事line
,而不是line
“usb”
是否在某个行中(在检查之前,我们将该行转换为小写,以便我们也能捕获原始行中的“usb”
)@SidNoob:添加到日志主题(可能与python无关),我假设您正在从usb守护进程或驱动程序中查找日志。如果是这种情况,您可能正在查看正确的日志文件“/var/log/syslog”,该文件记录内核相关的消息(包括驱动程序)。如果是应用程序(具有不同的日志级别)然后您可能需要查看“/var/logs/messages” 但说到这里:有时打开“/var/log/syslog”这样的文件进行读取可能会占用大量内存,因为您正在将该文件加载到RAM中。在服务器类型的环境中,这可能会运行到MB长甚至更长的时间。有一个命令“dmesg”,无论“var/log/syslog”的内容是什么,它都会打印到stdout因此,您也可以将“dmesg”的输出存储为字符串并逐行解析,而不是打开这个大文件 在运行python程序时,您可能认为这两种方法是相同的,并且可能占用相同的内存。是的,但如果清除“dmesg”输出,则不会。dmesg是一个环形缓冲区,因此您可以在运行usb应用程序之前使用“dmesg-c”清除它并发出“dmesg”启动应用程序后。通过这种方式,可以减少解析的行数,从而加快程序的速度
希望这能增加您的知识和您的程序。非常感谢您对Zero的详细解释!起初,我正在查看syslog,但在更新后,它没有与usb相关的信息。因此我决定使用syslog。1file@SidNoob没问题:-)如果你准备做一些额外的工作,您也可以使用和模块来搜索代码中的
syslog.1
、syslog.2.gz
等文件。