web-dev-qa-db-fra.com

Fonction Python pour tester le ping

J'essaie de créer une fonction que je peux appeler à intervalles réguliers pour vérifier le bon ping et renvoyer le résultat afin de pouvoir mettre à jour l'affichage à l'écran. Je suis nouveau sur Python, je ne comprends donc pas vraiment comment renvoyer une valeur ou définir une variable dans une fonction.

Voici mon code qui fonctionne:

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

Voici ma tentative de créer une fonction:

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"

Et voici comment j'affiche pingstatus:

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

Donc, ce que je cherche, c'est comment renvoyer pingstatus à partir de la fonction. Toute aide serait grandement appréciée.

14
user72055

Il semble que vous souhaitiez le mot clé 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

Vous devez capturer/'recevoir' la valeur de retour de la fonction (pingstatus) dans une variable avec quelque chose comme:

pingstatus = check_ping()

Quelques informations sur les fonctions python:

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

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

Cela vaut probablement la peine de passer par un bon tutoriel d’introduction à Python, qui couvrira tous les principes fondamentaux. Je recommande d'enquêter Udacity.com et codeacademy.com

21
Totem

Voici une fonction simplifiée qui retourne un booléen et n'a pas de sortie poussée sur 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
10
Timothy C. Quinn

En ajoutant à ces deux réponses, vous pouvez vérifier le système d'exploitation et décider d'utiliser "-c" ou "-n":

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

Cela fonctionnera sous Windows, OS X et Linux.

Vous pouvez également utiliser sys:

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

Essaye ça

def ping(server='example.com', count=1, wait_sec=1):
    """

    :rtype: dict or None
    """
    cmd = "ping -c {} -W {} {}".format(count, wait_sec, server).split(' ')
    try:
        output = subprocess.check_output(cmd).decode().strip()
        lines = output.split("\n")
        total = lines[-2].split(',')[3].split()[1]
        loss = lines[-2].split(',')[2].split()[0]
        timing = lines[-1].split()[3].split('/')
        return {
            'type': 'rtt',
            'min': timing[0],
            'avg': timing[1],
            'max': timing[2],
            'mdev': timing[3],
            'total': total,
            'loss': loss,
        }
    except Exception as e:
        print(e)
        return None
1
sunapi386