通过snmptrap转发新日志消息
我想监听新文件的行,然后把它们重新发送到 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=False
,stderr
不会被重定向。
你可以修改代码,让它一次发送所有可用的行,或者每分钟只发送一次。
根据你的需求,你可以选择适合你情况的tail -f
在Python中的实现。可以参考如何在Python中查看日志文件?和用Python获取文件的最后n行,类似于tail。