2013-11-13 2 views
0

Я работаю над некоторым кодом, который выполняет операцию ping из python и извлекает только задержку с помощью awk. Это в настоящее время, что у меня есть:Сохранение значения из разобранного пинга

from os import system 
l = system("ping -c 1 sitename | awk -F = 'FNR==2 {print substr($4,1,length($4)-3)}'") 
print l 

system() вызов работает отлично, но я получаю выход в терминале, а не значения, хранящего в л. В основном, пример вывода я хотел бы получить от этого конкретного блока кода будет

90.3 
0 

Почему это происходит, и как бы я идти о фактически хранить это значение в л? Это часть большей вещи, над которой я работаю, поэтому желательно, чтобы я сохранил ее на родном питоне.

+0

Какую версию Python вы используете? – iruvar

+0

Я в настоящее время запущен Python 2.7 –

+0

Из любопытства, не было бы проще сделать синтаксический анализ строк в Python? – Jud

ответ

3

Использование subprocess.check_output если вы хотите сохранить выходные данные в переменной:

from subprocess import check_output 
l = check_output("ping -c 1 sitename | awk -F = 'FNR==2 {print substr($4,1,length($4)-3)}'", shell=True) 
print l 

Похожие: Extra zero after executing a python script

+1

Работает отлично, спасибо! –

1

os.system() возвращает код возврата вызываемой команды, а не на стандартный вывод.

Для подробно о том, как правильно получить вывод команды (в том числе предварительно Python 2.7), видим это: Running shell command from Python and capturing the output

0

Вот как я храню вывод в переменной.

test=$(ping -c 1 google.com | awk -F"=| " 'NR==2 {print $11}') 
echo "$test" 
34.9 
Смежные вопросы