Ответы пользователя по тегу Python
  • Как работают генераторы в Пайтон?

    @wintreist
    1. Вариант ответа.
    Строка приравнивается только в момент готовности (01234567), но в "".join() происходит её итеративное создание.
    str.join(iterable)
        Return a string which is the concatenation of the strings in iterable. A TypeError will be raised if there are any non-string values in iterable, including bytes objects. The separator between elements is the string providing this method.

    Join итерируем, поэтому сначала произойдет создание строки справа от приравнивания, и потом ссылка на строку запишется в переменную
    Ответ написан
    Комментировать
  • Как перевести PIL Image в Bytes и обратно?

    @wintreist Автор вопроса
    buff.seek(0)
    image = Image.open(buff)
    buff = io.BytesIO()
    image.save(buff, "PNG")
    buff.seek(0)
    image = Image.open(buff)

    От сюда
    Ответ написан
    Комментировать
  • Как получать вывод subprocess.run() во время выполнения?

    @wintreist Автор вопроса
    Вот такой код наклепал я, если нужен именно subprocess.run(), может кому пригодится
    import subprocess as sub
    import threading as th
    import time
     
    def startrar():
        with open("test.log", "wb+") as file:
            rar = sub.run('"C:\\Program Files\\WinRAR\\Rar.exe" a -r -ep1 -v1g "D:\\mysqlrar" "D:\\Аудиокниги\\book"',
               shell=True, stdout=file, stderr=sub.PIPE)
     
    def printpipe():
        while True:
            with open("test.log", "rb") as file:
                print(file.read().decode('cp1251'))
            time.sleep(1)
     
    threads = []
    threads.append(th.Thread(target=startrar))
    threads.append(th.Thread(target=printpipe))
     
    for i in threads:
        i.start()
    Ответ написан
    Комментировать
  • Почему не работает async apscheduler?

    @wintreist Автор вопроса
    Мне дали ответ, в чем была проблема, и вот код который правильно работает
    sheduler.add_job(thread_maintaining_communication,"interval", seconds=20)
    bot.add_custom_filter(asyncio_filters.StateFilter(bot))
    sheduler.start()
    loop = asyncio.get_event_loop() 
    loop.run_until_complete(bot.polling(skip_pending=True))
    Ответ написан
    Комментировать
  • Как сделать проверку if на тип переменной?

    @wintreist
    if type(a1) == float
    Ответ написан
    Комментировать
  • Python pickle как прочитать все данные из файла?

    @wintreist
    Всё зависит от ситуации, но ведь можно просто объединить два массива:
    c = [a, b]
    with open('1', 'wb') as dump:
        pickle.dump(c, dump)

    А потом при чтении получить первый массив по индексу 0, второй по 1
    Ответ написан
    Комментировать
  • Как реализовать доступ к информации по паролю python bot?

    @wintreist
    Вот решение, для проверки на правильность логина\пароля. Предполагается, что вы либо разделите логин\пароль из одного сообщения, присланного боту пользователем. Либо будете получать пару логин\пароль из 2 сообщений.
    Код
    def NewValideLogin(DataBase):
        DataBase[input("Введите новый валидный логин: ")] = input("Введите пароль, для нового логина: ")
        return DataBase
    
    def RemoveLogin(DataBase):
        del DataBase[input("Введите логин, который нужно удалить: ")]
        return DataBase
    
    
    DataBase = {'Admin':'AdminKrasavhicIMolodec228', 'User':'12340987'}
    UserMessage1 = "Admin"
    UserMessage2 = "AdminKrasavhicIMolodec228"
    if UserMessage1 in DataBase:
        print('Логин засчитало')
        if UserMessage2 == DataBase[UserMessage1]:
            print('Пароль засчитало')
        else:
            print('Пароль не засчитало')
    else:
        print("Логин не засчитало")

    В приложенном коде есть 2 функции. Одна для добавления новых пар логина\пароля в список, другая для удаления из списка уже не нужных логинов и паролей.
    P.S: Обратите внимание, что при использовании этих функций, нужно переменную DataBase переписывать
    DataBase = NewValideLogin(DataBase)
    Ответ написан
  • Как выйти из цикла по нажатию клавиш Ctrl+C?

    @wintreist
    Попробуйте использовать предложенный здесь вариант, вроде бы всё понятно. Что касается остановки цикла, то делаете
    так
    hotkey = false
    keyboard.add_hotkey('Ctrl + 2', hotkey=true) #Думаю должно сработать, но не уверен
    while not hotkey:
        bosslike()
    Ответ написан
    Комментировать
  • Как отключить обработку инлайн-кнопок в телеграм-боте?

    @wintreist
    Не работал с данной библиотекой, но могу предложить решение, если его возможно реализовать.
    После того, как бот отправил последнее сообщение с его инлайн-кнопками, получите ID сообщения\ID инлайн кнопок из последнего сообщения или т.п.
    И сохраните в переменную (если это ID инлайн-кнопок, то в массив)
    При нажатии на инлайн-кнопку вашему боту должен идти запрос от кнопки, а значит и её Id, проверьте есть ли такой ID в списке последнего
    сообщения
    buttons_ID = [11,52,65]
    button_pressed_ID = 11
    if button_pressed_ID in buttons_ID:
        print("Кнопка нажата в последнем сообщении")
    else:
        print('Кнопка нажата не из последнего сообщения. Игнорим')

    Если при нажатии кнопки присылается ID сообщения, то проделываете ~тоже самое.
    ~тоже самое
    last_message_ID = 114415
    button_pressed_message_ID = 11
    if button_pressed_message_ID == last_message_ID:
        print("Кнопка нажата в последнем сообщении")
    else:
        print('Кнопка нажата не из последнего сообщения. Игнорим')
    Ответ написан
    Комментировать
  • Как выполнить такую конструкцию?

    @wintreist
    Ну, я думаю, лучше делать команды сразу закрытыми. Если вы хотите код получения сообщения из чата, то это не ко мне. Если умеете получать сообщение, присланное боту, то
    вот
    message = "Он не знает, или не тот chat id"
    if "или" in message: #"или" - секретный код идентификации
        print("Дать доступ, он знает код")

    chat ID по тому же принципу работает
    код
    chatIDs = [11,52,65]
    chatID = 3
    if chatID in chatIDs:
        print("Дать доступ, он из списка")
    else:
        print('Его нет в списках разрешенных')
    Ответ написан
    Комментировать
  • Почему Visual Studio не видит модуль?

    @wintreist Автор вопроса
    Вопрос вроде как закрыт, скачал с помощью easy_install модуль заново, изменил .egg на .zip и скинул в папку site-packages, вроде заработало 5cfb98a1559d8932603051.png
    Ответ написан
    Комментировать
  • Как выполнить js скрипт на странице используя Selenuim?

    @wintreist Автор вопроса
    Я нашел решение, спасибо Дмитрий Шицков, в моем прошлом вопросе был ответ этого, я, еще не пробовал, но должно получиться, использую команду Driver.execute_script()
    P.S: dimonchik2013 Видимо ты имел ввиду это) Спасибо и тебе)
    Ответ написан
    Комментировать
  • Как ЭТО декодировать?

    @wintreist Автор вопроса
    Я не много понял почему так. AES тут не при чем. Get_random_bytes(16) возвращает кривые байты (b'v\x19\xae\xd6\xfe\x92\x1cj\x8b\x17\x9d\xb6\x01#\xf7!') Из-за чего при шифровке и дешифровке всё криво, только все равно не понятно, как сделать тогда, чтобы байты генерировались нормально
    Ответ написан
    Комментировать