• Как обойти ошибку Tcl_AsyncDelete: async handler deleted by the wrong thread?

    Vindicar
    @Vindicar
    RTFM!
    Поясню ответ выше: насколько я знаю, графические интерфейсы строго однопоточны. Как минимум под Windows это так, а потому ни один графический фреймворк не поддерживает обращение к окнам и их элементам из других потоков.
    Как следствие, если ты хочешь организовать фоновый поток с "обратной связью" в GUI, обычно требуется использовать очередь, например, queue.Queue. В эту очередь фоновый поток должен класть сообщения, объясняющие, что надо сделать - например, сведения о прогрессе операции, или команды на смену состояния, или ещё что. Это зависит от твоей задачи.
    Тогда основной поток программы, который и отвечает за GUI, должен использовать средства фреймворка для периодической проверки очереди на предмет сообщений. Например, в обычном tkinter это будет реализовано через метод after().
    Если в очереди есть сообщения, основной поток читает их и выполняет соответствующие действия - например, меняет положение прогресс-бара, включает/выключает кнопки, и т.д.
    Если фоновый (рабочий) поток живёт долго, то может иметь смысл организовать вторую очередь для передачи команд из GUI-потока в рабочий. Идея та же самая: рабочий поток ждёт появления команды в своей входной очереди, и выполняет её, а потом сбрасывает уведомления в исходящую очередь.
    Ответ написан
    Комментировать
  • Как установить имя таблицы в виде даты sqlite3 Python?

    shabelski89
    @shabelski89
    engineer
    нужно прочитать про форматирование
    import datetime
    base_table_name = 'table_'
    base_table_name + datetime.datetime.now().strftime('%Y%m')
    'table_202406'
    Ответ написан
    5 комментариев
  • Как правильно настроить работу процессов и как можно оптимизировать код?

    Vindicar
    @Vindicar
    RTFM!
    from multiprocessing import Pool
    
    def concatenate(video1: str, video2: str, output: str) -> bool:
        """Склеивает два видео и пишет результат в файл output.
        Не стоит использовать глобальные объекты. 
        Стоит принимать как параметры и возвращать только базовые типы данных 
        (булевы, числа, строки, кортежи, списки, словари)."""
        ...   # верни True при успехе, False при неудаче. Лови все исключения.
    
    if __name__ == '__main__':
        videos_to_process = [  # этот список формируешь по своей логике.
            ('18_05_video1.avi', '18_05_video2.avi', r'output\18_05.avi'),  # порядок как у аргументов concatenate()
            ('17_05_video1.avi', '17_05_video2.avi', r'output\17_05.avi'),
        ]
        with Pool() as pool:  # по умолчанию пул создаст по одному процессу на ядро
            results = pool.starmap(concatenate, videos_to_process)
        if not all(results):  # хотя одна функция вернула False?
            for (v1, v2, vr), success in zip(videos_to_process, results):
                if not success:  # выясняем, которая
                    print(f'Video merge failed: {v1} + {v2} -> {vr}')
        else:
            print('All videos merged successfully.')
    Ответ написан
    Комментировать
  • Как пройти авторизацию на youtube с помощью selenium?

    hardy_99
    @hardy_99
    Python developer
    В основном это зависит от браузера который у тебя стоит. Стоит попробовать с разнымы версиями (старыми в том числе).
    Я свой кастомную оболочку написал, на данный момент парсит всё, и cloudflare и google-antibot защиту, ничего не тригерит.
    Ответ написан
    4 комментария
  • Как пройти авторизацию на youtube с помощью selenium?

    @rPman
    Сам давно не ковырялся в гугловских формах, но то что я знаю, это то что они собаку съели на борьбе с автоматизацией.

    Могу дать совет, ищи нужные элементы не css-селектором, а по содержимому и размещению.

    Просканируй DOM элементы на их getBoundingClientRect() и игнорируя все что нулевого размера (это невидимые) выявляй все что видимо в нужных местах и относительное положение.
    Ответ написан
    2 комментария
  • Как запустить программу в одной консоле, но чтобы выполнение происходило в другой?

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

    Лучше подумай, не стоит ли использовать GUI. Если очень хочется консольку, то можно создать подобие GUI в ней, используя стандартный модуль curses. Проблема в том, что curses - либа под unix, так что надо искать порт под винду.
    Например, этот пакет добавляет поддержку винды в стандартный модуль curses, делая программу более переносимой.
    Ответ написан
    Комментировать
  • Не импортируется executor, что делать?

    alexhadock
    @alexhadock
    Just a tech
    Привет

    Решение: нужно поставить 2-ю версию aiogram:
    pip install --force-reinstall -v "aiogram==2.23.1"

    Неактуально
    Попробуй следующую конструкцию:

    import aiogram
    from aiogram import Bot, Dispatcher, executor, types


    Так же, пожалуйста, убедись, что модуль не был установлен в виртуальное окружение, которое неактивировано.
    Ответ написан
  • Как получить url страницы и какие есть способы изменять html код через python?

    Vindicar
    @Vindicar
    RTFM!
    Ты упускаешь из виду, что современные страницы часто набиты скриптами, да и банальную необходимость авторизации на сайте. Иными словами, если ты через requests запросишь тот же URL, далеко не факт что ты получишь ту же самую страницу. Тут нужно само содержимое страницы вытаскивать. А оно может быть большое, так что лучше уж выбранный текст.
    Это проще всего сделать через браузерное расширение. Альтернатива - добавить окошко/иконку на панель задач/в трей, куда можно будет перетащить выделенный текст.
    Ответ написан
    Комментировать
  • Как с linux скомпилировать файл с расширением .py в exe под windows?

    ValdikSS
    @ValdikSS
    Установите Python в Wine, установите также в Wine pyinstaller, скомпилируйте им.
    Вот пример: https://github.com/ValdikSS/tor-relay-scanner/blob...

    Последняя версия Python, работающая в Windows 7 — 3.8.10.
    Ответ написан
    Комментировать
  • Как с linux скомпилировать файл с расширением .py в exe под windows?

    ElonMask2
    @ElonMask2
    Autor of Tesla Machini and SpaxeX
    Привет!
    начнем с того что питон не компилируемый язык, а интерпретируемый
    для исполнения ему нужен интерпретатор
    упаковщики в exe зачастую твой локально установленный интерпретатор сжимают и ложат его рядом с самим питон кодом чтобы когда нужно было его запустить, запустился сначала интерпретатор а потом сам питон код

    не уверен что для этого нужна установка  MSVC, скорее всего не нужна если ты не собираешься компилировать интерпретатор питон из сурсов

    не знаю есть ли проекты которые умеют упаковывать не системный питон и заниматся кросс-системной упаковкой
    но в теории это возможно

    вообще питон не для exe создавался, распространяй свою программу через git/pip и пусть конечный юзер на свой питон сам ее грузить

    пока
    Ответ написан
    1 комментарий
  • Как установить simpleaudio на linux?

    Предварительно нужно установить зависимости - об этом буквально в инструкции по установке на первой странице документации к simpleaudio сказано.
    Очевидно что решение для Windows тебе не подходит, тк у тебя Linux.
    Ну и если ты попытался починить через wine, то и python с pip тоже надо было запускать через него же.

    А решение для здоровых людей выглядит так:
    Раз: sudo apt-get install -y python3-dev libasound2-dev
    Два: pip install simpleaudio

    https://simpleaudio.readthedocs.io/en/latest/insta...
    Ответ написан
    Комментировать
  • Не могу установить библиотеку через pip что делать?

    @aynade
    Тоже столкнулся с такой проблемой. На форумах особо ответов не нашел, поэтому пришлось разбираться самому.
    И так, переходишь по ссылке в конце ошибки(https://visualstudio.microsoft.com/ru/visual-cpp-b...) и качаешь build tools. Далее устанавливаешь VS installer и уже в нем допом качаешь C++ (+-7гб). Это собственно всё, опять в терминале прописываешь pip install simpleaudio и вуаля. Скрин на всякий643a472e29ea5688917668.png
    Ответ написан
    1 комментарий
  • В чем заключается ошибка в коде python?

    solotony
    @solotony
    покоряю пик Балмера
    Проблема в вашем коде заключается в неправильном понимании того, как Python обрабатывает условия с использованием оператора or и сравнения объектов.

    Вот строка кода, которая вызывает проблему:

    python

    if self.s1 == color1 or color2:

    В этой строке вы предполагаете, что условие проверяет, равна ли переменная self.s1 цвету color1 или цвету color2. Однако это не совсем верно.

    Вместо этого, вы сравниваете self.s1 с color1, а затем проверяете, является ли color2 истинным (True) или ложным (False). Если color2 не равно None, то это условие всегда будет выполняться, потому что любое непустое значение в Python считается истинным.

    Чтобы исправить это, вы должны явно сравнивать self.s1 с color1 и self.s2 с color2. Вот исправленный фрагмент кода:

    python

    if self.s1 == color1 or self.s1 == color2:
        print("s1")
        return self.s1


    Вы должны применить аналогичные исправления ко всем условиям, где вы используете оператор or для сравнения переменных.
    Ответ написан
    2 комментария
  • В чем заключается ошибка в коде python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Это типичная ошибка тех, кто не учил язык. Попробуйте так:
    if self.s1 in [color1, color2]:
    Ответ написан
    4 комментария
  • Почему ломается фрагмент кода?

    @dima20155
    you don't choose c++. It chooses you
    Скорее всего вы тестируете уже на каком-то определенном окне, которое влияет на исполнение python скрипта. Сам по себе код рабочий, протестируйте при полностью закрытых окнах.
    Ответ написан
    2 комментария
  • Не понимаю почему не работает код python, не могли бы пожалуйста объяснить!?

    Vindicar
    @Vindicar
    RTFM!
    при введении пароля выводит ошибку string index out of range и я понимаю что это означает что
    в [] в листе не существующий индекс

    Нет, не понимаешь. Тебе же прямо сказано про строку, а не про список.
    Ты сначала делаешь i = plst[ii], а потом с какого-то перепугу делаешь i[ii].isupper() and not i[ii].isnumeric().
    У тебя i - это уже один символ, так как plst содержит строку, разбитую по символам.
    Ответ написан
    Комментировать