2014-10-20 83 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