2012-01-22 19 views
9

我目前正在编写关闭计算机的程序,当一段时间(比如半小时)网络流量低于某个阈值时。使用Python测量网络数据

下面是我工作将给予正确的逻辑的伪代码:

BEGIN SUBPROGRAM 
    loopFlag = True 
    Wait 5 minutes # Allows time for boot and for the machine to settle 
    traffic = 0 
    WHILE loopFlag = True DO 
     FOR sec = 0 to 3600 
      traffic += *network.traffic()* 
      wait 1 second 
     ENDFOR 
     IF traffic < trafficThreshold THEN 
      loopFlag = False 
     ENDIF 
    ENDWHILE 
    os.ShutDown() 
END SUBPROGRAM 

什么我要找的是Python模块或库,让我来衡量这一点。

虽然我已将donevariousresearch纳入此,但这些似乎不是我所追求的功能类型,无论他们的语言如何。

关于如何实现这个的任何想法?

回答

19

要检查您的系统上的网络流量,我建议你看看psutilhere

>>> psutil.network_io_counters(pernic=True) 
{'lo': iostat(bytes_sent=799953745, bytes_recv=799953745, packets_sent=453698, packets_recv=453698), 
'eth0': iostat(bytes_sent=734324837, bytes_recv=4163935363, packets_sent=3605828, packets_recv=4096685)} 
>>> 

而要关闭您的操作系统,如果你是在Windows上检查:OS Reboot, Shutdown, Hibernate, Sleep, Wakeup (Windows Python)

,如果你正在使用linux/unix,使用subprocess模块发送shutdown/reboot命令。

+0

我会考虑它。我没有遇到关机问题,所以额外的布朗尼指出了这一点。如果一切正常,我会标记正确。 – nchpmn

+0

它的作品,谢谢! – nchpmn

+0

每秒有这些统计数据吗? – travis1097

-2

并可以监视网络使用率和写入数据包到一个文件,文件库只是这样的:

import socket 
HOST = socket.gethostbyname(socket.gethostname()) 
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP) 
s.bind((HOST, 0)) 
while True: 
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1) 
# receive all packages 
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON) 
# receive a package 
newfile = open("results.txt", "at") 
packets = (s.recvfrom(65565)[0],"hey", s.recvfrom(65565)[1]) 
newfile.write(str(packets[0])) 
newfile.write(str(packets[1])) 
newfile.write("\n") 
newfile.close() 
print (s.recvfrom(65565)) 
+3

能否请你[编辑]更完整地解释为什么这段代码能够回答这个问题?仅限代码答案[阻止](http://meta.stackexchange.com/q/148272/274165),因为他们没有教导解决方案。 –