在收集snmp数据的过程中用到了subprocess这个模块,本来想用其他python里面关于snmp的库,还是觉得麻烦就直接调用snmpwalk来收集数据。
最开始想用subprocess.call()这个函数,然而这个函数没有和其他进程通信的功能就放弃了
google了一下找到subprocess.Popen()这个函数,具体用法后面会贴一个别人写的帖子
其中subprocess.PIPE类似于pipe()系统调用,不过不需要指定PID,只需要把stdout,stdin,error指定为subprocess.PIPE就可以了
我写的这个小脚本里面有参数shell=True,意思是通过shell执行命令而不是直接的execvp()
#!/usr/bin/env python
# gathering snmp data
import subprocess
import os
cmd="snmpwalk -v 2c ip -c group"
fd=open("/home/user/snmptest","w")
data=subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=True)
fd.write(data.stdout.read())
fd.close()
执行之后snmptest里面就写入了收集来的snmp数据