Ответы пользователя по тегу Python
  • Почему код выдает ошибку, хотя файл llvmlite.dl находится в указанном каталоге?

    Vindicar
    @Vindicar
    RTFM!
    Возможно, проблема с разрядностью. Если DLL на 32 бита а питон на 64 (или наоборот), он её не подгрузит. Это верно практически для любой программы.

    EDIT: и да, как ниже написали, та же самая ошибка будет, если не найдена DLL, требуемая этой DLL. Утилита Dependency Walker в помощь. Может, нужен специфичный пакет MS VC++ Redistributable.
    Ответ написан
    2 комментария
  • Проверка четного числа (четное/нечетное)?

    Vindicar
    @Vindicar
    RTFM!
    Если вопрос именно "как работает данная строка", то ответ простой.
    В десятичной системе круглые числа (т.е. кончающиеся нулём) - те, которые делятся на 10.
    В двоичной системе круглые числа - те, которые делятся на 2.
    Значит, если запись числа в двоичной системе заканчивается нулём, оно делится на 2, т.е. оно чётное.

    А если вопрос "стоит ли так делать", то ответ тоже простой.
    Однозначно нет.
    Ответ написан
    Комментировать
  • Не понимаю почему код выводит пустой список?

    Vindicar
    @Vindicar
    RTFM!
    А ты запиши содержимое req в файл, всё сразу понятно станет...

    Ваш браузер не смог пройти проверку. Для доступа к веб-ресурсу включите в настройках вашего веб-браузера поддержку JavaScript или воспользуйтесь другим веб-браузером, который поддерживает JavaScript.


    Популярные сайты парсить - не в носу ковырять, они от этого защищаются.

    EDIT:
    NaoFumi008, а причём тут твой браузер? Твой код сам выполняет запрос, браузер ему не нужен.
    Очень советую почитать про то, как вообще работает Web.
    Кратко

    Клиент (браузер или иная программа) делает HTTP запрос, посылая запрашиваемую часть URL и заголовки (в наиболее простом случае).
    Серверная часть отвечает на запрос тем или иным документом (например, просто текстом) и своими заголовками (что это за документ, его размер, устанавливаемые cookies, и т.д.).
    Клиент принимает документ и обрабатывает его. Так, браузеры находят в документе JS-скрипты и выполняют их.
    Эти скрипты могут выполнять дополнительные запросы, которые обслуживаются по тому же принципу.
    Сервер может сохранять сведения о запросах и сопоставлять их.

    Есть две основных точки проверки клиента: непосредственно заголовки запроса (например, передан ли Referer? Переданы ли соответствующие cookies? Похож ли на правду User-Agent? Переданы ли другие необязательные, но типовые заголовки, вроде Accept-Language?) и обработка скриптов клиентом. Скажем, если клиент сделал запрос на одну страницу, но скрипт на этой странице не сделал второй запрос - возможно, клиент не браузер, а бот. Стоит его запомнить и попытаться пометить.
    В твоём случае, скорее всего, отрабатывает первый сценарий, но ты можешь напороться и на второй тоже.

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

    Vindicar
    @Vindicar
    RTFM!
    Причём тут многопоточность вообще? -_-

    Если бот b знает, по какому пути лежит бот a и где в каталоге a лежит БД, он может подключиться, так как БД sqlite это просто файл - но только до тех пор, пока b туда ничего не пишет. И даже тогда есть риск, если a будет обновлять информацию в момент её чтения b. sqlite вообще не предназначена для одновременного доступа.
    Так что когда встаёт вопрос об одновременном доступе к БД, от sqlite лучше уходить в сторону полноценных серверных СУБД.

    Либо научи бота a отдавать требуемую информацию по запросу, скажем, через сокет. Если он написан на базе asyncio (или фреймворка который его использует), то это не так уж сложно. Тогда с БД будет работать только a, а b должен только знать, как подключиться к a.
    Ответ написан
    1 комментарий
  • Как задать значение по умолчанию для всех созданных combobox в Tkinter?

    Vindicar
    @Vindicar
    RTFM!
    По итогам ряда экспериментов у меня получилось следующее...

    Когда ты ставишь ссылку на переменную Tk (например, экземпляр StringVar) для элемента управления, элемент запоминает внутреннее имя этой переменной (если ты его не задал явно, оно будет иметь вид PY_VAR*), а не хранит ссылку на сам экземпляр класса StringVar. Поэтому переменная умирает, когда значение питоновской переменной value перезаписывается на следующей итерации, что ломает логику работы.
    Ты должен сам хранить ссылки на все StringVar на всё время жизни твоего окна. Например, так:
    variables = {}
    
    def s():
        unique_types = ['1', '2', '3', '4', '5']
        entry = {}
        label = {}
        combo_list = []
        types = ['Соответсвия нет', 'A', 'B', 'C']
    
        for row, name in enumerate(unique_types, 0):
            value = StringVar()
            variables[name] = value
            lb = ttk.Label(root, text=name)
            lb.grid(row=row, column=0)
            label[name] = lb
    
            combobox = ttk.Combobox(root, textvariable=value, values=types, width=90, state="readonly")
            combobox.current(0)
            combobox.grid(row=row, column=2, padx=10, pady=5)
            combo_list.append(combobox)
            entry[name] = combobox
    
        b = ttk.Button(root, text="Print all", command=lambda: print_all_entries(unique_types, entry, label))
        b.grid(row=row + 1, column=2, padx=10, pady=5)


    Одна из причин, почему я обычно советую описывать окно как класс-наследник tkinter.Frame. В конструкторе создаёшь переменные, сохраняешь в поля класса, и они лежат себе. Когда экземпляр класса умрёт, они тоже уничтожатся.
    А потом этот экземпляр пакуешь уже в окно верхнего уровня.
    Ответ написан
  • Как из Python отдать команды в PowerShell от имени администратора?

    Vindicar
    @Vindicar
    RTFM!
    Нужно, чтобы твой скрипт был запущен от имени администратора.
    Можно использовать команду runas, но она потребует пароль.
    Ответ написан
    Комментировать
  • Как направить вывод ошибок из консоли в файл?

    Vindicar
    @Vindicar
    RTFM!
    Посмотри в сторону модуля atexit. Если падение прогарммы вызвано питоновским исключением, а не чем-то низкоуровневым, то это позволит сделать flush при выходе из программы.
    Ответ написан
  • Где ошибки в коде Python?

    Vindicar
    @Vindicar
    RTFM!
    print = (........)
    Читай, как правильно вызывать функции. Ты создаёшь переменную print, вместо того, чтобы вызвать функцию print().
    Ответ написан
    Комментировать
  • Как вывести данные из бесконечного subprocess в python?

    Vindicar
    @Vindicar
    RTFM!
    output = proc.stdout.read()
    У read() есть параметр, сколько максимум данных принимать. Просто принимай данные в буфер по 1 КБ (или сколько удобно), режь на строки по разделителю (\n), обрабатывай принятые полные строки, но последнюю неполную строку сохраняй и добавляй в начало следующей порции.
    Ответ написан
    1 комментарий
  • Можно ли подключиться к базе данных sqlite3, которая лежит на сервере?

    Vindicar
    @Vindicar
    RTFM!
    sqlite3 требует доступ к файлу именно как к файлу. Так что тебе придётся подмонтировать каталог с базой к целевой машине, тем или иным способом. Под виндой скорее всего только webdav, под никсами вариантов больше.
    Ну и да, sqlite НЕ рассчитана на одновременный доступ, так что если с этой базой кто-то одновременно работает на сервере и на целевой машине, есть шансы что она поломается.
    Так что от "никакая другая" лучше отказаться при первой возможности.

    А для отладочных целей лучше скопировать базу и гонять скрипт на копии, чтобы не угробить "боевую".
    Ответ написан
    Комментировать
  • Нужно сделать полную итерацию для проверки условного оператора перед тем как начать там проверять. Можно ли это продолжить через вложенные циклы?

    Vindicar
    @Vindicar
    RTFM!
    ну для начала, почему у тебя вложенный цикл j идёт до i+1, т.е. включает само число?
    во-вторых, почему ты не очищаешь mas для каждого нового i?

    в-третьих, почему ты делаешь проверку суммы массива множителей внутри цикла по j? Это как раз и даёт то поведение, которое ты наблюдаешь. Сумма проверяется после каждого множителя, а не для всех. Вот просто вслух проговорить, что делает программа - и уже бы заметил. Вынеси проверку из вложенного цикла.
    Ответ написан
  • Как найти окружности на изображении opencv python?

    Vindicar
    @Vindicar
    RTFM!
    Можешь попробовать фильтр Кэнни для поиска границ, и искать окружности по результату.
    Так или иначе, тебе потребуется получить изображение, где как можно чётче видны нужные тебе элементы, и как4 можно хуже - всё остальное.
    И да, в приведённом коде кривые отступы. он не запустится.
    Ответ написан
    Комментировать
  • Python. Цикл появления файлов txt на рабочем столе?

    Vindicar
    @Vindicar
    RTFM!
    1. Определить каталог рабочего стола. Например, pathlib.Path.home() / 'Desktop', но зависит от ОС и её версии.
    2. Сделать цикл
    3. В цикле сформировать имя файла, а потом открыть файл с этим именем.
    Ответ написан
    2 комментария
  • Как добавить звуковую дорожку в видео но чтобы старая звуковая дорожка осталась?

    Vindicar
    @Vindicar
    RTFM!
    Насколько я понимаю, выбранная тобой библиотека этого не умеет. Ты можешь сохранить обе дорожки в файл, и микшировать их с помощью ffmpeg (на который она всё равно опирается).
    Ответ написан
    Комментировать
  • Как рекурсивно обойти файлы?

    Vindicar
    @Vindicar
    RTFM!
    go(abs_path)
    Ты не возвращаешь ничего при рекурсивном вызове. Нужно сделать
    for subpath in go(abs_path):
        yield subpath

    или, что то же самое,
    yield from go(abs_path)
    Но вообще да, средства рекурсивного обхода уже есть, глянь их заодно.
    Ответ написан
    Комментировать
  • Python, VKBottle, SQL. Как ограничить доступ к команде на время?

    Vindicar
    @Vindicar
    RTFM!
    1. НИКОГДА не формируй запросы f-строками. Учись пользоваться parametrized queries. В твоём случае особого риска нет, но лучше сразу приучаться делать правильно.
    2. cursor.fetchone() ВСЕГДА возвращает кортеж, даже если ты запрашиваешь один элемент. В твоём случае это будет кортеж из одного элемента с индексом 0. Как работать с кортежами - гуглим.
    Ответ написан
    2 комментария
  • Как передавать новые значения в JSON и перезаписывать файл в Python?

    Vindicar
    @Vindicar
    RTFM!
    1. Прочитать json из файла.
    2. Внести изменения в полученную структуру данных.
    3. Записать изменённую структуру обратно в файл.

    См документацию на модуль json, в первую очередь load() и dump().
    Ответ написан
    Комментировать
  • Как сделать так чтоб после отпуска ПКМ нажималась клавиша?

    Vindicar
    @Vindicar
    RTFM!
    Питон тут не требуется. Autohotkey в руки и вперёд.
    Ответ написан
    Комментировать
  • Как из списка словарей сделать один словарь?

    Vindicar
    @Vindicar
    RTFM!
    Цикл for и метод update() у словаря в помощь.
    Но это только если в словарях ключи не повторяются, или если допустима перезапись повторяющихся ключей.
    Ответ написан
    Комментировать