Python函数来测试ping

use*_*055 18 python variables return function

我正在尝试创建一个函数,我可以在定时的基础上调用以检查良好的ping并返回结果,以便我可以更新屏幕显示.我是python的新手,所以我不完全了解如何在函数中返回值或设置变量.

这是我的代码有效:

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

这是我尝试创建一个函数:

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"
Run Code Online (Sandbox Code Playgroud)

以下是我的展示方式pingstatus:

label = font_status.render("%s" % pingstatus, 1, (0,0,0))
Run Code Online (Sandbox Code Playgroud)

所以我要找的是如何从函数返回pingstatus.任何帮助将不胜感激.

Tot*_*tem 27

看起来你想要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
Run Code Online (Sandbox Code Playgroud)

您需要在变量中捕获/"接收"函数的返回值(pingstatus),例如:

pingstatus = check_ping()
Run Code Online (Sandbox Code Playgroud)

有关python函数的一些信息:

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

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

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

  • @ user72055虽然`check_ping`现在返回一个结果,你仍然需要通过将它分配给变量来捕获该结果,然后才能访问该值:`pingstatus = check_ping()`. (2认同)

Tim*_*inn 11

这是一个简化的函数,它返回一个布尔值,没有输出到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
Run Code Online (Sandbox Code Playgroud)


Pik*_*er2 10

添加这两个答案,您可以检查操作系统并决定是使用"-c"还是"-n":

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

这适用于Windows,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)
Run Code Online (Sandbox Code Playgroud)

  • 我已将您的想法添加到我的答案中,并为您提供了一个好主意的upvoat. (2认同)

sun*_*386 5

尝试这个

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
Run Code Online (Sandbox Code Playgroud)