通过snmptrap转发新日志消息

0 投票
1 回答
728 浏览
提问于 2025-04-18 00:19

我想监听新文件的行,然后把它们重新发送到 snmptraps

#!/usr/bin/env python
import subprocess

sreader = "tail -f /root/zsv/log"
ssreader = subprocess.Popen(sreader,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)

strap = 'snmptrap -c iptvinfo -v 2c 192.168.10.10:163 "" 1.3.3.3.3.3.3.3 1.2.2.2.2.2.2 s '
subprocess.Popen([strap + ssreader.communicate()[0]],shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)

但是我什么都没有收到……这是我的第一个程序,请帮我修复它。

1 个回答

0
import shlex
from subprocess import Popen, PIPE, check_call

snmptrap = shlex.split('snmptrap -c iptvinfo -v 2c 192.168.10.10:163 "" '
                       '1.3.3.3.3.3.3.3 1.2.2.2.2.2.2 s')
tail = Popen(["tail", "-f", filename], stdout=PIPE, bufsize=1)
for line in iter(tail.stdout.readline, b''):
    check_call(snmptrap + [line]) # send line
tail.stdout.close()
rc = tail.wait()

注意:默认情况下,shell=Falsestderr不会被重定向。

你可以修改代码,让它一次发送所有可用的行,或者每分钟只发送一次。

根据你的需求,你可以选择适合你情况的tail -f在Python中的实现。可以参考如何在Python中查看日志文件?用Python获取文件的最后n行,类似于tail

撰写回答