2016-12-12 2 views
0

на коммутатор, я бег ntpq -nc rv и получить выход:Grep с заменой питона подпроцесса

associd = 0 состояния = 0715 leap_none, sync_ntp, 1 событие, clock_sync, версии = "Ntpd 4.2.6p3- [email protected] Пн мар 21 02:53:48 UTC 2016 (1) ", processor =" x86_64 ", system =" Linux/3.4.43.Ar-3052562.4155M ", leap = 00, stratum = 2 , precision = -21, rootdelay = 23.062, rootdisp = 46.473, refid = 17.253.24.125, reftime = dbf98d39.76cf93ad Пн, 12 дек 2016 20: 55: 21.464, clock = dbf9943.026ea63c Пн, 12 дек 2016 21 : 28: 03,009, peer = 43497, дц = 10, mintc = 3, смещение = -0,114, частота = 27,326, sys_jitter = 0,151, clk_jitter = 0,162, clk_wander = 0,028

Я пытаюсь создать команду Баш оболочки с помощью модуля подпроцесс Python для извлечь только значение «смещения», или -0.114 в приведенном выше примере

я заметил, что я могу использовать для замены подпроцесс мод или ш для этого такие, что:

import sh 

print(sh.grep(sh.ntpq("-nc rv"), 'offset')) 

и я получаю:

mintc=3, offset=-0.114, frequency=27.326, sys_jitter=0.151, 

что неверно, так как мне просто нужно значение для 'offset', -0.114.

Не уверен, что я делаю неправильно здесь, будь то моя функция grep или я не использую модуль sh правильно.

+0

вы могли бы рассмотреть это мечение с питоном, как это не имеет ничего общего с оболочкой или Grep. –

ответ

0

grep читается по строкам; он возвращает каждую строку, соответствующую любой части ввода. Но я думаю, что grep является излишним. Как только вы получите выход оболочки, просто искать вещи после output:

items = sh.ntpq("-nc rv").split(',') 
for pair in items: 
    name, value = pair.split('=') 
    # strip because we weren't careful with whitespace 
    if name.strip() == 'offset': 
     print(value.strip()) 
Смежные вопросы