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.
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
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
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)
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