• Как решить проблему sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: article?

    Vindicar
    @Vindicar
    RTFM!
    Ну так ты таблицу в БД не создал, только модель описал. Она автоматически не создаётся, для создания таблиц нужно вызывать отдельный метод db.create_all().
    Ответ написан
    1 комментарий
  • Как обойти выход за границы двумерного массива?

    Vindicar
    @Vindicar
    RTFM!
    3. Исправить циклы
    range(1, len(b) - 1)
    range(1, len(b[i]) - 1)
    Ответ написан
    Комментировать
  • Как сделать выбор координат на клик в OpenCV?

    Vindicar
    @Vindicar
    RTFM!
    Сделай список, добавляй в него кортежи (x, y).
    Если по клику список достиг полной длины, уже действуй дальше.
    Ответ написан
  • Как не писать каждый раз название класса перед переменной в Python?

    Vindicar
    @Vindicar
    RTFM!
    Я бы сказал, паскалевский with оказывается даже более многословен, чем код без него.
    А учитывая, что Питон не позволяет даже опускать self, т.е. требует явно писать self.attribute и self.method() вместо attribute и method(), можно догадаться, что такого там точно нет.

    Если тебе требуется записать ну очень много атрибутов - закинь их в словарь, и используй цикл + setattr().
    Но вообще, если у тебя так много атрибутов, это обычно означает плохое проектирование программы.
    Ответ написан
  • Как в момент задержки выполнять другую часть кода?

    Vindicar
    @Vindicar
    RTFM!
    Зависит от того, что имеется ввиду под "в момент задержки".
    "Вместо задержки"? Т.е. второй код выоплняется, когда начинается задержка, и останавливается по её окончанию? Тогда выполняй код вместо вызова time.sleep()
    Нужно выполнять вторую часть кода независимо, но только тогда, когда первая часть кода не работает? Так работают асинхронные приложения, читай про них. Их сложнее понять, но проще синхронизировать, т.е. избегать столкновений между двумя частями кода.
    Нужно выполнять вторую часть кода абсолютно независимо от первой, чтобы там первая ни делала? Это уже в сторону многопоточности. Она проще в понимании, но сложнее, если обеим частям кода нужен доступ в одни и те же переменные.
    Ответ написан
    Комментировать
  • Как исправить краш telebot?

    Vindicar
    @Vindicar
    RTFM!
    Очевидно, если немножко подумать.
    Крэш из-за того, что ты обращаешься ко второму (индекс 1) элементу списка, который имеет только один элемент.
    Значит, нужно вынести список (результат работы message.text.split() ) в отдельную переменную, чтобы проверить длину этого списка. Если длина > 1, значит, второй элемент существует, значит, можно работать.
    Ответ написан
  • Как сделать Python loop +1/-1?

    Vindicar
    @Vindicar
    RTFM!
    Избавиться от цикла for, вместо него используй while True, и внутри вручную меняй индекс текущего изображения в диапазоне от 0 до len(imList)-1.
    А вообще у тебя код кривой.
    cv2.imshow() требует два параметра - заголовок окна и загруженное в память изображение (массив пикселей).
    cv2.waitKey() и cv2.waitKeyEx() возвращают код нажатой клавиши, анализируй его, чтобы понять, что делать (идти вперёд, идти назад, прервать цикл).
    Ответ написан
    5 комментариев
  • Проблема с io.BytesIO()?

    Vindicar
    @Vindicar
    RTFM!
    Текущая позиция при truncate() не обновляется. Так что после отправки сделай снова
    fp.seek(0)
    fp.truncate()
    Ответ написан
    Комментировать
  • Как отправить запрос к сайту через определенный DNS-сервер в python?

    Vindicar
    @Vindicar
    RTFM!
    Есть довольно старый ответ на стэковерфлоу. requests под капотом использует urllib3, а та содержит функцию urllib3.util.connection.create_connection(), ответственную за установку TCP соединения. Соответственно, можно попробовать подменить эту функцию на свою реализацию, и использовать пакет dnspython для запросов.
    from urllib3.util import connection
    import dns.resolver
    
    def your_dns_resolver(hostname: str) -> str:
        """Получает на вход доменное имя, возвращает IP адрес в виде строки."""
        resolver = dns.resolver.Resolver(configure=False)
        resolver.nameservers = ["8.8.8.8"]  # список используемых DNS серверов.
        answer = resolver.resolve(hostname, "A")  # A-запись для IPv4 адреса, AAAA-запись для IPv6 адреса
        if len(answer) == 0:
            raise Exception("No A record found")
        return str(answer[0])
    
    _orig_create_connection = connection.create_connection
    
    def patched_create_connection(address, *args, **kwargs):
        """Wrap urllib3's create_connection to resolve the name elsewhere"""
        host, port = address  # оригинальный адрес для запроса
        hostname = your_dns_resolver(host)  # сами определяем IP по имени
        return _orig_create_connection((hostname, port), *args, **kwargs)  # дёргаем оригинальную функцию, чтобы создать соединение
    
    connection.create_connection = patched_create_connection

    Код не проверял, это скорее концепт чем готовый инструмент.
    Ответ написан
    9 комментариев
  • Как в Python подружить ввод данных с модулем?

    Vindicar
    @Vindicar
    RTFM!
    Смешались в кучу кони, люди...
    Чтобы узнать жерезо компа по сети, нужно, чтобы на компе работала программа, готовая получить эту информацию и отдать её по сети.
    Под виндой есть инструмент Windows Management Instrumentation (WMI), который позволяет собрать уйму информации о компе, присутствует всегда (насколько я знаю) и отвечает в т.ч. по сети. Так что готов спорить, что твой powershell скрипт просто обращается к нему.
    Увы, WMI базируется на открытом стандарте, но напичкан несовместимыми расширениями, так что имитировать его наличие на линукс-сервере может быть нетривиально. Спасибо Микрософту.

    Под никсами есть программа lshw (требуется установка из репозитория), она выдаёт выхлоп в консоль или в файл. Можно заставить целевые машины при загрузке запускать lshw и складывать результат на сетевой диск в формате xml, например. А оттуда уже собирать инфу самостоятельно.
    Ответ написан
    Комментировать
  • Как положить данные в json файл в нужное место?

    Vindicar
    @Vindicar
    RTFM!
    json прочитается в питоновскую структуру данных. В твоём конкретном случае - в словарь.
    Его и будешь модифицировать, а потом модифицированный словарь сбросишь обратно.
    Так что читай про:
    1. Работу со словарями
    2. функцию json.load()
    3. функцию json.dump()
    Ответ написан
    Комментировать
  • Как сделать более аккуратный код когда много строк стилей в DOM (element.style... = '...')?

    Vindicar
    @Vindicar
    RTFM!
    Я бы вынес это в отдельный класс и назначал его тем элементам, которые нужно стилизовать. Упрощает JS, упрощает HTML разметку, оставляет стили там, где им место - в CSS файле.
    Ответ написан
    Комментировать
  • Как вывести значения из базы данных без запятых скобок и т.д?

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

    Vindicar
    @Vindicar
    RTFM!
    Я полагаю, что закрывается.
    Другое дело, что время жизни у курсора и соединения разное.
    Курсор создаётся перед выполнением запроса (или цепочки запросов), и закрывается по их окончанию.
    Это позволяет иметь несколько активных курсоров одновременно, используемых в разных подзадачах.
    Соединение обычно создаётся в начале работы приложения, и закрывается в конце.
    Если приложение содержит только одну подзадачу, тогда да, время жизни курсора и соединения совпадёт.
    Ответ написан
  • Как разделить строку из SQL?

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

    Vindicar
    @Vindicar
    RTFM!
    Открой для себя str.translate().

    А вообще вот это:
    for i in range(len(text)):
            for i in text:

    Просто не имеет смысла, у тебя внутренний цикл будет перебивать переменную i своим значением. Зачем тогда внешний цикл вообще?
    Ответ написан
  • Как удалить скрытый майнер?

    Vindicar
    @Vindicar
    RTFM!
    Проверь планировщик заданий и список служб.
    Причем ищи вообще всё подозрительное - может быть, висит отдельная служба-watchdog, которая перезапускает майнер при закрытии.
    Ответ написан
    Комментировать
  • В чем моя ошибка?

    Vindicar
    @Vindicar
    RTFM!
    root.mainloop()
    Этот вызов показывает окно Tkinter и уходит в цикл обработки событий. Цикл длится пока окно не закрыто (т.е. пока твоя программа работает).
    Твой цикл while 1: не будет выполнен до этого момента.
    Так что лучше производи весь ввод-вывод в обработчике choose_color(), или добавь отдельную кнопку для отправки.
    Ответ написан
    Комментировать
  • Typeerror, как решить хз, поможите?

    Vindicar
    @Vindicar
    RTFM!
    Читаем текст ошибки: get_userss() takes 1 positional argument but 2 were given. Иными словами, pytogram передал твоей функции 2 аргумента, а она принимает только один.
    Смотрим заголовок твоей функции:
    async def get_userss(message):  # <-- принимает один аргумент!

    Открываем документацию pyrogram, смотрим первый же пример кода:
    @app.on_message(filters.private)
    async def hello(client, message):  # <--- обработчик принимает два аргумента!
        await message.reply("Hello from Pyrogram!")


    Вывод: pyrogram ожидает, что функция-обработчик события примет 2 аргумента, а ты её объявил криво, с одним. Ну и не потрудился открыть документацию, я полагаю, иначе сразу бы заметил разницу.
    Ответ написан
    2 комментария
  • Как поменять середину в название в фото?

    Vindicar
    @Vindicar
    RTFM!
    Разбей имя файла с помощью метода split('_'), получишь список частей имени файла.
    Делай что тебе нужно с элементами этого списка.
    Потом соберешь его обратно в одну строку вызовом '_'.join(список).
    Ответ написан