net.py 獲取網絡接口的輸入和輸出
if len(sys.argv) > 1:
INTERFACE = sys.argv[1]
else:
INTERFACE = 'eth0'
STATS = []
print 'Interface:',INTERFACE
def rx():
ifstat = open('/proc/net/dev').readlines()
for interface in ifstat:
if INTERFACE in interface:
stat = float(interface.split()[1])
STATS[0:] = [stat]
def tx():
ifstat = open('/proc/net/dev').readlines()
for interface in ifstat:
if INTERFACE in interface:
stat = float(interface.split()[9])
STATS[1:] = [stat]
print 'In Out'
rx()
tx()
while True:
time.sleep(1)
rxstat_o = list(STATS)
rx()
tx()
RX = float(STATS[0])
RX_O = rxstat_o[0]
TX = float(STATS[1])
TX_O = rxstat_o[1]
RX_RATE = round((RX - RX_O)/1024/1024,3)
TX_RATE = round((TX - TX_O)/1024/1024,3)
print RX_RATE ,'MB ',TX_RATE ,'MB'
簡單說明一下清單 4:清單 4 讀取/proc/net/dev 中的信息,Python 中文件操作可以通過 open 函數,這的確很像 C 語言中的 fopen。通過 open 函數獲取一個 file object,然后調用 read(),write()等方法對文件進行讀寫操作。另外 Python 將文本文件的內容讀入可以操作的字符串變量非常容易。文件對象提供了三個“讀”方法: read()、readline() 和 readlines()。每種方法可以接受一個變量以限制每次讀取的數據量,但它們通常不使用變量。 .read() 每次讀取整個文件,它通常用于將文件內容放到一個字符串變量中。然而 .read() 生成文件內容最直接的字符串表示,但對于連續的面向行的處理,它卻是不必要的,并且如果文件大于可用內存,則不可能實現這種處理。.readline() 和 .readlines() 之間的差異是后者一次讀取整個文件,象 .read() 一樣。.readlines() 自動將文件內容分析成一個行的列表,該列表可以由 Python 的 for ... in ... 結構進行處理。另一方面,.readline() 每次只讀取一行,通常比 .readlines() 慢得多。僅當沒有足夠內存可以一次讀取整個文件時,才應該使用 .readline()。最后清單 4 打印出網絡接口的輸入和輸出情況。
可以使用 Python 命令運行腳本 net.py 結果見圖 4 
新聞熱點
疑難解答
圖片精選