Search code examples
pythonfunctionvariablesreturn

Python Function to test ping


I'm trying to create a function that I can call on a timed basis to check for good ping and return the result so I can update the on-screen display. I am new to python so I don't fully understand how to return a value or set a variable in a function.

Here is my code that works:

import os
hostname = "google.com"
response = os.system("ping -c 1 " + hostname)
if response == 0:
    pingstatus = "Network Active"
else:
    pingstatus = "Network Error"

Here is my attempt at creating a function:

def check_ping():
    hostname = "google.com"
    response = os.system("ping -c 1 " + hostname)
    # and then check the response...
    if response == 0:
        pingstatus = "Network Active"
    else:
        pingstatus = "Network Error"

And here is how I display pingstatus:

label = font_status.render("%s" % pingstatus, 1, (0,0,0))

So what I am looking for is how to return pingstatus from the function. Any help would be greatly appreciated.


Solution

  • It looks like you want the return keyword

    def check_ping():
        hostname = "taylor"
        response = os.system("ping -c 1 " + hostname)
        # and then check the response...
        if response == 0:
            pingstatus = "Network Active"
        else:
            pingstatus = "Network Error"
        
        return pingstatus
    

    You need to capture/'receive' the return value of the function(pingstatus) in a variable with something like:

    pingstatus = check_ping()
    

    NOTE: ping -c is for Linux, for Windows use ping -n

    Some info on python functions:

    http://www.tutorialspoint.com/python/python_functions.htm

    http://www.learnpython.org/en/Functions

    It's probably worth going through a good introductory tutorial to Python, which will cover all the fundamentals. I recommend investigating Udacity.com and codeacademy.com

    EDIT: This is an old question now, but.. for people who have issues with pingstatus not being defined, or returning an unexpected value, first make triple sure your code is right. Then try defining pingstatus before the if block. This may help, but issues arising from this change are for a different question. All the best.