• Как узнать количество секций в config.ini заданных пользователем?

    shabelski89
    @shabelski89
    engineer
    Я думаю можно как-то так.
    1) Циклы
    2) Классы
    3) Выполнение и перехват процессов ОС
    4) форматирование вывода - тут ещё нужно подумать над выравниванием

    to do
    1) сейчас реализован разовый запуск и проверка по списку, в идеале чтобы висел непрерывно

    from configparser import ConfigParser
    from enum import IntEnum
    import subprocess
    from datetime import datetime
    import colorama
    from colorama import Fore, Style
    
    
    class Status(IntEnum):
        UP = 1
        DOWN = 2
    
    
    class PingStatus(IntEnum):
        success = 0
        failed = 2
    
    
    class Camera:
        def __init__(self, pos: int, name: str, area: str, ip: str, mac: str):
            self.pos = pos
            self.name = name
            self.area = area
            self.ip = ip
            self.mac = mac
            self.status = None
            self.dt = None
    
        def __repr__(self):
            return "|".join([str(x).ljust(15) for x in vars(self).values()])
    
        def check_status(self):
            result = subprocess.call('ping %s -n 2' % self.ip, stderr=subprocess.DEVNULL, stdout=subprocess.DEVNULL)
            if result == PingStatus.success:
                self.status = "\033[4m\033[37m\033[42m{}\033[0m".format(Status.UP.name)
            elif result == PingStatus.failed:
                self.status = "\033[4m\033[37m\033[41m{}\033[0m".format(Status.DOWN.name)
            else:
                self.status = "\033[4m\033[37m\033[41m{}\033[0m".format(Status.DOWN.name)
            self.dt = datetime.now().strftime("%Y.%m.%d %H:%M")
    
    
    if __name__ == "__main__":
        colorama.init()
        print(Fore.YELLOW + 'IP CCTV monitoring system')
        print(Style.RESET_ALL)
        config = ConfigParser()
        config.read('config.ini')
        cams = {config[x]['name']: Camera(pos=int(config[x]['pos']), name=config[x]['name'], area=config[x]['area'],
                                          mac=config[x]['mac'], ip=config[x]['Ip'])
                for x in config.sections() if x.startswith('cam')}
    
        for cam in cams.values():
            cam.check_status()
            print(cam)
    Ответ написан
    1 комментарий
  • Как узнать количество секций в config.ini заданных пользователем?

    Учим основы питона про словари и списки, учим циклы и используем

    import configparser
    from datetime import time
    from pprint import pprint
    
    config = configparser.ConfigParser()  # создаём объекта парсера
    config.read("conf.ini")  # читаем конфиг
    my_config_parser_dict = {s: dict(config.items(s)) for s in config.sections()}
    
    for block in my_config_parser_dict.values():
        block['bool'] = True
        block['time'] = time(15, 20)
        print(*block.values(), sep='|')
    
    print()
    pprint(my_config_parser_dict)


    вывод

    1|cam1|1-st floor|10.0.1.23|00:1A:C2:7B:00:47|True|15:20:00
    2|cam2|2-nd floor|10.0.1.24|00:4A:C2:7B:10:42|True|15:20:00
    3|cam3|3-rd floor|10.0.1.25|00:43:C2:7B:F0:13|True|15:20:00
    
    {'cam1': {'area': '1-st floor',
              'bool': True,
              'ip': '10.0.1.23',
              'mac': '00:1A:C2:7B:00:47',
              'name': 'cam1',
              'pos': '1',
              'time': datetime.time(15, 20)},
     'cam2': {'area': '2-nd floor',
              'bool': True,
              'ip': '10.0.1.24',
              'mac': '00:4A:C2:7B:10:42',
              'name': 'cam2',
              'pos': '2',
              'time': datetime.time(15, 20)},
     'cam3': {'area': '3-rd floor',
              'bool': True,
              'ip': '10.0.1.25',
              'mac': '00:43:C2:7B:F0:13',
              'name': 'cam3',
              'pos': '3',
              'time': datetime.time(15, 20)}}

    Ответ написан
    1 комментарий