0

I'm working on some code that performs a ping operation from python and extracts only the latency by using awk. This is currently what I have:

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

The system() call works fine, but I get an output in terminal rather than the value storing into l. Basically, an example output I'd get from this particular block of code would be

90.3
0

Why does this happen, and how would I go about actually storing that value into l? This is part of a larger thing I'm working on, so preferably I'd like to keep it in native python.

Ashwini Chaudhary
  • 244,495
  • 58
  • 464
  • 504
Ian R
  • 39
  • 4

4 Answers4

3

Use subprocess.check_output if you want to store the output in a variable:

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

Related: Extra zero after executing a python script

Community
  • 1
  • 1
Ashwini Chaudhary
  • 244,495
  • 58
  • 464
  • 504
1

os.system() returns the return code of the called command, not the output to stdout.

For detail on how to properly get the command's output (including pre-Python 2.7), see this: Running shell command from Python and capturing the output

Community
  • 1
  • 1
Jud
  • 1,158
  • 1
  • 8
  • 17
1

BTW I would use Ping Package https://pypi.python.org/pypi/ping

It looks promising

slashmili
  • 1,190
  • 13
  • 16
0

Here is how I store output to a variable.

test=$(ping -c 1 google.com | awk -F"=| " 'NR==2 {print $11}')
echo "$test"
34.9
Jotne
  • 40,548
  • 12
  • 51
  • 55