2014-10-20 46 views
10

Sto provando a creare una funzione che posso chiamare su base temporizzata per verificare un buon ping e restituire il risultato in modo da poter aggiornare la visualizzazione su schermo. Sono nuovo di Python quindi non capisco completamente come restituire un valore o impostare una variabile in una funzione.Python Funzione per testare il ping

Ecco il mio codice che funziona:

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

Ecco il mio tentativo di creare una funzione:

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" 

Ed ecco come lo visualizzo pingstatus:

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

Così quello che sto cercando è come restituire pingstatus dalla funzione. Qualsiasi aiuto sarebbe molto apprezzato.

+0

... 'restituire pingstatus'? – jonrsharpe

+0

Per imparare come chiamare le funzioni e restituire i valori, raccomando [Python Tutorial] (https://docs.python.org/3/tutorial/controlflow.html#defining-functions). – Kevin

risposta

14

Sembra che si desidera che la parola chiave return

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 

è necessario per catturare/'ricevere' il valore di ritorno della funzione (pingstatus) in una variabile con qualcosa di simile:

pingstatus = check_ping() 

Alcune informazioni sulle funzioni pitone:

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

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

Probabilmente vale la pena passare attraverso un buon tutorial introduttivo a Python, che coprirà tutti i fondamenti. Mi consiglia di indagare Udacity.com e codeacademy.com

+0

Con questo codice ottengo "NameError: name 'pingstatus' non è definito" – user72055

+0

vedere la mia modifica – Totem

+0

@Totem La modifica è * non * necessaria. – poke

6

Ecco una funzione semplificata che restituisce un valore booleano e non ha alcuna uscita spinto a stdout:

import subprocess, platform 
def pingOk(sHost): 
    try: 
     output = subprocess.check_output("ping -{} 1 {}".format('n' if platform.system().lower()=="windows" else 'c', sHost), shell=True) 

    except Exception, e: 
     return False 

    return True 
2

Aggiungendo a queste due risposte, è possibile controllare il sistema operativo e decidere se usare "-c" o "-n":

import os, platform 
host = "8.8.8.8" 
os.system("ping " + ("-n 1 " if platform.system().lower()=="windows" else "-c 1 ") + host) 

Questo funziona su Windows, OS X e Linux

Puoi utilizzare anche sys:

import os, sys 
host = "8.8.8.8" 
os.system("ping " + ("-n 1 " if sys.platform().lower()=="win32" else "-c 1 ") + host) 
+1

Ho aggiunto le tue idee alla mia risposta e ti ho dato un upvoat per la buona idea. –