python中的subprocess.Popen | 9

时间:2022-10-09 10:00:14

在收集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数据