получение ежедневного потребления данных оценивает от 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 в 04:24

3 ответа

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
ответ дан 7 December 2019 в 12:31
#!/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
ответ дан 7 December 2019 в 12:31

@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
ответ дан 7 December 2019 в 12:31

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

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