Python脚本 - 日志失败icmp / ping响应 - 问题

时间:2013-05-02 14:22:02

标签: python python-2.7

我正在尝试编写一个Python脚本来ping / icmp一个IP地址并告诉我它是否还活着。我这样做是因为我有一个间歇性的问题。我想ping,记录结果,睡一段时间并再次尝试ping。我尝试了一个while循环,但仍然遇到这样的错误:

line 33, in (module) systemPing('192.168.1.1')
line 30, in systemPing time.sleep(30)
KeyboardInterrupt

我正在使用Python 2.6。

理想情况下,我的问题是如何循环使用此方法/函数systemPing以及我的代码中存在哪些错误?该脚本似乎有效,但是当我按下ctrl-c时出现这些错误。

from subprocess import Popen, PIPE
import datetime, time, re 

logFile = open("textlog.txt", "a")

def getmyTime():
    now = datetime.datetime.now()
    return now.strftime("%Y-%m-%d %H:%M \n")

startTime = "Starting ..." + getmyTime()
logFile.write(startTime)
logFile.write("\n")

def systemPing(x):
    cmd = Popen("ping -n 1 " + x , stdout=PIPE)
    #print getmyTime()
    for line in cmd.stdout:
        if 'timed out' in line:
            loggedTime = "Failure detected - " + getmyTime()
            logFile.write(loggedTime)
        if 'Reply' in line:
            print "Replied..."
    logFile.close() 
    print "Sleeping 30mins ... CTRL C to end"
    time.sleep(30) #1800 is 30mins
    systemPing('192.168.1.1')

if __name__ =='__main__':
    systemPing('192.168.1.1')

任何帮助总是受到赞赏。 谢谢。

1 个答案:

答案 0 :(得分:1)

这本身并不是一个错误,它只是Python的默认行为,收到SIGINT(按CTRL-C时会发生这种情况),引发KeyboardInterrupt异常

如果您使用kill(1)发送信号,您将得到同样的信息,例如......

$ kill -INT <pid>

如果你想处理它,那么你可以将代码更改为......

if __name__ =='__main__':
    try:
        systemPing('192.168.1.1')
    except KeyboardInterrupt:
        print 'Finished'

......或者你想做什么。