Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python脚本将shell命令的结果写入外部文件_Python_Snmp_Ioexception - Fatal编程技术网

使用Python脚本将shell命令的结果写入外部文件

使用Python脚本将shell命令的结果写入外部文件,python,snmp,ioexception,Python,Snmp,Ioexception,我正在编写一个Python脚本,它每3秒钟运行一个SNMP脚本,并将路由器接口接收的数据包的值存储在一个文件中。但是,在循环的第二次迭代中,我得到了错误: ValueError:对关闭的文件执行I/O操作 我的代码如下: #!/usr/bin/env python import time import subprocess p = subprocess.Popen(["snmpget", "*****", "IF-MIB::ifInOctets.1"],stdout=sub$ count=1 w

我正在编写一个Python脚本,它每3秒钟运行一个SNMP脚本,并将路由器接口接收的数据包的值存储在一个文件中。但是,在循环的第二次迭代中,我得到了错误: ValueError:对关闭的文件执行I/O操作

我的代码如下:

#!/usr/bin/env python
import time
import subprocess
p = subprocess.Popen(["snmpget", "*****", "IF-MIB::ifInOctets.1"],stdout=sub$
count=1
with  open("script5min.log","a") as logfile:
        while(count!=3):
                print count
                packets_received,err = p.communicate()
                logfile.write(packets_received)
                count = count +1
                time.sleep(3)
有没有关于我做错了什么的建议?
谢谢

在循环之前只调用一次snmpget命令。调用communicate读取该命令的所有输出,读取输出后将关闭p的文件句柄,因此再次调用communicate将返回错误

解决方案:
将Popen调用移动到循环中,以便在每次迭代中进行新的SNMP轮询。每次轮询都会更新p对象,您将能够与它通信

谢谢,最后我切换到pySNMP,它更好地支持所有SNMP命令。