Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行并记录';ping&x27;在Python脚本的循环中_Python_While Loop_Io - Fatal编程技术网

运行并记录';ping&x27;在Python脚本的循环中

运行并记录';ping&x27;在Python脚本的循环中,python,while-loop,io,Python,While Loop,Io,我用python编写了一个简单的Ageant,它所做的只是检查互联网连接。 当他发现没有连接时,他将一个日志文件写入到一个文本中,记录时间和日期,然后退出程序 我希望它继续测试是否有连接,即使没有连接,我怎么能这样做?没有程序退出 代码如下: import os import time def Main(): ping =os.system('ping -n 1 -l 1000 8.8.8.8 ') while ping ==0: time.sleep(4)

我用python编写了一个简单的Ageant,它所做的只是检查互联网连接。 当他发现没有连接时,他将一个日志文件写入到一个文本中,记录时间和日期,然后退出程序

我希望它继续测试是否有连接,即使没有连接,我怎么能这样做?没有程序退出

代码如下:

import os
import time
def Main():

    ping =os.system('ping -n 1 -l 1000 8.8.8.8 ')
    while ping ==0:
        time.sleep(4)
        ping = os.system('ping -n 1 -l 1000 8.8.8.8 ')
        if ping ==1:
            print 'no connection'
            CT =time.strftime("%H:%M:%S %d/%m/%y")
            alert=' No Connection'
            f = open('logfile.txt','a+')
            f.write('\n'+CT)
            f.write(alert)
            f.close()



if __name__ == "__main__":
    Main()

Thanx很多。

Main
调用包装在一个无限循环中


如果我理解正确,这将完成它的工作:

import os
import time

def Main():

    while True:
        ping = os.system('ping -n 1 -l 1000 8.8.8.8 ')
        if ping:
            print 'no connection'
            CT =time.strftime("%H:%M:%S %d/%m/%y")
            alert=' No Connection'
            with open('logfile.txt','a+') as f:
                f.write('\n'+CT)
                f.write(alert)

        time.sleep(4)

if __name__ == "__main__":
    Main()

这段代码应该会让你上路。只需在调用
LogPing
对象时用您选择的主机替换主机即可

查看在线评论,如果您有任何问题,请询问我

from datetime import datetime
import os
import shlex
import subprocess
from time import sleep



class LogPing:

    def __init__(self, host, count=1, timeout_seconds=10, logfile="ping_log.txt"):
        self.host = host
        self.count = count
        self.timeout_seconds = timeout_seconds
        self.logfile = logfile

        self.output_blackhole = open(os.devnull, 'wb')


    def _command(self):
        command_string = "ping -c {count} -t {timeout} {host}".format(
                count=self.count, 
                timeout=self.timeout_seconds,
                host=self.host
            )

        try: 
            # we don't actually care about the output, just the return code, 
            # so trash the output. result == 0 on success
            result = subprocess.check_call(
                    shlex.split(command_string), 
                    stdout=self.output_blackhole, 
                    stderr=subprocess.STDOUT
                )
        except subprocess.CalledProcessError:
            # if here, that means that the host couldn't be reached for some reason.
            result = -1

        return result

    def run(self):
        ping_command_result = self._command()

        if ping_command_result == 0:
            status = "OK"
        else:
            status = "NOK"

        # The time won't be exact, but close enough
        message = "{status} : {time} : {host}\n".format(
                status=status, 
                time=datetime.utcnow().strftime("%Y-%m-%d_%T"), 
                host=self.host
            )

        # open file in a context manager for writing, creating if not exists
        # using a+ so that we append to the end of the last line.
        with open(self.logfile, 'a+') as f:
            f.write(message)




if __name__ == "__main__":
    while True:
        ping_instance = LogPing("example.org").run()
        sleep(4)

请注意,如果第一个
ping
命令失败,您的
while
循环将不会运行。如果发生这种情况,任何东西都不会写入日志文件。我省略了函数调用,修复了。
from datetime import datetime
import os
import shlex
import subprocess
from time import sleep



class LogPing:

    def __init__(self, host, count=1, timeout_seconds=10, logfile="ping_log.txt"):
        self.host = host
        self.count = count
        self.timeout_seconds = timeout_seconds
        self.logfile = logfile

        self.output_blackhole = open(os.devnull, 'wb')


    def _command(self):
        command_string = "ping -c {count} -t {timeout} {host}".format(
                count=self.count, 
                timeout=self.timeout_seconds,
                host=self.host
            )

        try: 
            # we don't actually care about the output, just the return code, 
            # so trash the output. result == 0 on success
            result = subprocess.check_call(
                    shlex.split(command_string), 
                    stdout=self.output_blackhole, 
                    stderr=subprocess.STDOUT
                )
        except subprocess.CalledProcessError:
            # if here, that means that the host couldn't be reached for some reason.
            result = -1

        return result

    def run(self):
        ping_command_result = self._command()

        if ping_command_result == 0:
            status = "OK"
        else:
            status = "NOK"

        # The time won't be exact, but close enough
        message = "{status} : {time} : {host}\n".format(
                status=status, 
                time=datetime.utcnow().strftime("%Y-%m-%d_%T"), 
                host=self.host
            )

        # open file in a context manager for writing, creating if not exists
        # using a+ so that we append to the end of the last line.
        with open(self.logfile, 'a+') as f:
            f.write(message)




if __name__ == "__main__":
    while True:
        ping_instance = LogPing("example.org").run()
        sleep(4)