Ian R
Ian R

Reputation: 39

Storing value from a parsed ping

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.

Upvotes: 0

Views: 906

Answers (4)

Ashwini Chaudhary
Ashwini Chaudhary

Reputation: 250951

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

Upvotes: 3

Jotne
Jotne

Reputation: 41456

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

Upvotes: 0

slashmili
slashmili

Reputation: 1220

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

It looks promising

Upvotes: 1

Jud
Jud

Reputation: 1188

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

Upvotes: 1

Related Questions