Извлечь значение смещения ntpdate в переменной в python

Я хочу проверить, превышает ли время смещения более 0,5 секунды и выполняет некоторые действия. Я выполняю команду ntpdate -q <Server ip address>

Может ли кто-нибудь сказать мне, как мне взять значение смещения в переменной, чтобы я мог выполнять дальнейшие действия?

2 Solutions collect form web for “Извлечь значение смещения ntpdate в переменной в python”

Решение

 import subprocess output = subprocess.check_output('ntpdate -q 3.us.pool.ntp.org | head -1 | cut -d " " -f 6 | sed "s/.$//"', shell=True) 

Вы можете изменить имя сервера «3.us.pool.ntp.org» на выбранный вами NTP-сервер.

С помощью этого метода выходная переменная будет содержать только смещение, указанное в первой строке вывода команды ntpdate, и после этого вы можете делать то, что хотите.

 if output > X: do something... 

объяснение

Вы уже знаете, что делает ntpdate (четко), чтобы вы знали, что вывод, с которым он возвращается, содержит много бесполезной информации для того, что вы пытаетесь сделать.

  • Подпроцесс позволяет запускать команды bash из вашего скрипта python

  • check_output делает именно то, что он говорит на жестяне, и в этом случае сохраняет его в выходной переменной.

  • head -1 просто занимает верхнюю строку вывода ntpdate, если использовать пул, как в моем примере (различные результаты не должны сильно отличаться, поэтому верх должен быть прекрасным).

  • cut обрабатывает строки как поля, ограниченные пространственным символом. Он сортирует и выбирает 6-е поле, которое является значением смещения.

  • sed удаляет последний символ из этого значения, который является запятой и разрушит любую попытку, которую вы сделаете для фактического использования значения.

  • shell = True вызывает оболочку для выполнения действия.

~~~~~~~~~ EDIT ~~~~~~~~~~~

У меня также нет комментариев для комментариев, ха. Не могли бы вы сообщить мне, какая версия python на сервере работает @Iram Khan?

 python -V 

Я подозреваю, что это версия <2.7, как это было тогда, когда была добавлена ​​функциональность check_output. В этом случае вам, возможно, придется изменить выше:

 import subprocess cmd = "ntpdate -q 3.us.pool.ntp.org | head -1 | cut -d ' ' -f 6 | sed 's/.$//'" ps = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT) output = ps.communicate()[0] 

Это должно сделать это, если check_output не будет работать.

Использовать backtics “ для оценки команды и назначить вывод переменной

 OFFSET=`ntpdate -q <Server ip address> |sed 's/.*\(offset\) \([0-9]\.[0-9]\+\).*/\2/'` if [[ $OFFSET -gt 0.5 ]]; then <do something...> fi 
  • CentOS: Как заставить pip установить Django с последним Python 3.5
  • Что включать в RPM, созданный из пакетов python
  • Проблемы с компиляцией Python 3.6.0+ в Qubes OS Debian
  • Как получить имя Диспетчера отображения в Linux?
  • Считайте и объедините последовательные паттерны
  • Как предотвратить закрытие приложения python в Linux?
  • Разрешение отклонено без подключения ssh
  • Поиск файлов по кодировке символов
  • Отправить «ввести ключ» в скрипт python из bash
  • Установка старых версий пакетов python с apt-get (в частности, wxpython)
  • Программа, запускаемая из udev, не может открыть окно
  • загрузка python при загрузке ядра Linux
  • Interesting Posts

    «Конфликтующее распространение: InRelease (ожидаемый выпуск, но получил релиз + 1)», что это такое?

    Как сообщить Xorg о разрешении, которое я уже установил?

    Bash для замены некоторых слов, присутствующих в одном файле из другого файла

    Прокси-сервер на FreeBSD отклоняет соединения

    Можно ли перенаправить корневую почту на внутреннюю электронную почту axigen?

    Что такое рейтинг дистрибутива Linux, основанный на количестве пакетов?

    Bash autocomplete: не перечисляет файлы или каталоги

    Bash: Почему не * возвращает пустую строку в случае отсутствия соответствия

    Скопируйте скобки в PS1

    Почему использование `yes` на bash-конвейерах * не * вызывает бесконечные циклы?

    Почему find не принимает '-exec cp {} dir +'?

    странные символы в оболочке bash

    Ограничить каталог только одним файлом?

    почему я вижу ipv6-сокет с отключенным стеком ipv6?

    Как получить дескриптор файла, отличный от stdin stdout и stderr (чтобы сделать что-то вроде $ program 1> file_1 3> file_2)?

    Linux и Unix - лучшая ОС в мире.