Python ping script
21,080
You should print the result immediately after pinging each hostname. Try this:
import os
hostnames = [
'10.40.161.2',
'10.40.161.3',
'10.40.161.4',
'10.40.161.5',
]
for hostname in hostnames:
response = os.system('ping -c 1 ' + hostname)
if response == 0:
print(hostname, 'is up')
else:
print(hostname, 'is down')
Also, you should consider using the subprocess
module instead of os.system()
as the latter is deprecated.
Author by
Melissa Chillington
Updated on April 05, 2021Comments
-
Melissa Chillington about 3 years
I am trying to write a Python script that pings IP addresses and outputs whether each ping succeeded. So far I have the following code, but the output seems inaccurate. Namely, when I run the script, it pings each hostname as expected but the output is only ever all up or all down.
import os hostname0 = "10.40.161.2" hostname1 = "10.40.161.3" hostname2 = "10.40.161.4" hostname3 = "10.40.161.5" response = os.system("ping -c 1 " + hostname0) response = os.system("ping -c 1 " + hostname1) response = os.system("ping -c 1 " + hostname2) response = os.system("ping -c 1 " + hostname3) if response == 0: print hostname0, 'is up' print hostname1, 'is up' print hostname2, 'is up' print hostname3, 'is up' else: print hostname0, 'is down' print hostname1, 'is down' print hostname2, 'is down' print hostname3, 'is down'
-
jeremysprofile almost 6 yearsyou are continually resetting
response
. By the if statement, it is only based on the response to hostname8. -
zhqiat almost 6 yearsConsider looping through a list and printing the response.
-
abarnert almost 6 yearsAs a side note: that the docs for
os.system
explicitly tell you that "The subprocess module provides more powerful facilities for spawning new processes and retrieving their results; using that module is preferable to using this function."
-