Задать вопрос
  • Почему впн работает не на всех сайтах?

    Vindicar
    @Vindicar
    CityCat4, ну т.е. правила для "домашних" пользователей и для VPS разные. Так? Домашнему пользователю VPN за рубеж низзя, а VPSке можно. И VPN до российской VPSки тоже можно.
    Написано
  • Не настраиваются разные уровни логирования в python logging?

    Vindicar
    @Vindicar
    Не вполне по теме вопроса, но замечу: работа с путями у тебя просто ппц какая. Тут тебе и pathlib.Path, тут тебе и os.path, тут тебе и ручная склейка путей... не говоря уже о том, что __file__ всё же имеет специальное значение.
    import sys
    from pathlib import Path
    # __file__ и sys.argv[0] могут не совпадать для скриптов из нескольких файлов.
    script_path = Path(sys.argv[0]).resolve()
    dotenv_path = script_path.parent / '.env'
    script_name = script_path.stem
    log_dir = script_path.parent
    log_file = log_dir / (script_name + '.log')
    Написано
  • Почему код работает, только, если замедлять сервер до 5 кадров секунду?

    Vindicar
    @Vindicar
    Ланской Кирилл, в разных задачах требуется разная манера обмена данными. Вообще голыми сокетами хорошо пользоваться разве что в обучающих задачах.
    А json имеет схожую проблему - он предполагает, что ты декодируешь одно полное сообщение.
    Так что разделитель какой-то придётся придумать. Можно полагаться на то, что json по умолчанию не содержит переноса строк. Тогда можно будет в конце json-строки передать, скажем, \n\n. А при приёме данных накапливать принимаемые данные в буфере, пока в нём не появится \n\n. Появилось - всё что до \n\n декодируем и удаляем из буфера, сам разделитель тоже удаляем.
    Написано
  • Почему код работает, только, если замедлять сервер до 5 кадров секунду?

    Vindicar
    @Vindicar
    Ланской Кирилл, ну вот и ответ. Ты используешь потоковый сокет, а он подразумевает сплошной поток байт. Он не понимает, что в потоке могут быть отдельные сообщения. Клиент может отправить килобайт, а сервер читать его по байту. Или наоборот, как в твоём случае - клиент отправляет два сообщения, а сервер работает медленнее, и читает оба сообщения за один присест.
    Иными словами, ты можешь прочитать неполное сообщение, или прочитать несколько, или прочитать сколько-то целых и неполное. Это не от твоей программы зависит. Так что это уже твоя забота - добавить в данные какой-то разделитель, чтобы понять, где сообщение закончилось, и реагировать только на сообщение, которое пришло полностью.

    А вообще я бы посоветовал поискать библиотеку и работать с ней. Просто погугли pygame network, найдёшь несколько вариантов. Посравнивай их.
    Написано
  • Sign in to confirm you’re not a bot. This helps protect our community. Learn more (Yt-dlp) - как решить?

    Vindicar
    @Vindicar
    Николай Медведков, о, про netrc и user/pass я и сам забыл. Значит, не два, а четыре.
    Написано
  • Деление строки в список Python?

    Vindicar
    @Vindicar
    Ланской Кирилл, питон это позволяет. Гугли list comprehension.
    Это то же самое, что и
    rects_to_send = []
    for rect in rectangles:
      rects_to_send.append( [rect.x, rect.y, rect.w, rect.h] )
    Написано
  • Можно ли создать бота который действия из LINUX будет перенаправлять в Telegram сообщением?

    Vindicar
    @Vindicar
    fwewefef, а ты глянь код выше. Там это переменная, в которую читается очередная строка файла.
    Я исходил из того, что ты bash скриптинг хотя бы базово знаешь.

    В принципе, можно аналог и на питоне написать, и через urllib.request (ну или пакет requests) дёргать телегу.
    Написано
  • Опасно ли не закрыть сокет сервера или клиента в Python?

    Vindicar
    @Vindicar
    Ланской Кирилл, при завершении процесса все его ресурсы освобождаются. Речь выше об утечке сокетов, когда процесс работает, но "забыл" про открытый сокет.
    А исключения ловить надо. try-finally в помощь. Также объект-сокет поддерживает оператор with, что позволяет гарантированно вызвать close() при выходе из блока кода.
    Написано
  • Как сделать отсчёт времени + чтобы он обновлялся каждый день?

    Vindicar
    @Vindicar
    Ты для начала объясни, как ты это себе видишь. Потому что обновляемую инфу в дискорд выводить не очень-то удобно - редактировать сообщения бот может лишь в течении получаса.
    Написано
  • Можно ли создать бота который действия из LINUX будет перенаправлять в Telegram сообщением?

    Vindicar
    @Vindicar
    fwewefef,
    send "Я выполнил, и получилось вот: $(тут команда)"
    .
    Собственно, с помощью sed можно будет попробовать извлекать нужные куски $line.
    Написано
  • Можно ли создать бота который действия из LINUX будет перенаправлять в Telegram сообщением?

    Vindicar
    @Vindicar
    fwewefef, это уже сам разбирайся. Всё зависит от способа входа, пользователя, и т.д. Если тебе важен удалённый вход - то смотри, куда sshd пишет лог, и мониторь этот файл (возможно, это будет syslog?) Если локальный - то там другая программа, фз куда она лог пишет. Ну и когда найдёшь нужный лог-файл, надо будет найти, как выглядят нужные строки, и поправить регулярки.
    Готовый код не жди.
    Написано
  • Как правильно вызвать метод одного класса из другого?

    Vindicar
    @Vindicar
    Only4You, распределение обязанностей - самое важное и самое сложное в ООП, так что не удивительно, что это сразу не понять. Поймёшь ещё, просто практикуйся.
    Можешь сделать так: нарисуй схему, какой класс знает о существовании какого. Например:
    66befee2f3f30056282467.png
    В моём случае Footerbar не знает о классах App и Statusbar. Ему дали какой-то метод, а чей это метод - ему безразлично.
    Соответственно, такого "знания" классами друг друга должен быть необходимый минимум, а каждый класс должен решать один логически связанный круг задач. Тогда классы будут более-менее простыми и внутри, и снаружи, т.е. при использовании.
    Написано
  • Можно ли создать бота который действия из LINUX будет перенаправлять в Telegram сообщением?

    Vindicar
    @Vindicar
    который действия из LINUX будет перенаправлять в Telegram сообщением

    А теперь ещё раз и по-русски. Какие-такие действия? Чьи действия?
    Написано
  • Как правильно вызвать метод одного класса из другого?

    Vindicar
    @Vindicar
    Only4You, и снова: в одну сторону - не проблема. А вот "и наоборот" намекает, что у тебя неправильно распределены обязанности по классам. Кто-то из них занимается не своим делом. Может даже оба, такое бывает.
    Если это два разных компонента, то наладить взаимодействие между ними - задача App.
    Если не два компонента, а один, он должен быть оформлен как один класс который внутри себя уже налаживает взаимодействие между своими "подчинёнными".
    Я бы вообще сделал вот так

    from tkinter import *
    from tkinter import ttk
    
    class App(Tk):
        def __init__(self, parent):
            super().__init__()
            self.title('Main window')
            self.geometry('400x350+800+400')
            self.__put_frames()
    
        def __put_frames(self):  # наш, приватный метод - не надо выставлять его наружу
            self.statusbar = Statusbar(self)
            self.statusbar.grid(row=1, column=0, columnspan=3)
            
            self.footerbar = Footterbar(self)
            # передаём метод, который надо вызвать
            # footerbar всё равно не имеет понятия, чей это метод
            # он только знает, что его надо вызвать по клику на кнопку 6
            # мы могли бы создать метод в App и передать его, это бы тоже сработало
            # собственно, задача App - связать два компонента между собой
            self.footerbar.button6_clicked = self.statusbar.refresh  
            self.footerbar.grid(row=2, column=0, columnspan=3)
    
    class Statusbar(Frame):
        """Этот класс реализует строку состояния, которая умеет показывать текст."""
        def __init__(self, parent):
            super().__init__(parent)
            self.__put_widgets()
    
        def __put_widgets(self):  # наш, приватный метод - не надо выставлять его наружу
            self.txt = Text(self, height=15, width=35)
            self.txt.grid(row=1, column=0, columnspan=3)
    
        def refresh(self):
            self.txt.delete(1.0, END)
            self.txt.insert(END, "Updated content")
    
    class Footterbar(Frame):
        """Этот класс реализует панель с нажимаемыми кнопками, и позволяет отреагировать на их нажатие"""
        def __init__(self, parent):  # мы ничего не знаем про статусбар
            super().__init__(parent)
            self.button6_clicked = None  # тут будет храниться ссылка на метод
            self.__put_widgets()
    
        def __button6_click(self):
            if self.button6_clicked is not None:  # у нас есть что вызывать?
                self.button6_clicked()  # да - вызываем
    
        def __put_widgets(self):  # наш, приватный метод - не надо выставлять его наружу
            self.btn4 = ttk.Button(self, text='4')
            self.btn4.grid(row=10, column=0)
            
            self.btn5 = ttk.Button(self, text='5')
            self.btn5.grid(row=10, column=1)
            
            self.btn6 = ttk.Button(self, text='6', command=self.__button6_click)
            self.btn6.grid(row=10, column=2)
    
    app = App(Tk)
    app.mainloop()

    Написано
  • Как правильно вызвать метод одного класса из другого?

    Vindicar
    @Vindicar
    Only4You, погоди, ты реши, какой объект каким владеет.
    У тебя statusbar внутри footerbar, или наоборот?
    В первом случае footerbar владеет statusbar, и statusbar должен получить ссылку на него как на владельца через параметр __init__(), но не наоборот.
    Ну а если statusbar владеет footerbar, то наоборот.
    Просто представь, что твой интерфейс - дерево. App - ствол. А как дальше от него ветви идут? "Ветка" всегда получает параметром то, к чему она крепится.
    Написано
  • Что эффективнее: np.array_equal или (A == B).all()?

    Vindicar
    @Vindicar
    Ланской Кирилл, А ты исходник посмотри. array_equal() еще много чего делает: приводит входные коллекции к массиву (для == и A и B уже должны быть массивами), отдельно обрабатывает ситуацию, когда в массиве есть NaN (простое сравнение считает, что NaN не равно ничему, в т.ч. самому себе). Вот и набегает 30% разницы.
    Написано
  • Как грамотно распределять по websocket данные получаемые из одного источника?

    Vindicar
    @Vindicar
    ALEXU83, тут вообще нужно уточнить, что тебе нужно.
    Просто размножить поток на несколько клиентов, и пусть они сами разбираются? Или иметь какую-то историю? И должна ли история быть персистентной, т.е. переживать перезапуск?

    Потому что в первом случае по идее можно разрулить без БД, достаточно иметь словарь "тикер-вебсокеты". Поступила новая запись, смотрим её тикер, смотрим, кто вот прямо сейчас имеет активный вебсокет и подписан на этот тикер, рассылаем. Как на питоне это соорудить, я примерно могу представить, а вот на пхп, извини, не мой профиль.

    А насчёт мощности, извини, встречный вопрос: сколько клиентов у тебя будет? Потому что единицы записей в секунду - это не сказать чтобы супер много. Если клиентов в пределах сотни, то ИМХО можно оба сервиса на одной vps запустить, и ещё резерв останется.
    Написано
  • Как исправить: TypeError: bad operand type for unary ~: 'type'?

    Vindicar
    @Vindicar
    smit_emae, для начала - написать, как называется библиотека, на которой ты пишешь бота, и её версию. Эту инфу вообще полезно в вопрос добавлять, а то пока нагуглишь, какая из них при импорте называет себя telegram...
    Написано
  • Как исправить: TypeError: bad operand type for unary ~: 'type'?

    Vindicar
    @Vindicar
    не прокатит, логическое отрицание кастует аргумент в bool сначала.
    Написано
  • Почему не работает on_member_join?

    Vindicar
    @Vindicar
    Timurkaaa, а в настройках бота в дискорде этот интент включил? Он привилегированный.
    Написано