Python Ping Script Example

This beginner-friendly example shows how to make a simple Python ping script by running your operating system's ping command.

This is useful when you want to:

  • check whether a host can be reached
  • test basic network connectivity
  • learn how Python can run terminal commands
  • build a small troubleshooting script

Python does not have a simple built-in ping() function for this. A common beginner approach is to run the system command with subprocess.

Quick example

import platform
import subprocess

host = "google.com"
param = "-n" if platform.system().lower() == "windows" else "-c"
result = subprocess.run(["ping", param, "4", host], capture_output=True, text=True)

print(result.stdout)
print("Reachable" if result.returncode == 0 else "Not reachable")

Note: This uses the operating system ping command. It works as a simple beginner script, but the exact output depends on your system.

What this script does

This script checks whether a host can be reached over the network.

It does that by:

  • choosing the correct ping option for your operating system
  • running the external ping command
  • collecting the command output
  • checking the return code
  • printing a simple result message

This is a good example for learning and small utility scripts. It is not a full monitoring system.

When to use a Python ping script

A script like this is useful when you want to:

  • check if a website or device responds
  • test network reachability in a simple script
  • learn how to run terminal commands from Python
  • build small monitoring or troubleshooting tools

If you want more practice with scripts that run checks and report results, see the Python URL checker script example or a Python command-line tool example.

How the example works

Here is the example again:

import platform
import subprocess

host = "google.com"
param = "-n" if platform.system().lower() == "windows" else "-c"

result = subprocess.run(
    ["ping", param, "4", host],
    capture_output=True,
    text=True
)

print(result.stdout)
print("Reachable" if result.returncode == 0 else "Not reachable")

Step by step, the script does this:

  1. Imports platform to detect the operating system.
  2. Imports subprocess to run an external command.
  3. Stores the target host in host.
  4. Uses -n on Windows and -c on macOS/Linux.
  5. Runs ping with a count of 4.
  6. Saves the result in result.
  7. Prints the command output.
  8. Checks result.returncode to decide whether the host is reachable.

Key lines to explain

platform.system().lower()

platform.system().lower()

This checks the current operating system and turns it into lowercase text.

Examples:

  • "Windows" becomes "windows"
  • "Linux" becomes "linux"
  • "Darwin" becomes "darwin" on macOS

That helps the script choose the correct ping option.

subprocess.run(...)

subprocess.run(["ping", param, "4", host], capture_output=True, text=True)

This runs an external command from Python.

In this case, it runs:

  • ping -n 4 google.com on Windows
  • ping -c 4 google.com on Linux or macOS

If you are new to running system commands from Python, the os module overview and sys module overview are also useful background topics.

capture_output=True

capture_output=True

This collects the command output so Python can use it later.

Without this, the command may print directly to the terminal instead of being stored in result.stdout.

text=True

text=True

This tells Python to return the output as normal text.

Without text=True, the output would be returned as bytes, which is harder for beginners to read.

result.returncode == 0

result.returncode == 0

A return code of 0 usually means the command succeeded.

For this script, that usually means the ping command was able to reach the host.

Expected output

The output will usually show several lines from the ping command, followed by a final message.

Example:

PING google.com (142.250.190.14): 56 data bytes
64 bytes from 142.250.190.14: icmp_seq=0 ttl=117 time=14.2 ms
64 bytes from 142.250.190.14: icmp_seq=1 ttl=117 time=13.8 ms
64 bytes from 142.250.190.14: icmp_seq=2 ttl=117 time=14.0 ms
64 bytes from 142.250.190.14: icmp_seq=3 ttl=117 time=13.9 ms

Reachable

If the host cannot be reached, you may see different output and this final line:

Not reachable

The exact format is different on:

  • Windows
  • Linux
  • macOS

That is normal.

Common beginner problems

These are the most common reasons a simple ping script does not work as expected:

  • using the wrong flag: -n vs -c
  • trying to ping a host with no internet connection
  • firewall or network rules blocking ping
  • the ping command not being available in the current environment
  • thinking ping success means the whole website or app is working

Common causes

  • Wrong ping flag for the operating system
  • Host name is misspelled
  • No network connection
  • Ping blocked by firewall
  • Running in a restricted environment where ping is unavailable
  • Assuming return code meanings without checking system behavior

Simple improvements

Once the basic version works, you can improve it in small steps.

For example, you can:

  • let the user enter a hostname
  • ping multiple hosts in a loop
  • save results to a file
  • add a timeout
  • show only success or failure instead of the full output

Here is a small improvement that asks the user for a host:

import platform
import subprocess

host = input("Enter a host to ping: ").strip()
param = "-n" if platform.system().lower() == "windows" else "-c"

result = subprocess.run(
    ["ping", param, "4", host],
    capture_output=True,
    text=True
)

print(result.stdout)
print("Reachable" if result.returncode == 0 else "Not reachable")

If you want to make this more robust, learn how to handle exceptions in Python. That will help when a command is missing or input is invalid.

Safety and portability notes

This example is simple on purpose, but a few good habits matter:

  • Prefer passing a list to subprocess.run(...)
  • Avoid shell=True for simple cases
  • Remember that command behavior depends on the operating system
  • Treat this as a basic example, not a full monitoring solution

Passing a list like this is safer:

["ping", param, "4", host]

That is better than building one shell string yourself.

Debugging commands

If your script is not working, these commands can help you test the environment:

python ping_script.py
ping google.com
ping -c 4 google.com
ping -n 4 google.com
python --version

Use them like this:

  • run python ping_script.py to test your script
  • run ping google.com directly in the terminal to see if ping works at all
  • try ping -c 4 google.com on Linux or macOS
  • try ping -n 4 google.com on Windows
  • run python --version to confirm Python is installed

If Python cannot find a file or command while you test scripts, you may also run into errors like FileNotFoundError: Errno 2 No such file or directory or PermissionError: Errno 13 Permission denied.

FAQ

Does Python have a built-in ping function?

Not as a simple built-in function. Beginners usually run the system ping command with subprocess.

Why does my script use -n on Windows and -c on Linux or macOS?

The ping command uses different options on different operating systems.

  • Windows uses -n for count
  • Linux and macOS commonly use -c

Why does the script say Not reachable even when the website opens in my browser?

Some servers block ping requests. A browser working does not always mean ping will work.

Can I ping an IP address instead of a domain name?

Yes. You can use:

  • a host name like google.com
  • an IP address like 8.8.8.8

Is this the best way to monitor servers?

It is fine for a beginner example.

Real monitoring tools usually need:

  • retries
  • logging
  • timeouts
  • better error handling

See also

A good next step is to turn this basic ping script into a small command-line tool that checks user-provided hosts and handles errors clearly.