方案:
经思考得出两种处理方案:
- 通过读取linux中的/proc目录的相关文件获取网络数据的差值进而计算出当前网速
- 通过调用命令ifconfig来获取RX部分的数据值通过计算相应时间间隔的差值计算结果
思考
- 在方案一中使用的是linux下的proc文件系统net目录中的相关信息
在该方案中需要
- 读取对应的proc中的相关文件(/proc/net/dev)
- 通过对字符串的操作获取相关结果值
- 通过延时函数得到时间差
- 计算相关结果值
- 在方案二中使用的是linux下的ifconfig命令中的网卡信息
在该方案中需要
- 使用python对linux命令的简单调用处理,这里使用os.popen函数处理
- 正则re的简单使用,这里需要正则匹配到对应的相关值,即可
- 通过调用延时函数得到时间差
- 计算相关结果值
结果
方案一示例代码:
# 该部分代码不够健全
import sys, time
def net_speed(interface, is_download):
# 获取对应值
which_num = 0 if is_download else 8
# 读取文件
with open('/proc/net/dev') as f:
lines = f.readlines()
# 获取结果值
for line in lines:
if line.rstrip().split(':')[0].strip() == interface:
return line.rstrip().split(':')[1].split()[which_num]
if __name__ == '__main__':
# 获取参数
interface = sys.argv[1]
is_upload = False if sys.argv[2]=='tx' else True
get_time = int(sys.argv[3])
# 计算部分
begin = int(net_speed(interface, is_upload))
time.sleep(get_time)
end = int(net_speed(interface, is_upload))
print begin, ":", end
print (end-begin) /get_time/1024
方案二示例代码:
# 该部分代码不够健全
import os, sys, time, re
# 获取对应值
def get_total_bytes(interface, is_download):
grep = 'RX bytes:' if is_download else 'TX bytes:'
r = os.popen('ifconfig ' + interface + ' | grep "' + grep + '"').read()
total_bytes = re.findall(grep+'(.*?) \(', r)
return int(total_bytes[0])
if __name__ == '__main__':
# 获取参数
interface = sys.argv[1]
is_upload = False if sys.argv[2]=='tx' else True
get_time = int(sys.argv[3])
# 计算部分
begin = get_total_bytes(interface, is_upload)
time.sleep(get_time)
end = get_total_bytes(interface, is_upload)
print (end-begin) /get_time/1024