Задать вопрос
  • Как запустить пользовательского бота Pyrogram в Docker?

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

    Vindicar
    @Vindicar
    RTFM!
    @bot.message_handler(content_types='text')
                def us(message):
                    bot.send_message(message.chat.id, 'проверка')

    Не надо объявдять обработчики событий по ходу дела, это не будет работать так, как ты ожидаешь.
    Ищи другие средства, какие - зависит от библиотеки. В случае telebot это register_next_step_handler(), в репозитории либы есть пример.
    Ответ написан
    Комментировать
  • Как импортировать переменную в python IDLE из другого модуля?

    Vindicar
    @Vindicar
    RTFM!
    Модуль при импорте всегда выполняется целиком, за исключением частей, накрытых if __name__ == '__main__':. Если ты уверен, что это не так - пример кода в студию.
    Ответ написан
  • Как пофиксить ошибку с missing 1 required positional argument: 'event'?

    Vindicar
    @Vindicar
    RTFM!
    Ну так а ты что хотел?
    @client.on(events.NewMessage(chats=url))
    async def main(event):

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

    Vindicar
    @Vindicar
    RTFM!
    Уровни выше есть?
    Потому что если нет, то from folder_1.name import func
    Ответ написан
    5 комментариев
  • Не запускается код скомпилированный с помощью pyinstaller на другом компе, что делать?

    Vindicar
    @Vindicar
    RTFM!
    Код написан чат гпт4, я не программист

    Тогда, боюсь, тебе на фриланс. Кто знает, что там эта дура железная наворотила. Нужно же понимать, что генеративные сети не понимают, что пишут - они тупо ремиксят то, что когда-то видели.

    Но да, вполне может быть, что проблема в этом:
    # Привязываем сокет к определенному адресу и порту
    server_address = ('192.168.1.32', 12345)
    server_socket.bind(server_address)

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

    сделать программу для получения информации от клиента и записи ее в txt файл

    Что за информация? Как она получается? Критично ли именно в txt файл?
    В простейшем случае может хватить и гугл-формы.

    Короче, вывод: нехрен полагаться на гпт, вообще ни в чём. Там нужно в два раза лучше разбираться, чтобы понять, оно дело сделало, или фигню наворотило.
    Ответ написан
    1 комментарий
  • Почему subprocess выдает непонятные символы?

    Vindicar
    @Vindicar
    RTFM!
    subprocess.run() совмещает стандартный вывод твоего скрипта и вызываемого тобой процесса. Если они используют разные кодировки, чей-то вывод превратится в кашу.
    Используй capture_output, тогда ты получишь вывод скрипта в виде строки, которую сможешь сам декодировать, если надо.
    Ответ написан
    Комментировать
  • Почему бот перестал отвечать после добавления клавиатуры?

    Vindicar
    @Vindicar
    RTFM!
    У тебя две функции отмечены как
    @bot.message_handler(content_types=['text'])
    telebot в случае подобного конфликта (две функции готовы обслужить одно и то же событие) всегда вызывает первую из них.
    Тебе придётся объединить логику этих функций в одной функции.
    Ответ написан
    Комментировать
  • Требуется захват вывода команды в subproccess python в реальном времени как реализовать?

    Vindicar
    @Vindicar
    RTFM!
    Используешь Popen(), перехватываешь ввод-вывод (stdin, stdout и stderr, передаёшь туда константу PIPE). Дальше используешь свойства stdin, stdout, stderr - это файлоподобные объекты (пайпы).
    Тут есть ряд подводных камней. Обычно чтение из файла - блокирующая операция, т.е. пока дочерний процесс не напишет что-то в пайп - твоя программа будет висеть и не реагировать на действия пользователя. В питоне неблокирующее чтение из пайпа доступно только под unix, а под виндой - только начиная с 3.12. Если нужна поддержка винды, будет практичнее запустить отдельный поток, который читает данные из процесса. Например, так:

    import collections
    import signal
    import subprocess
    import threading
    import time
    
    
    class ChildProcessReader(threading.Thread):
        def __init__(self, args: list[str], *, encoding: str | None = None, errors: str = 'ignore', exit_timeout: float = 1.0):
            super().__init__(name=f'Monitor {args!r}', daemon=True)
            self._encoding = encoding
            self._errors = errors
            self._exit_timeout = exit_timeout
            self._queue = collections.deque()
            self._child = subprocess.Popen(args,
                stdin=subprocess.DEVNULL,  # стандартный вход отключен
                stdout=subprocess.PIPE,  # перехватываем стандартный вывод
                stderr=subprocess.STDOUT,  # стандартный вывод ошибок направляем на стандартый вывод
            )
            self.start()
        
        @property
        def running(self) -> bool:
            '''Возвращает True, если процесс ещё жив.'''
            return self._child is not None
        
        @property
        def output(self) -> collections.deque:
            '''Очередь, в которую будут складываться получаемые от процесса строки.'''
            return self._queue 
        
        def stop(self) -> None:
            '''Останавливает процесс - сначала "по хорошему", потом принудительно.'''
            if self._child is None:
                return
            try:
                self._child.send_signal(signal.CTRL_C_EVENT)
                self._child.wait(self._exit_timeout)
            except subprocess.TimeoutExpired:
                self._child.terminate()
            except KeyboardInterrupt:
                pass
            finally:
                self._child = None
        
        def run(self) -> None:
            '''Тело потока.'''
            try:
                while self._child.poll() is None:  # рабочий цикл крутится, пока дочерний процесс жив.
                    stdout_data = self._child.stdout.read1()
                    if self._encoding is not None:
                        stdout_data = stdout_data.decode(self._encoding, errors=self._errors)
                    self._queue.append(stdout_data)
            except KeyboardInterrupt:
                pass
            finally:  # по выходу из цикла завершаем процесс
                self.stop()
    
    
    if __name__ == '__main__':
        child = ChildProcessReader(
            # выполняемая команда
            ['ping', '-t', '127.0.0.1'],
            # кодировка, в которой отдаёт данные твой процесс. None - отдавать байты как есть.
            encoding='cp866', errors='ignore',
            # сколько ждать завершения процесса
            exit_timeout=1.0
        )
        # процесс (и поток) стартуют немедленно по созданию экземпляра класса
        try:
            while child.running:
                # вместо просто цикла тебе лучше периодически выполнять код ниже иным способом
                # например, если у тебя GUI на tkinter, используй метод .after()
                try:  # пытаемся получить очередную строку от процесса
                    data = child.output.popleft()
                except IndexError:  # ничего нет, буфер пуст
                    # это просто реакция на отсутствие текста. Можно вообще ничего не делать.
                    print('.', end='', flush=True)
                    time.sleep(0.1)  # 
                else:  # получили строку, обрабатываем
                    print(f'\n> {data!r}')
        except KeyboardInterrupt:
            print('\nStopping')
        finally:  # в итоге надо будет прибить дочерний процесс
            child.stop()
    Ответ написан
    Комментировать
  • Как сделать выбор монитора для полноэкранного приложения python arcade?

    Vindicar
    @Vindicar
    RTFM!
    window.set_fullscreen()?
    screen – Which screen should we display on? See get_screens()

    Т.е. при вызове метода set_fullscreen() передаёшь в параметр screen элемент из списка get_screens().
    Ответ написан
  • Как привязать телеграм бота к программе на C#?

    Vindicar
    @Vindicar
    RTFM!
    Я подозреваю, что для работы бота требуется запустить его рабочий цикл. Без него методы бота работать не будут. Подробнее читай в доках на используемую тобой библиотеку (которую ты не потрудился указать).
    А вообще, API телеги - это просто HTTP запросы, ты можешь попробовать сделать запрос вручную.
    Например, послать POST запрос на адрес
    https://api.telegram.org/botТОКЕН_ТВОЕГО_БОТА/sendMessage
    с телом
    chat_id=ID_получателя&text=текст_сообщения_в_url_кодировке
    Ответ написан
    Комментировать
  • Почему возникает ошибка "got an unexpected keyword argument 'use_context'"?

    Vindicar
    @Vindicar
    RTFM!
    Ты уверен, что туториал, по которому ты писал бота, рассчитан на ту же версию, что и используемая тобой?
    Может, у тебя либа сильно новее, чем та, на которую код рассчитан?
    Ответ написан
    Комментировать
  • Как заполнить sql таблицу на Python SQLAlchemy?

    Vindicar
    @Vindicar
    RTFM!
    Ответ написан
    Комментировать
  • Почему не работает скрипт python при запуске из crontab?

    Vindicar
    @Vindicar
    RTFM!
    в лог пишется инфа из скрипта, что создал папку/записал файл, но по факту этого нет при запуске скрипта из кронтаба, т.е. запись об успехе есть, а папки/файла нет

    Т.е. скрипт создал папку неизвестно где. Относительные пути используешь?
    Исправь скрипт так, чтобы он писал в лог полный путь к создаваемому файлу.
    Ответ написан
    3 комментария
  • Что делать, не работает telebot python?

    Vindicar
    @Vindicar
    RTFM!
    Так telebot вроде синхронный, а не асинхронный фреймворк?
    Ответ написан
  • Как работают генераторы в Пайтон?

    Vindicar
    @Vindicar
    RTFM!
    join() вызывает под капотом list() на переданном генераторе, а list() опрашивает весь генератор.
    Так что сначала генерится список вида ['0', '1', '2', '3', '4', '5', '6', '7'], что позволяет сразу рассчитать объём памяти, нужный для итоговой строки. Потом по этому списку уже формируется итоговая строка.
    Ответ написан
    1 комментарий
  • Как разделить текст на предложения в Python при этом же не учитывать точки после сокращений и инициалов?

    Vindicar
    @Vindicar
    RTFM!
    каким-то регулярным выражением

    Читаем, просвещаемся.

    А вообще без примера текста не очень-то порешаешь. Вот, скажем: "Он родился в 1986 г." - точка после сокращения, но она значима. Или, скажем, "Джон Ф. Кеннеди" - после точки идёт длинное слово с заглавной буквы, но точка не значима.
    В принципе, если первый приведённый случай не считается, то можно сказать, что за разделители предложений принимаются только точки, перед которыми идёт более двух букв, а также многоточия, знаки вопроса и восклицания, после которых идёт пробел. Для начала сойдёт, дальше можно уточнять.
    Ответ написан
    2 комментария
  • Как определить фамилию из строки?

    Vindicar
    @Vindicar
    RTFM!
    Я бы начал с natasha/yargy
    Ответ написан
    Комментировать
  • Как сделать кайот-джамп?

    Vindicar
    @Vindicar
    RTFM!
    Фиксировать момент, когда игрок последний раз оторвался от земли и причину. При прыжке сравнивать с текущим временем и прыгать только если это было достаточно недавно и только по причине схода с платформы.
    Ответ написан
    Комментировать