通过snmptrap转发新的日志消息

时间:2014-03-28 12:46:51

标签: python python-2.7 subprocess net-snmp

我尝试收听新文件行并在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 :(得分: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未被重定向。

您可以将代码更改为一次发送所有可用行,或者每分钟只发送一次。

根据您的需要,您可以选择适合您在Python中的案例tail -f实现。见How can I tail a log file in Python?Get last n lines of a file with Python, similar to tail