2014-10-20 40 views
10

我试图创建一个函数,我可以定时调用以检查良好的ping并返回结果,以便我可以更新屏幕显示。我是python的新手,所以我不完全理解如何返回值或在函数中设置变量。Python函数来测试ping

这里是我的代码工作:

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

这是我在创造一个功能的尝试:

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" 

,这里是我如何显示pingstatus

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

所以我正在寻找的是如何从函数返回pingstatus。任何帮助将不胜感激。

+0

...'return pingstatus'? – jonrsharpe 2014-10-20 14:54:46

+0

要学习如何调用函数和返回值,我推荐[Python教程](https://docs.python.org/3/tutorial/controlflow.html#defining-functions)。 – Kevin 2014-10-20 14:55:19

回答

14

它看起来像你想的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 

您需要捕获/“接收”在一个变量的函数(pingstatus)的返回值的东西,如:

pingstatus = check_ping() 

有关python函数的一些信息:

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

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

这可能是值得通过一个良好的Python入门教程,它将涵盖所有的基础知识。我建议调查Udacity.comcodeacademy.com

+0

使用此代码我得到“NameError:name'pingstatus'未定义” – user72055 2014-10-20 15:51:46

+0

请参阅我的编辑 – Totem 2014-10-20 15:55:45

+0

@Totem您的编辑是*不必*。 – poke 2014-10-20 15:58:33

6

这里是一个简化的函数返回一个布尔值,也没有输出推到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

添加到这两个答案,你可以检查操作系统,并决定是否使用 “-c” 或 “-n”:

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

这将在Windows,Mac OS X和Linux

工作

可以还使用sys

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

我已将您的想法添加到我的答案中,并为您提供了一个好主意。 – 2017-07-03 05:06:05