получение ежедневного значения потребления данных от vnstat в JSON

Я хочу получить ежедневное использование Интернета с моей машины Ubuntu в формате Json с помощью Vnstat. Для получения ежедневного использования в терминале я использую следующую команду:

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 |

Итак, как получить только общее, rx и tx значение, которое это estimated 27 MiB | 7 MiB | 34 MiB | из вышеприведенного вывода в формате Json в форме:

{"daily_usage":{"rx":27,"tx":7,"total":34}}

На самом деле я пытаюсь передать этот json-формат скрипту python позже Thaks заранее!

1
задан 19 March 2018 в 05:24

9 ответов

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, чтобы получить какое-либо поле, в котором вы нуждаетесь. [F5] не требуется и будет игнорироваться, поскольку опция --json принимает аргумент mode.

2
ответ дан 22 May 2018 в 17:12
  • 1
    в настоящее время я использую вышеупомянутую команду, которую вы упомянули, она генерирует строку json со всеми деталями, даже если я упоминаю опцию -d – Sjn73 24 October 2017 в 19:18
  • 2
    @ Sjn73 " и проанализировать его на Python, чтобы получить любое поле, которое вам нужно & quot ;. У вас есть JSON, вы все равно будете разбирать его на Python, так какая разница? Если вы слишком ленивы, тогда: vnstat -d -i wlp2s0 --json | jq -r '.interfaces[0].traffic.total' – muru 24 October 2017 в 19:24
  • 3
    Спасибо за показ использования jq для получения требуемого поля – Sjn73 24 October 2017 в 19:49

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, чтобы получить какое-либо поле, в котором вы нуждаетесь. [F5] не требуется и будет игнорироваться, поскольку опция --json принимает аргумент mode.

2
ответ дан 18 July 2018 в 04:40

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, чтобы получить какое-либо поле, в котором вы нуждаетесь. [F5] не требуется и будет игнорироваться, поскольку опция --json принимает аргумент mode.

2
ответ дан 24 July 2018 в 18:08

@ 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.
1
ответ дан 22 May 2018 в 17:12
  • 1
    Если вы хотите улучшить ответ муру, вы можете предложить вместо него следующее: askubuntu.com/posts/968645/edit – pomsky 19 March 2018 в 01:45
  • 2
    Благодарю. Теперь я это сделал. Я сделал предложение по редактированию, но теперь я вижу, что сделал это анонимно. Если кто-то может прикрепить его к моей учетной записи, это было бы здорово ... – Andrew Collett 20 March 2018 в 15:35
  • 3
    Я отклонил оригинальное редактирование, теперь вы можете отправить его снова, используя свою учетную запись – muru 20 March 2018 в 16:32
  • 4
    Благодаря! Готово. Я благодарен за внимание! – Andrew Collett 21 March 2018 в 17:50
#!/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
0
ответ дан 22 May 2018 в 17:12

@ 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.
1
ответ дан 18 July 2018 в 04:40
#!/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
0
ответ дан 18 July 2018 в 04:40

@ 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.
1
ответ дан 24 July 2018 в 18:08
  • 1
    Если вы хотите улучшить ответ муру, вы можете предложить вместо него следующее: askubuntu.com/posts/968645/edit – pomsky 19 March 2018 в 01:45
  • 2
    Благодарю. Теперь я это сделал. Я сделал предложение по редактированию, но теперь я вижу, что сделал это анонимно. Если кто-то может прикрепить его к моей учетной записи, это было бы здорово ... – Andrew Collett 20 March 2018 в 15:35
  • 3
    Я отклонил оригинальное редактирование, теперь вы можете отправить его снова, используя свою учетную запись – muru 20 March 2018 в 16:32
#!/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
0
ответ дан 24 July 2018 в 18:08

Другие вопросы по тегам:

Похожие вопросы: