• Почему Python не видит файлы в Linux как в Windows?

    Vindicar
    @Vindicar
    RTFM!
    Если файл лежит в папке со скриптом - надо открывать его, используя путь к пкапке со скриптом, а не надеяться на то, что текущий каталог совпадёт. Под виндой тоже всё зависит от способа запуска скрипта.
    Так что читай про sys.argv[0] и модуль pathlib. Пригодится.
    Ответ написан
    2 комментария
  • Ошибка /usr/local/lib/python3.11/dist-packages/telebot/util.py:92: RuntimeWarning: coroutine 'gpt' was never awaited tas telebot python, что делать?

    Vindicar
    @Vindicar
    RTFM!
    Что за "as" в as def gpt(message, **kwargs):?
    Ты имел ввиду async? Так у тебя программа синхронная, в ней async не к месту. Просто def достаточно.
    Ответ написан
    4 комментария
  • Почему у черной дыры есть электрический заряд?

    Vindicar
    @Vindicar
    RTFM!
    Причина раз: правило сохранения заряда. Электрический заряд нельзя создать и уничтожить, только перераспределить в пространстве.
    Причина два: с точки зрения внешнего наблюдателя тело будет падать в чёрную дыру за бесконечное время. Его влияние на окружающую вселенную - например, испущенный свет - будет бесконечно ослабевать, но никогда не станет нулевым. При этом с точки зрения падающего тела, падение займёт очень даже конечное (и не слишком большое) время. Относительность - она такая.
    Ответ написан
  • Как выделить элемент не останавливая воспроизведение видео (OPENCV)?

    Vindicar
    @Vindicar
    RTFM!
    Ну а как ты себе представляешь быстрое задание И позиции И примерного размера объекта?
    А оно должно быть быстрым, так как объект может двигаться по кадру.

    Ты можешь притормаживать видео, пока пользователь держит зажатой левую клавишу мыши.
    Тогда у тебя будет реакция на нажатие левой клавиши (останавливаем видео, фиксируем одну вершину прямоугольника, содержащего объект) и на отпускание левой клавиши (фиксируем противоположную вершину, извлекаем область, содержащую объект, начинаем его отслеживать и продолжаем видео).
    Ответ написан
    Комментировать
  • Как запустить функцию вместе с ботом aiogram?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, переводим слово "warning". Это не ошибка, это предупреждение.
    Во-вторых, погуглить не пробовал?
    В ранних версиях asyncio get_event_loop() создавал рабочий цикл asyncio, если он ещё не был создан, и возвращал существующий, если он был. Потом от этого поведения решили отказаться. Пока что оно ещё работает, но потом сломается.
    Так что в начале программы используй new_event_loop(), а если нужно получить ссылку на цикл в корутине - get_running_loop()

    И я удивлюсь, если окажется, что ошибка именно в этом. У тебя где-то ещё должен быть косяк. Скорее всего одна из запускаемых корутин выполняет длительную операцию синхронно.
    Ответ написан
  • Почему не работает обработчик ответа пользователя в Телеграмм боте?

    Vindicar
    @Vindicar
    RTFM!
    А чего тут выстраивать.
    Приходит событие.
    Бот перебирает обработчики этого события.
    Для каждого обработчика вызывается func, пока она не вернёт True.
    Этот обработчик и вызывается для обработки события.
    Вот и всё.

    Единственный вопрос - порядок перебора обработчиков. Варианта реально два: либо в хронологическом порядке регистрации, либо в обратном хронологическом (что менее вероятно).
    Ответ написан
    Комментировать
  • Как сделать так чтобы пока пользователь не ввёл число в телеграмм бот он не продолжал программу а запрашивал число?

    Vindicar
    @Vindicar
    RTFM!
    Регистрировать эту же функцию process_num10_step через register_next_step_handler() в случае ошибки.
    Ответ написан
    Комментировать
  • Как заставить процесс запустить определённую процедуру?

    Vindicar
    @Vindicar
    RTFM!
    Если на пальцах:
    1. В питоне всё - оператор. Вот вообще всё, кроме комментариев. Объявление функции - такой же оператор, как и цикл.
    2. Как следствие, нет формального понятия "тело программы". Ты должен сам указать, что является телом, завернув его в if __name__ == '__main__:
    3. Чтобы выполнить подпрограмму, дочерний процесс должен выполнить код, который её определит. А единственный способ это сделать - выполнять файл с самого начала.
    4. Если ты не указал тело программы - дочерний процесс выполнит всё, в том числе запуск дочернего процесса. Что обычно не требуется.
    Так что правильно выглядящая программа с мультипроцессингом должна иметь только такой вид:
    def func1():
        ...
    
    def func2():
        ...
    
    ...
    if __name__ == '__main__':
        ... # тут запуск дочерних процессов


    А ещё данные передаются между процессами с помощью модуля pickle, так что твои распаралленные функции могут принимать и возвращать только такие объекты, которые можно упаковать с помощью pickle.
    Ответ написан
  • Можно ли сделать бота в телеграм, чтобы он уведомлял при появлении новых оценок на образовательной платформе edu.gounn?

    Vindicar
    @Vindicar
    RTFM!
    Декомпозируй задачу на подзадачи.
    1. Как получить сведения о новых оценках? Если нет никакого API уведомления (скажем, на почту), то остаётся только вариант "периодически опрашивать и сравнивать с прошлым результатом".
    Тут нужно пошариться по странице и понять, как она получает значения об оценках. Если эти значения вписаны уже в код HTML страницы - в помощь связка requests (ну или aiohttp) для скачивания страницы и bs4 для её разбора. Если эти значения подгружаются динамически через JS - это удобнее, можно выяснить, какой запрос подгружает сведения об оценках, и делать этот запрос самому. Инструменты разработчика в браузере помогут.

    2. Как отправить сведения об оценках?
    Если нет задачи управлять ботом через ТГ, а нужны исключительно оповещения на заранее заданный контакт, то необязательно делать полноценного бота - можно просто отправить запрос на сервер ТГ для отправки сообщения. Как - гуглится. Тогда у тебя основным скриптом будет парсер оценок, который будет дёргать функцию отправки уведомления.
    Если есть задача, чтобы бот хранил историю оценок, отвечал на запросы и т.д. - то нужен полноценный бот. В этом случае нужно будет разбираться, например, с асинхронными ботами, чтобы иметь возможность параллельно вести два набора действий - периодическую проверку оценок и реакцию на сообщения от юзеров.
    Ответ написан
    Комментировать
  • YOLOv8-seg Масштабирование маски. Как сделать правильно?

    Vindicar
    @Vindicar
    RTFM!
    Попробуй морфологическую диляцию. Если на пальцах, она делает белыми чёрные (фоновые) пиксели изображения, у которых есть белые соседи.
    Можно поиграться с ядром (определяет, что считать соседями) и с итерациями (сколько раз повторять диляцию).

    Поскольку маски объектов обычно белые на чёрном фоне, это "раздует" маску и одновременно сгладит её края.
    Ответ написан
  • Почему не работает python-valve?

    Vindicar
    @Vindicar
    RTFM!
    В репозитории код изменялся лет 5 назад, а документация - все 7. Так что придётся самостоятельно ориентироваться по коду - или искать другой пакет.
    В принципе, можешь обойтись без with, заменив его на try: ... finally: server.close()
    Ответ написан
  • Как распарсить запрос в Python?

    Vindicar
    @Vindicar
    RTFM!
    Ну я бы описал каждое составное условие как коллекцию "имя поля - условие, применяемое на поле".
    Но возможно, лучше как-то кардинально это решитью. Например, навесить теги на обрабатываемые объекты, и делать поиск по тегам.
    Ответ написан
  • Как сделать рассылку всем пользователям которые нажали /start?

    Vindicar
    @Vindicar
    RTFM!
    Проверь тип данных user. Можно тупо print(type(user)). Обычно БД в питоне возвращают каждую строку выдачи как кортеж, даже если в строке одно значение. В этом случае нужно будет сделать telegram_id = user[0]
    Ответ написан
  • Как правильно выводить COUNT?

    Vindicar
    @Vindicar
    RTFM!
    Поясню ответ Everything_is_bad выше: эта запись соответствует встроенному типу данных питона - кортеж (tuple). Ты должен уметь этот тип данных узнать, и знать как работать с ним (а также со списками и словарями) ДО того, как браться за ботов. Это азы, без понимания которых ты будешь спотыкаться на каждой мелочи.
    Ответ написан
  • Как создавать фреймы в неопределённом кол-ве?

    Vindicar
    @Vindicar
    RTFM!
    Простой вариант - складывай нужные объекты в список. Если что, можно сделать список кортежей.
    Чуть более сложный вариант - опиши класс, описывающий пару кнопка-label, и реализующий логику выбора файла, и складывай в список экземпляры этого класса.
    Ответ написан
    Комментировать
  • Как остановить поток while true нажатием горячих клавиш?

    Vindicar
    @Vindicar
    RTFM!
    Потому что is_pressed() проверяет, нажата ли клавиша прямо сейчас. С 99% вероятностью у тебя нажатие начнётся и закончится когда выполняется time.sleep(), потому что он долгий. А потому на момент выполнения is_pressed() клавиша уже будет отпущена.
    Проще всего будет заменить один долгий sleep() на цикл из коротких ожиданий и проверок, примерно по 0,1-0,2 секунды.
    Ответ написан
    Комментировать
  • Как решить module 'cv2' has no attribute 'TrackerCSRT_create'?

    Vindicar
    @Vindicar
    RTFM!
    Как ставил OpenCV? Там несколько пакетов. opencv-python содержит только основные возможности, а целый ряд вещей вынесен в opencv-contrib-python. Плюс ряд алгоритмов доступен не во всех версиях, так что выясни, начиная с какой версии поддерживается этот алгоритм, и какая версия стоит у тебя.
    Ответ написан
    Комментировать
  • Как сохранить файл, который скачивается автоматически при переходе по ссылке?

    Vindicar
    @Vindicar
    RTFM!
    через requests сохраняется html код страницы, где нет и намека на файл

    Вариант 1: не убедил сайт, что твой бот - это не бот. Добавляй заголовки - реферер, куки, юзер-агент и т.д. Можешь их прямо скопировать с браузера.
    Вариант 2: сайт редиректит на нужную ссылку через JS. Разбери код страницы, найди как формируется ссылка и научись её извлекать, а потом уже эту ссылку качай через requests.
    Ответ написан
    Комментировать
  • Как активировать код путем нажатия правой кнопки мыши (Python)?

    Vindicar
    @Vindicar
    RTFM!
    Нажатия правой кнопки мыши где?
    А вообще посмотри в сторону нестандартного модуля mouse (ставится через pip).
    Ответ написан
  • Disnake в команде temprole возникла ошибка, в чём здесь ошибка?

    Vindicar
    @Vindicar
    RTFM!
    Если коротко.
    "Object of type "None" is not subscriptable" - если при вызове команды не указан параметр времени, он будет None (так как ты указал значение None по умолчанию). Решения два.
    а) замени значение по умолчанию None на какое-то другое, например, "15m". Тогда, если срок не указан, то будет дан срок по умолчанию.
    б) Перед обращением к time проверяй, не None ли он. ЛЮБЫЕ обращения к переменной time допустимо производить, только если там не None.

    "t(time_letter)" - ты вызываешь некую функцию t. Судя по окружающему коду, она должна преобразовывать название интервала времени ("s", "m", "h" и т.п.) в длину этого интервала времени в секундах. "t" is unbound означает, то ты не объявил такую функцию в области видимости этого кода (например, выше по коду в том же файле). Эту функцию нужно объявить, тогда её можно будет использовать.

    Обе ошибки достаточно простые, если есть хоть какое-то знакомство с языком. А потому повторю актуальнейший совет: не учить язык по ботам. Боты - это НЕ просто. Начни с чего-то более простого.
    Ответ написан