web-dev-qa-db-ja.com

Python pingをテストする関数

画面表示を更新できるように、適切なpingを確認し、結果を返すために、定期的に呼び出すことができる関数を作成しようとしています。 pythonが初めてなので、関数に値を返す方法や変数を設定する方法を完全に理解できません。

動作する私のコードは次のとおりです。

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を返す方法です。どんな助けも大歓迎です。

17
user72055

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の入門チュートリアルを一読する価値があると思います。このチュートリアルでは、すべての基本事項を説明します。 dacity.com および codeacademy.com を調査することをお勧めします

26
Totem

ブール値を返し、出力が標準出力にプッシュされない単純化された関数を次に示します。

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
11

これらの2つの答えに加えて、OSを確認し、「-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、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)
10
Pikamander2

これを試して

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