我尝试收听新文件行并在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)
我没有得到任何东西.. 这是我的第一个程序,请帮忙解决它
答案 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