创建python脚本,将ping结果打印到旋转日志中

时间:2019-10-29 11:51:35

标签: python python-3.x linux

我正在尝试在python中创建一个脚本,该脚本连续ping特定主机并将其结果打印到每日轮换的日志文件中。 应保留最近30天的日志,所有旧的日志都应删除。 我绝对没有使用python的经验。

1 个答案:

答案 0 :(得分:0)

您可以使用标准的python日志记录模块:

下面是使用日志记录包中“ TimedRotatingFileHandler”的代码示例。基本上,我们创建了一个日志记录处理程序,该程序将登录文件30天,然后将其替换为新文件。每次我们使用log方法时,日志都会自动进入该文件。 对于ping部分,我们使用子进程包,并在后台运行ping命令以捕获其输出。

string searchName = Console.ReadLine();

if (PeopleList.Contains(new People {
    Name = searchName
})) {
    //Display name, age, address here
} else {
    Console.WriteLine("Name not found");
}

当您定义构造函数“ TimedRotatingFileHandler”时,您可以传递如下参数:

  • (路径)名称为日志文件的路径

  • (当是)间隔类型时,我们用“ d”表示“ day”,其他可能的值为“ m”,“ s”,“ h”

  • (interval)实际间隔为整数,我们定义了30天

  • (backupCount)那里有多少个日志副本,如果指定的副本数大于1,则会保留更多日志文件

如果您想实时测试它,请将“ d”替换为“ s”(秒)

该脚本需要保持运行才能正常工作。

您可以在linux shell中在后台运行它:

import logging
import time
import subprocess

from logging.handlers import TimedRotatingFileHandler


def ping_host(path, hostname, ping_delay=20):
    """"""
    logger = logging.getLogger("Rotating Log")
    logger.setLevel(logging.INFO)
    handler = TimedRotatingFileHandler(path,
                                       when="d",
                                       interval=30,
                                       backupCount=1)
    logger.addHandler(handler)
    while True:
        response = subprocess.Popen(["/bin/ping", "-c1", "-w100", 
hostname], stdout=subprocess.PIPE).stdout.read()
        logger.info("Ping at {0}, result: {1}".format(time.time(), 
response))
        time.sleep(ping_delay)


if __name__ == "__main__":
    hostname = "google.com"
    log_file = "timed_test.log"
    ping_host(log_file, hostname)
相关问题