If you don’t need to support Windows, here’s a really concise way to do it:
import os
hostname = “google.com” #example
response = os.system(“ping -c 1 ” + hostname)
#and then check the response…
if response == 0:
print hostname, ‘is up!’
else:
print hostname, ‘is down!’
This works because ping returns a non-zero value if the connection fails. (The return value actually differs depending on the network error.) You could also change the ping timeout (in seconds) using the ‘-t’ option. Note, this will output text to the console.
This function works in any OS (Unix, Linux, macOS, and Windows)
Python 2 and Python 3
EDITS:
By @radato os.system was replaced by subprocess.call. This avoids shell injection vulnerability in cases where your hostname string might not be validated.
import platform # For getting the operating system name
import subprocess # For executing a shell command
def ping(host):
“””
Returns True if host (str) responds to a ping request.
Remember that a host may not respond to a ping (ICMP) request even if the host name is valid.
“””
# Option for the number of packets as a function of
param = ‘-n’ if platform.system().lower()==’windows’ else ‘-c’
# Building the command. Ex: “ping -c 1 google.com”
command = [‘ping’, param, ‘1’, host]
return subprocess.call(command) == 0
Note that, according to @ikrase on Windows this function will still return True if you get a Destination Host Unreachable error.
Explanation
The command is ping in both Windows and Unix-like systems.
The option -n (Windows) or -c (Unix) controls the number of packets which in this example was set to 1.
platform.system() returns the platform name. Ex. ‘Darwin’ on macOS.
subprocess.call() performs a system call. Ex. subprocess.call([‘ls’,’-l’]).