2012-01-22 21 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),因爲他們沒有教導解決方案。 –