我想使用以下方法从我的 Ubuntu 机器以 Json 格式检索每日互联网使用情况维恩斯塔特。要在终端中获取每日使用情况,我使用以下命令:
vnstat -d -i wlp2s0
输出将是:
wlp2s0 / daily
day rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
,ۋ6� 60 KiB | 27 KiB | 87 KiB | 0.01 kbit/s
,ۋ6� 333.00 MiB | 170.16 MiB | 503.16 MiB | 47.71 kbit/s
,ۋ6� 626.23 MiB | 39.64 MiB | 665.87 MiB | 63.13 kbit/s
,ۋ6� 172.47 MiB | 177.32 MiB | 349.79 MiB | 33.16 kbit/s
,ۋ6� 11.88 MiB | 1.66 MiB | 13.54 MiB | 1.28 kbit/s
,ۋ6� 0 KiB | 0 KiB | 0 KiB | 0.00 kbit/s
,ۋ6� 380.47 MiB | 21.22 MiB | 401.69 MiB | 38.09 kbit/s
,ۋ6� 173.32 MiB | 14.71 MiB | 188.03 MiB | 17.83 kbit/s
,ۋ6� 0 KiB | 0 KiB | 0 KiB | 0.00 kbit/s
,ۋ6� 0 KiB | 0 KiB | 0 KiB | 0.00 kbit/s
,ۋ6� 17.49 MiB | 4.33 MiB | 21.82 MiB | 2.07 kbit/s
,ۋ6� 70 KiB | 73 KiB | 143 KiB | 0.01 kbit/s
,ۋ6� 15.12 MiB | 1.95 MiB | 17.07 MiB | 1.62 kbit/s
,ۋ6� 18.45 MiB | 5.86 MiB | 24.31 MiB | 3.55 kbit/s
------------------------+-------------+-------------+---------------
estimated 27 MiB | 7 MiB | 34 MiB |
那么如何仅检索estimated 27 MiB | 7 MiB | 34 MiB |
上述输出中的总计、rx 和 tx 值Json
,格式如下:
{"daily_usage":{"rx":27,"tx":7,"total":34}}
实际上我稍后正尝试将此 json 格式传递给 python 脚本,提前谢谢大家!!
答案1
vnstat
有以机器可读格式输出的选项。从man vnstat
:
--json mode
Show database content for selected interface or all interfaces
in json format. All traffic values in the output are in KiB. An
optional mode parameter can be used for limiting the output to
only selected information. Everything is shown by default.
Setting mode to 'h' will output only hours, 'd' days, 'm' months
and 't' the top 10.
--xml mode
Show database content for selected interface or all interfaces
in xml format. All traffic values in the output are in KiB. An
optional mode parameter can be used for limiting the output to
only selected information. Everything is shown by default.
Setting mode to 'h' will output only hours, 'd' days, 'm' months
and 't' the top 10.
只需vnstat -i wlp2s0 --json d
在 Python 中执行并解析它即可获得所需的任何字段。不需要-d
,并且将被忽略,因为--json
选项接受mode
参数。
答案2
@Sjn73,所以,@muru 的想法是正确的。
我唯一想评论的(但目前还不能)是,你可以简单地写:vnstat --json d
这会将mode
文档中提到的内容切换为仅限每日。请注意,这是对标志的输入--json
,与标志不同-d
。
Everything is shown by default.
Setting mode to 'h' will output only hours, 'd' days, 'm' months
and 't' the top 10.
答案3
#!/bin/bash
#get the last line
IN=$(vnstat -d | (tail -n1))
#remove estimated
INR=${IN//estimated}
#convert to array
arrOUT=(${INR//|/ })
#format the output
OUTPUT="{\"daily_usage\":{\"rx\": ${arrOUT[0]}, \"tx\": ${arrOUT[2]}, \"total\": ${arrOUT[4]} }"
OUTPUT2="{\"daily_usage\":{\"rx\": ${arrOUT[0]} ${arrOUT[1]}, \"tx\": ${arrOUT[2]} ${arrOUT[3]}, \"total\": ${arrOUT[4]} ${arrOUT[5]} }"
#pick one
echo $OUTPUT
echo $OUTPUT2
- 保存到
your_script.sh
- 更改文件权限以使其可执行
- 运行为
bash your_script.sh