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

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

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

  • emacs python2.7
  • Почему работает «echo os.system (« / bin / bash »)?
  • Неудачная установка 32-разрядного питона на 64-битный Linux Mint
  • Управление выходными потоками многих подпроцессов с взаимоблокировками
  • Установка плагина для quodlibet как патча
  • FreeBSD: использование python3 в uwsgi вместо python2
  • Cygwin DenyHosts-файл-файл-демона: нет такой ошибки файла или каталога
  • Launcher для программы Python, которая требует дополнительных библиотек
  • 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 
    Linux и Unix - лучшая ОС в мире.