Storing value from a parsed ping

2020-05-03 18:41发布

问题:

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.

回答1:

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



回答2:

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



回答3:

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

It looks promising



回答4:

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


标签: python linux awk