• Как передать переменную из одной функции в другую?

    iggor-markin
    @iggor-markin
    Python Developer
    Чтобы задать пользователю несколько вопросов тебе нужно воспользоваться машиной состояний. Обычно реализация есть в любой популярной библиотеке. Вот пример на aiogram: https://github.com/aiogram/aiogram/blob/dev-2.x/ex...
    Ответ написан
    Комментировать
  • Как сделать сервер на Линукс для телеграм бота?

    krax1337
    @krax1337
    личинка Девопса
    Один из вариантов это Docker

    Попробуй докеризировать своих ботов, и далее уже запускать их в отдельные Docker контейнеры. Так ты сможешь их изолировать, а еще они сами будут подниматься при ловле исключений и запуске компьютера (--restart always). Еще с помощью Docker легко будет пробросить API ключи в переменное окружение.
    Ответ написан
    Комментировать
  • Змея не хочет вытаскивать словарь из файла *.txt, как ей помочь?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    теоретически может вытащить словарь

    А практически он читает строку.

    Либо через json
    import json
    
    with open('db.txt', 'r', encoding='utf-8') as db:
        db_dict = json.load(db)


    Либо через literal_eval, хотя json, конечно, лучше
    Ответ написан
    2 комментария
  • Как достать текст из текста?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Я знаю что можно взять используя регулярные выражения, но я новенькой в пайтоне, и совсем не понял как сделать

    Регуляркой не обязательно:
    data = '' #  в  data - вся приведенная простыня
    for line in data.split('\n'):
        if line.startswith(('Пользователь', '=== Всего пользователей:', '=== Общий трафик')):
            print(line)

    === Всего пользователей:  8 
    Пользователь:  Admin_16/03 Порт: 1317 Трафик: 75.06 GB
    Пользователь:  Rahym_16/03 Порт: 6993 Трафик: 214.78 GB
    Пользователь:  Mama_16/03 Порт: 6951 Трафик: 28.14 GB
    Пользователь:  Klass_17/03 Порт: 7124 Трафик: 69.52 GB
    Пользователь:  Rahym2_01/04 Порт: 8543 Трафик: 73.77 MB
    Пользователь:  Toyjan_01/04 Порт: 7814 Трафик: 8.75 GB
    Пользователь:  David_03/04 Порт: 5870 Трафик: 6.05 GB
    Пользователь:  Test_07/04 Порт: 4282 Трафик: 0 B
    === Общий трафик всех пользователей:  402.36 GB
    Ответ написан
    Комментировать
  • Как отправлять самому себе сообщения через бота телеграм?

    shurshur
    @shurshur
    Ошибку, вообще-то надо показывать, кто ж будет решать то не знаю что?

    Но давай я повангую.

    Во-первых, Bot - это класс. Нужно создать его экземпляр:

    from aiogram import Bot
    bot = Bot(token=config.bot_token)


    Во-вторых, при этом всё равно будет ошибка coroutine was never awaited. Потому что асинхронные функции нельзя просто так вызывать из синхронного кода.

    Вызвать можно так:

    async def main():
      await bot.send_message(my_chat_id, my_message)
      await bot.close()
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    Ответ написан
    Комментировать
  • Как преобразовать строку в имя переменной?

    @mkone112
    Начинающий питонист.
    Да что вы все пристали? Ненужно, ненужно... Интересно же!
    globals().update({f'a{i}':i for i in range(10)})
    Ответ написан
    Комментировать
  • В чём отличие @Decorator от @Decorator()?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Декоратор - это функция, которой на вход подаётся функция и вернуть он должен тоже функцию. Например:
    @decorator 
    def foo():
     ..

    Эквивалентно foo = decorator(foo)

    Теперь про случай из вопроса. В качестве декоратора вместо обычной функции вы используете класс (точнее его объект):
    @FuncDec()
    def foo():
        print('Hello')

    Эквивалентно foo = FuncDec()(foo), а именно:
    • создаётся объект FuncDec (вызывается конструктор __init__)
    • этот объект вызывается (__call__) вместе с параметром foo
    • объект вернул функцию wrapper, которая и будет в дальнейшем выполняться вместо объявленной foo
    • профит

    Но если убрать скобки, то получится эквивалент foo = FuncDec(foo)
    То есть просто вызов конструктора, который у вас не принимает параметров - поэтому и ругается.
    Ответ написан
    Комментировать
  • Нужно сделать программу покороче. Как?

    0xD34F
    @0xD34F
    нужно в 24 строки уложиться

    Замените тело функции invert на

    return ''.join('0' if n == '1' else '1' for n in d)

    Получится ровно 24.

    Тело второй функции тоже сократим до одной строки:

    return '1' if n == 1 else ((s := dracon(n - 1)) + '1' + invert(s)[::-1])

    Сами функции теперь ничего не мешает переписать в виде лямбд.

    Наконец, заметим, что две строки перед циклом, который перебирает dr, идентичны одной из веток условного оператора внутри цикла - так что удалим их, а цикл пусть сделает ещё одну итерацию, для этого в начале dr должно оказаться что-то, отличное от '1'.

    Достаточно коротко получилось?
    invert = lambda d: ''.join('0' if n == '1' else '1' for n in d)
    dracon = lambda n: '1' if n == 1 else ((s := dracon(n - 1)) + '1' + invert(s)[::-1])
    
    dr = '0' + dracon(int(input()))
    print(dr)
    
    import turtle as t
    tt = t.Turtle()
    
    for n in dr:
      if n == '1':
        tt.right(90)
        tt.forward(4)
      else:
        tt.left(90)
        tt.forward(4)
    
    input()

    Тут конечно надо отметить, что на данный момент далеко не везде используется python версии 3.8+, так что приведённый код может у вас и не взлететь, по причине наличия в нём assignment expression (оператор :=).
    Ответ написан
    3 комментария
  • Как работать с вводом в формате "1+2+3+4+5"?

    pro100chel
    @pro100chel Куратор тега Python
    Python && PHP Developer
    1. Считываем вход.
    2. разделяем строку по + и заносим в список это дело. Метод split
    3. Сортируем список функцией sorted
    4. Выводим на экран соединенный методом join через + отсортированный список.
    Ответ написан
    4 комментария
  • Как Спарсить полученный ответ Json python?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    import json
    
    s = '''{
    "response": {
    "text": "Статус юзера"
    }
    }'''
    
    j = json.loads(s)
    
    print(j['response']['text'])
    Ответ написан
    5 комментариев
  • AWS vs GoogleCloud vs DigitalOcean – как выбрать облако?

    inoise
    @inoise Куратор тега Amazon Web Services
    Solution Architect, AWS Certified, Serverless
    Итак, для начала DigitalOcean - НЕ ОБЛАКО. Это просто набор связанных сервисов. Зайти в DigitalOcean очень просто, выйти тоже, все понятно и прозрачно но там даже горизонтального масштабирования нет. Это слегка прокачанные те же VPS-ки.

    Теперь по всему остальному. Есть золотая троица AWS/Azure/GCP, но тут начинают играть другие правила.
    1. Стоит обратить внимание на то что им действительно надо учиться и это занимает время. Чтобы сделать решение, а не поделку и не влететь на деньги месяца не хватит ибо там очень много всего.
    2. Я могу сказать что переезд из одного облака в другой возможен при двух условиях: вы пользуетесь только базовыми сервисам (вроде виртуалок, БД, S3) и у вас есть 2 архитектора с сильным пониманием этих облаков
    3. Два архитектора по тому что я не знаю ни одного такого человека кто потратил достаточно сил и вник сразу в несколько облаков достаточно глубоко. Я был там везде и в результате все-равно остановился на AWS, хотя Azure и GCP имеют свои преимущества
    4. Про сервисы - ехать в облако и не пользоваться особыми сервисами и фичами этого облака - дорого и глупо
    5. А самое интересное что сделать и мигрировать проект проще чем обучить людей и изменить подходы к прайсингу
    6. Миграция в облако и из облака - не делается по щелчку пальцев, особенно если есть много данных


    По AWS могу поделиться гайдами как туда ехать, да и у них Cloud Migration очень понятный раздел с документацией. Если сравнивать эти облака то:
    • AWS - serverless, cutting-edge solutions, прозрачная инфраструктура
    • Azure - экосистема от MS, прекрасный CosmosDB (но это скорее про цены)
    • GCP - глобальные ресурсы, BigData

    При этом большинство этих фич в том или ином виде есть в других облаках.

    И маленькая ремарочка по k8s. Если вы едете не в GCP то он вам не нужен. AWS и Azure сделали так что вы можете его туда удобно загнать, но это будет дороже. Тот же AWS ECS + Fargate куда удобнее и я не знаю тех System Engeneer что по собственному желанию пересаживались с этого на k8s
    Ответ написан
    8 комментариев
  • Как сохранять данные в питон?

    pickle - текст
    json - ключ : значение
    структура(имя, возраст, почта, etc) - бд: sqlite3, которую нет необходимости устанавливать отдельно, mysql, postgresql, etc
    Ответ написан
    Комментировать
  • Как защитить код?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Но как защитить сам код?
    - как вариант, переписать бота на C/C++.
    Упаковываем ботов правильно: файлы .ini и .pyz

    Я даже боюсь представить, что там за секретный код, судя по вашим предыдущим вопросам)):
    Как в telebot отправлять сообщение определенному пользователю?

    Как спарсить json ответ?

    Как добавить объект в список json?

    Как сделать кнопку с ссылкой в telebot python?
    Ответ написан
    Комментировать
  • Почему перестала работать смена ttl на макбуке для мтс?

    EHOTnOTACKYH
    @EHOTnOTACKYH
    Подтверждаю, проблема в ipv6. Если кто-то знает, как поменять там значение hop limit, подскажите. Задаю в sysctl.conf значение net.inet6.ip6.hlim=65, при проверке значения в терминале выдается 65, но при пинге локалхоста оно внезапно меняется на 64.

    По вопросу, что делать с МТС. Очевидно, нужно отключить ipv6 на МакБуке. Если раздаете интернет через Wi-Fi, то в настройках системы на МакБуке выбираете "Сеть" >"Wi-Fi" > "дополнительно" > вкладка TCP/IP, в "Конфигурация IPv6" выбираете "Выключить". Если пункта "выключить" нет (у меня не было), то вбиваете в терминале следующую строчку:

    networksetup -setv6off Wi-Fi

    После этого IPv6 будет вырублен и МТС перестанет видеть, что вы раздаете интернет на МакБук. Если раздаете через кабель или блютус, то отключать ipv6 нужно для того способа, которым вы раздаете интернет.
    Ответ написан
    6 комментариев
  • Почему после проброса 80 и 443 порта nginx не видит переменной server_name?

    @Reversaidx
    Проще сделать по другому, направить весь трафик на Nginx(одного из серверов), дальше по имени домена пропроквировать на другой Nginx
    server {
    listen 80 443;
    server_name proxy_domain;
    location / {
    access_log off;
    proxy_pass IP
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
    }
    }
    И соотвественно другой конфиг для другого домена, т.к при текущем перенаправлении не понятно что именно доходит до сервера, а моём случае все запустится зп 5 минут(можно не использовать третью виртуалку, а проксировать с рабочего сервера на новый сервер конкретно для домена)
    Ответ написан
    1 комментарий
  • Как проверить попадание координат?

    @Serjio-Grig Автор вопроса
    Тот самый никто (=
    Проблема решена.
    (Bx - Ax) * (Py - Ay) - (By - Ay) * (Px - Ax)

    - наша точка, Px - latitude, Py - longitude
    A - один из углов, xy соответственно
    B - противоположный A угол.

    Отрицательное значение: попадает
    Положительное: не попадает
    Ответ написан
    Комментировать
  • Как провайдеры интернета ограничиваю скорость доступа?

    vvpoloskin
    @vvpoloskin Куратор тега Компьютерные сети
    Инженер связи
    Сеть оператора ШПД в общем случае довольно простая, по крайней мере по сравнению с мобильными, спутниковыми и магистральными сетями, она состоит из множества коммутаторов, одного маршрутизатора и биллинга. Фактически это большая сеть доступа. Маршрутизатор здесь называется BRAS (ну или dslam если мы о adsl). Так вот конкретно для pppoe на клиентской стороне создается так называемый туннельный интерфейс, и на стороне BRAS аналогичный при успешном подключении абонента. На BRAS на этом туннельном интерфейсе и вешается ограничение. Сами данные по ограничению услуги BRAS берет из биллинга при создании подключения (взаимодействует с ним по RADIUS/TACACS или даже DIAMETER).

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

    И да, PPPoE уже давно несовременная технология авторизации, сейчас все стараются переходить (и успешно переходят) на IPoE. Но это уже совсем другая история.
    Ответ написан
    Комментировать
  • Как написать REST/RESTful приложение для связки в дальнейшем с Angular 5?

    zo0m
    @zo0m
    full stack developer
    Самый лучший способ - воспользоваться Сваггером. Описать свой API в редакторе ( https://editor.swagger.io ), а потом сгенерировать готовый код nodejs "Generate Server"->"nodejs-server"

    На выходе получите работающее API, только данные будут тестовые. Открываете сгенерированный код, и цепляете свою логику. Рекомендую саму логику вынести в отдельный файл, и из сгенерированного просто прокинуть вызовы. Тогда, когда вам понадобится изменить/дополнить API вы меняете конфигураци в редакторе сваггера и генерите заново стабу для сервера.
    Ответ написан
    Комментировать