Задать вопрос
  • Перехват web уведомлений которые приходят в Windows?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    prerequisite: python 3.9 и winrt

    spoiler
    import asyncio
    from winrt.windows.ui.notifications.management import UserNotificationListener
    from winrt.windows.ui.notifications import KnownNotificationBindings
    
    async def notification_handler(listener, seen_notifications):
        print("Слушатель уведомлений запущен. Ожидание новых уведомлений...")
    
        # Бесконечно слушаем уведомления
        while True:
            try:
                # Получение всех текущих уведомлений
                notifications = await listener.get_notifications_async(0)
    
                for notification in notifications:
                    notification_id = notification.id  # Получаем уникальный ID уведомления
    
                    # Проверяем, было ли это уведомление уже обработано
                    if notification_id not in seen_notifications:
                        seen_notifications.add(notification_id)  # Добавляем ID в множество обработанных уведомлений
    
                        try:
                            # Получение информации об уведомлении
                            app_name = notification.app_info.display_info.display_name
                            binding = notification.notification.visual.get_binding(KnownNotificationBindings.get_toast_generic())
                            if binding:
                                text_elements = binding.get_text_elements()
                                title = text_elements[0].text if len(text_elements) > 0 else "Без заголовка"
                                body = text_elements[1].text if len(text_elements) > 1 else "Без текста"
                                print(f"Новое уведомление!")
                                print(f"Приложение: {app_name}")
                                print(f"Заголовок: {title}")
                                print(f"Текст: {body}")
                                print("-" * 50)
    
                               # Проверяем что ув. от нужного приложения и делаем всякое нужное с ним.
    
                        except Exception as e:
                            print(f"Ошибка при обработке уведомления: {e}")
    
                # Задержка перед следующим циклом
                await asyncio.sleep(1)
    
            except Exception as e:
                print(f"Ошибка при получении уведомлений: {e}")
                await asyncio.sleep(5)  # Задержка перед повторной попыткой в случае ошибки
    
    async def main():
        # Получение текущего слушателя уведомлений
        listener = UserNotificationListener.get_current()
    
        # Смотрим есть ли разрешение на доступ к уведомлениям. Если нет, лезем в настройки уведомлений.
        access_status = await listener.request_access_async()
        if access_status != 1:
            print("Нет разрешения на доступ к уведомлениям. Проверьте настройки конфиденциальности.")
            return
    
        seen_notifications = set()  # Множество для хранения ID уже обработанных уведомлений
        await notification_handler(listener, seen_notifications)
    
    if __name__ == "__main__":
        asyncio.run(main())

    67590b9765568892633574.png
    Ответ написан
    Комментировать
  • Как подключиться к серверу MySql на pythonanywhere?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Since you have a free account, you will only be able to connect to your database using code running inside PythonAnywhere.
    Ответ написан
  • Как закрыть файл (фотографию) после использования команды os.startfile?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Закрывайте приложение, которое открывает файл, как вариант:
    os.system('taskkill /IM Honeyview.exe') # <= поменяйте на ту программу что у вас ассоциирована с jpg.


    З.Ы. os.startfile() возвращает None, нет смысла присваивать переменной.
    Ответ написан
    5 комментариев
  • Как спарсить такой веб-сайт?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    import requests
    from bs4 import BeautifulSoup
    
    def parse_table(div, results):
        # Ищем таблицы внутри данного div
        tables = div.find_all('table')
        for table in tables:
            rows = table.find_all('tr')
            for row in rows:
                cells = row.find_all('td')
                if cells:
                    # Извлекаем название и ссылку
                    name = cells[0].get_text(strip=True)
                    link = cells[0].find('a')['href'] if cells[0].find('a') else None
                    if link:
                        results[name] = link
    
    def recursive_parse(url, visited, results):
    
        if url in visited:
            return
        visited.add(url)
        print('Парсим URL:', url)
    
        response = requests.get(url)
        soup = BeautifulSoup(response.content, 'html.parser')
    
        # Ищем все div с itemscope
        divs = soup.find_all('div', itemscope=True)
        for div in divs:
            parse_table(div, results)  # Парсим таблицы внутри найденного div
    
        # Ищем все ссылки на подстраницы
        links = soup.find_all('a', href=True)
        for link in links:
    
            sub_url = link['href']
            # Проверяем, что ссылка ведет на подстраницу и не является текущим URL
            if 'respublika_bashkortostan' in sub_url and sub_url.startswith('http') and sub_url != url:
                recursive_parse(sub_url, visited, results)
    
    # Начальная URL
    start_url = 'https://russiaschools.ru/respublika_bashkortostan/'
    visited_urls = set()
    results_dict = {}
    recursive_parse(start_url, visited_urls, results_dict)
    
    
    for name, link in results_dict.items():
        print(f'Название: {name}, Ссылка: {link}')


    З.Ы. я не знаю могут ли быть одинаковые наименования (например МБДОУ ДС №5) в разных районах, поэтому или просто выводите на экран или записывайте вместе с названием района.
    Ответ написан
    Комментировать
  • Как реализовать отложенное сообщение?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    asyncio.sleep() ?

    + в том фреймворке на котором вы пишите может быть реализация отложенной отправки.
    Ответ написан
    2 комментария
  • Как в bash полностью сохранить многострочное содержимое файла в переменную?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Если вам достаточно пробелов, отступов и пустых строк:
    file_content="$(cat /some/file)"
    
    echo $file_content
    >>> lol kek cheburek. kol
    
    echo "$file_content"
    >>> lol
    kek cheburek.
    kol


    Если вам зачем-то нужны ещё и переносы строк:
    f=""
    while IFS= read -r line || [[ -n "$line" ]]; do
        f+="${line}"$'\n'
    done < 1.txt
    
    f="${f%$'\n'}"
    echo "$f" > 2.txt
    Ответ написан
  • Как можно со временем поменять цвет выведенного в терминал текста?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Второе число (у вас 31) отвечает за цвет.
    print('\u001b[0m') сброс на настройки по умолчанию.

    import time
    
    print('\u001b[1;32mЗеленый текст', end='')
    time.sleep(3)
    print('\r\u001b[1;31mКрасный текст', end='')
    Ответ написан
    2 комментария
  • Ядра ЦП в vmware равны ли физическим ядрам?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    • The maximum number of virtual CPUs that you can assign to a virtual machine is 768. The number of virtual CPUs depends on the number of logical CPUs on the host, and the type of guest operating system that is installed on the virtual machine.

    • A virtual machine cannot have more virtual CPUs than the number of logical cores on the host. The number of logical cores is equal to the number of physical cores if hyperthreading is deactivated or two times that number if hyperthreading is activated.


    https://docs.vmware.com/en/VMware-vSphere/8.0/vsph...

    З.Ы. От 8 до 16 (с HT или аналогом), если верить документации.
    Ответ написан
    1 комментарий
  • Python PyQt ошибка 0xC0000409 почему?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    В getExistingDirectory()первым позиционным аргументом должен идти parent, а вы передаёте первым self.
    Должно быть так (ну, или MainWindow):
    def getDirectory(self): 
            dirlist = QFileDialog.getExistingDirectory(None, "Выбрать папку", "C:\\100")
            self.plainTextEdit.appendHtml("<br>Выбрали папку: <b>{}</b>".format(dirlist))
            print(dirlist)


    Ну и мой комментарий по поводу plainTextEdit.
    Ответ написан
    Комментировать
  • Как сгенерировать промежуточные координаты?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    1. Случайные координаты: steps - шаги между контрольными точками.
    2. Случайное время исполнения: time_movie - время перемещения в секундах.

    import time
    from numpy.random import randint, default_rng
    
    def f(coords: list, time_movie: int, steps: int) -> list:
        x_a, y_a = [], []
        now = int(time.time() * 1000)
        rng = default_rng()
        timestamp = sorted(rng.integers(now, now + time_movie * 1000, size=(steps * len(coords) - 1) + 1))
    
        for i in range(len(coords) - 1):
            x1, y1, x2, y2 = coords[i] + coords[i + 1]
            x_a += [x1] + sorted(randint(min(x1, x2), max(x1, x2), size=steps), reverse=1 if x1 > x2 else 0) + [x2]
            y_a += [y1] + sorted(randint(min(y1, y2), max(y1, y2), size=steps), reverse=1 if x1 > x2 else 0) + [y2]
    
        return [[x, y, t] for x, y, t in zip(x_a, y_a, timestamp)]
    
    coords = [[392, 556], [95, 309], [207, 192]]
    print(f(coords=coords, time_movie=2, steps=30))
    Ответ написан
    5 комментариев
  • Как написать скрипт(или формулу) для выполнения переноса строки на другой лист, при определённых условиях?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Avis_Falcon, используйте фильтр в листе с выполненными задачами:
    =FILTER(Do!B1:D6;Do!A1:A6)

    6744a336837a6983925440.png
    Ответ написан
    Комментировать
  • Как называется статья про рекурсию inpaint в SD?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    ИИ-модели ломаются при обучении на рекурсивно сгенерированных данных https://habr.com/ru/companies/bothub/articles/832216/ ?
    Ответ написан
    1 комментарий
  • Как устранить ошибку при запуске Луа кода на sciTE?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    В SciTE включить юникод в файле "SciTEGlobal.properties":

    # Unicode
    code.page=65001
    #code.page=0
    #character.set=204
    # Required for Unicode to work on GTK+:
    LC_CTYPE=en_US.UTF-8
    output.code.page=65001
    Ответ написан
  • Как в столбце excel найти строки меньше 15 минут?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Можно, в принципе, и фильтром, если очень хочется:
    =OR(AND(LEN(A2)<=20; INDEX(SPLIT(A2; " "; TRUE; TRUE); 1)<=15); LEN(A2)<=10)

    67441b2e0dfaa314112649.png
    Ответ написан
    Комментировать
  • Как редактировать текст?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Ответ написан
    Комментировать
  • Как вернуть значение из строки?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    print(*[i[1] for i in zip(a.split(','), b.split(',')) if int(i[0]) >= 10])
    Ответ написан
    7 комментариев
  • Как скачать книгу в pdf?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Дамир Шамарданов,
    Персий, Флакк Авл - Сатиры Персия, перевод Благовещенский: ссылка .
    Персий, Флакк Авл - Сатиры Персия, перевод Фет: ссылка . (взято отсюда: https://viewer.rsl.ru/ru/rsl01003656473?page=1&rot...)
    Ответ написан
    2 комментария
  • Почему в Python sqlite3 выводится из таблицы переменная вот так вот(3,)?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    cursor.fetchall() возвращает все строки в виде списка кортежей, отсюда и такая запись у вас. Вытаскивайте нужное из кортежа:
    der = [(57,)]
    der_str = "\n".join([str(dollars[0]) for dollars in der])
    print(der_str)
    
    >>> 57
    Ответ написан
    Комментировать
  • Как проверить доступность списка IP:Port из txt-файла?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    С помощью psping: https://learn.microsoft.com/en-us/sysinternals/dow... By Mark Russinovich.
    import subprocess
    
    
    # Функция для проверки доступности IP:port с помощью psping
    def check_ip(ip_port):
        try:
            print(f"Проверяем доступность {ip_port}", end='')
            # Выполняем команду psping
            result = subprocess.run(['psping', ip_port], capture_output=True, text=True)
            # Проверяем, есть ли в выводе сообщение об успешном пинге
            if "(0% loss)" in result.stdout:
                print(f"\rПроверяем доступность {ip_port} - доступен")
                return True
            if "(25% loss)" in result.stderr or "50% loss" in result.stdout:
                print(f"\rПроверяем доступность {ip_port} - потери пакетов")
                return True
            if "(100% loss)" in result.stdout:
                print(f"\rПроверяем доступность {ip_port} - недоступен")
                return False
        except Exception as e:
            print(f"Ошибка при проверке {ip_port}: {e}")
        return False
    
    
    # Чтение IP:port из файла и запись доступных в другой файл
    def check_ips_from_file(input_file, output_file):
        with open(input_file, 'r') as infile, open(output_file, 'w') as outfile:
            for line in infile:
                ip_port = line.strip()  # Убираем лишние пробелы и символы новой строки
                if check_ip(ip_port):
                    outfile.write(ip_port + '\n')  # Записываем доступный IP:port в файл
    
    
    # Указываем имена файлов
    input_file = 'ip.txt'
    output_file = 'ipUP.txt'
    
    # Запускаем проверку
    check_ips_from_file(input_file, output_file)
    Ответ написан
  • Как найти паттерн на картинке с OpenCV?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    673e7b80e4dfd963850969.png
    Код:
    spoiler
    import cv2
    import numpy as np
    
    def find_and_draw_template(template_path, original_image_path):
        # Загрузка шаблона
        template = cv2.imread(template_path)
        template_gray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
    
        # Создание объекта ORB
        orb = cv2.ORB_create()
        bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
    
        # Обнаружение ключевых точек и вычисление дескрипторов для шаблона
        keypoints_template, descriptors_template = orb.detectAndCompute(template_gray, None)
    
        # Обработка изображения
        image = original_image_path.copy()
        image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    
        # Обнаружение ключевых точек и вычисление дескрипторов для изображения
        keypoints_image, descriptors_image = orb.detectAndCompute(image_gray, None)
    
        # Сопоставление дескрипторов
        matches = bf.match(descriptors_template, descriptors_image)
        matches = sorted(matches, key=lambda x: x.distance)
    
        # Отладочная информация
        print(f"Общее количество найденных соответствий: {len(matches)}")
    
        # Отбор лучших соответствий
        good_matches = matches[:75]
        print(f"Количество хороших соответствий: {len(good_matches)}")
    
        # Проверка на наличие хороших соответствий
        if len(good_matches) >= 4:
            # Получение координат ключевых точек
            src_pts = np.float32([keypoints_template[m.queryIdx].pt for m in good_matches]).reshape(-1, 1, 2)
            dst_pts = np.float32([keypoints_image[m.trainIdx].pt for m in good_matches]).reshape(-1, 1, 2)
    
            # Нахождение матрицы гомографии
            M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
            print("Гомография найдена.")
    
            # Получение углов шаблона
            h, w = template_gray.shape[:2]
            pts = np.float32([[0, 0], [0, h - 1], [w - 1, h - 1], [w - 1, 0]]).reshape(-1, 1, 2)
    
            # Преобразование углов шаблона
            dst = cv2.perspectiveTransform(pts, M)
    
            # Обводим рамкой найденные области
            image = cv2.polylines(image, [np.int32(dst)], isClosed=True, color=(0, 255, 0), thickness=3)
        else:
            print("Недостаточно хороших соответствий для нахождения гомографии.")
    
        return image
    
    # Пример использования функции
    template_file = 'LED.jpg'              # Шаблон
    original_image_file = 'outputImage.jpg'  # Исходное изображение
    
    # Загрузка и обработка изображения
    original_image = cv2.imread(original_image_file)
    result_image = find_and_draw_template(template_file, original_image)
    
    # Масштабируем изображение для отображения - не обязательно, у меня не вмещалось в просмотр
    scale_percent = 50  # Процент уменьшения размера
    width = int(result_image.shape[1] * scale_percent / 100)
    height = int(result_image.shape[0] * scale_percent / 100)
    resized_image = cv2.resize(result_image, (width, height), interpolation=cv2.INTER_AREA)
    
    # Отображение результата
    cv2.imshow('Detected Templates', resized_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    Ответ написан
    Комментировать