Задать вопрос
Ответы пользователя по тегу Python
  • Как сделать что-то если наступил следующий день/неделя/месяц/год на Python?

    @rPman
    добавь к текущей дате сутки (затем возьми и получившейся даты день месяца и сравни с текущим днем месяца, если они равны, то добавь еще одну секунду, это для обслуживания лишних секунд), затем создай новую дату из дня месяца и года получившейся переменной, получишь время требуемого события.

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

    Не советую использовать один большой слип, надо бы такой протестировать на граничных ситуациях (в момент корректировки времени на машине от сервера времени), а раздели интервал на несколько, чем больше время ожидания, тем больше должен быть слип, а когда останется несколько секунд, то слипы можно сделать короткими (чем ближе к нужному моменту тем короче ожидание, это определит погрешность срабатывания)
    Ответ написан
    Комментировать
  • Откуда получать графики криптовалют в виде картинки?

    @rPman
    Все биржи криптовалют предоставляют публичный api (если какая то не предоставляет, значит это не биржа а просто обменник или скам), но почти все сильно лимитируют получение исторических данных, поэтому либо сам дособирай несколькими запросами под нужные интервалы либо ищи архивные.

    например https://www.binance.com/dapi/v1/continuousKlines?p... вернет json, массив в формате массив массивов, параметр interval задает шаг элемента (1h это часовые котировки например), подробнее формат

    по нему строй график например plotly
    Ответ написан
    1 комментарий
  • Как контролировать двух телеграм ботов одним Python процессом?

    @rPman
    Покопался в исходниках
    в них все что нужно подготовлено для нормальной асинхронщины, но собственно главный метод обработки не вывернут на изнанку, чтобы можно было сделать что то типа:
    bot1 = telebot.AsyncTeleBot(API_TOKEN1, threaded=False)
    bot2 = telebot.AsyncTeleBot(API_TOKEN2, threaded=False)
    ...
    loop = asyncio.get_event_loop()
    loop.create_task(bot1.pooling_step())
    loop.create_task(bot2.pooling_step())
    loop.run_forever()

    смотри код метода _process_polling, и создай свой pooling_step только в нем должно быть только что что в оригинальном внутри цикла while, что то типа
    if updates:
                        self.offset = updates[-1].update_id + 1
                        self._loop_create_task(self.process_new_updates(updates)) # Seperate task for processing updates
                    if interval: await asyncio.sleep(interval)

    непонятно почему создатели библиотеки это не сделали сами, возможно еще не успели или я не правильно понял их код?
    Ответ написан
    Комментировать
  • Как сильно нагрузить интернет сеть?

    @rPman
    Нужно определиться, до куда именно нужно грузить сеть, так как предельные значения нагрузки и результат могут от этого сильно зависеть. Например если загружать только локальную сеть, не затрагивая даже роутер (точнее его фаервол и NAT) то может потребоваться передавать много данных
    Если работать с сервером сразу за роутером (например в датацентре провайдера интернета), то можно легко перегрузить свое оборудование - свой роутер (пинги упадут или даже связь нарушится), но при этом никак не затронуть инфраструктуру провайдера.
    И наиболее точно - разместить сервер, до которого будет идти подключения, прямо у провайдера, где размещена игра, вырожденный случай, возможно хватит у промежуточного провайдера.

    Еще, есть 2 направления нагрузки в зависимости от выбора можно получить желаемый результат или нет
    1. нагрузка на ширину канала, начинаешь прием и передачу большого объема данных, в правильно настроенных сетях провайдера это может даже не повлиять на работу игр, чей трафик может быть выделен и приоритизирован.
    2. нагрузка на процессор промежуточных машин и его алгоритмы QOS, открываешь большое количество соединений, шлешь данные, маленькими порциями но часто и много, точнее можно даже непрерывно открывать их и закрывать. Самый легкий способ подвесить свой роутер.

    p.s. за такой ddos провайдер по головке не погладит, в договоре кстати про это могут быть соответствующие пункты, сначала твою машину просто отключат от сети до выяснения, потом могут и наказать.

    p.p.s. на практике, самое простое - запустить загрузку торент файла по больше, в настройках соединений торент указать побольше, 200-300, но некоторые современные провайдеры детектируют такую нагрузку и обнуляют ее
    Ответ написан
    Комментировать
  • Почему json.load считает текстовое представление цифр валидным json?

    @rPman
    по стандарту, json это константа в формате javascript, под которые попадают просто числа
    value = false / null / true / object / array / number / string


    на практике, передавать только число почти бессмысленно (хотя для строк можно найти задачу), поэтому все что не имеет формата object или array можно не считать json (не советую завязывать в своей программе формат через тип передаваемых данных, лучше делай его строже)

    чтобы это определить, не обязательно парсить json (хотя это просто и современные парсеры жуть какие быстрые), достаточно проверить первый не пустой символ строки на '[' или '{'
    Ответ написан
    Комментировать
  • Как принять поступающий POST запрос на мой сервер?

    @rPman
    Тебе нужен веб сервер с поддержкой серверных скриптов (active pages в терминологии майкрософта), скорее всего cgi, на запрос запускается консольное приложение, post данные идут в stdin, параметры запроса в переменных окружения, вывод stdout

    в вопросе указан python, как вариант можно поднять веб сервер на самом python http.server, обработка запросов в классе SimpleHTTPRequestHandler метод do_POST()
    Ответ написан
    Комментировать
  • Есть ли способ наглядно для сайта навести курсор Selenium?

    @rPman
    Смотри action.moveToElement
    как к точке обсуждали тут
    Ответ написан
    Комментировать
  • Flask после запуска кода, сайт не изменяется. Почему?

    @rPman
    это инвалдидация кеша на клиентской стороне, и то большая беда идеологическая (не баг а фича)
    в браузере нажать ctrl+f5 чтобы принудительно обновить данные в кеше

    на будущее, как одно из решений, все ссылки статичные файлы делать с номером их версии (или к примеру хеш)
    https://example.org/main.css?ver=1
    или

    https://example.org/main.7f1acc2b.css
    где 7f1acc2b какой-нибудь хеш содержимого файла (главное чтобы менялся при его изменении)
    соответственно пере публикацией файлы нужно переименовывать, включая ссылки на них
    Ответ написан
    Комментировать
  • Почему логи переписывают друг друга в многопоточном использовании?

    @rPman
    странно, питоновский логгер flush-ит каждую запись
    возможно проблема с ротацией логов, она не рассчитана на многопользовательскую запись

    Для многопоточных логов лучше какой то сервер поднимать и по сокетам ему слать логи. Ротацию должен делать кто то один.
    Ответ написан
  • Как обработать ошибку SQLlite?

    @rPman
    при обновлении тебе должны вернуть количество измененных записей cursor.rowcount, так что смотри и да, 0 - это не ошибка.
    Ответ написан
    Комментировать
  • Как ограничить получение данных через WebSocket?

    @rPman
    поставить между сервером и вами прослойку, которая будет фильтровать поток данных, либо смотреть. умеет ли сервер как это лимитировать
    Ответ написан
    Комментировать
  • Перечень всех суперметодов класса?

    @rPman
    dir?
    проверить является ли объект функцией - callable
    Ответ написан
    Комментировать
  • Можно ли отследить заходил ли человек в определённую папку?

    @rPman
    Понятие вошёл в папку расплывчатое, я ещё не спросил про ОС, а ведь есть куча приложений, позволяющих 'лазить по папкам'

    Есть простой но не красивый способ, в windows файловая система ntfs позволяет сохранять у файлов и папок время последнего их чтения (есть соответствующий ключ в реестре, рекомендуют отключать, чтобы система не тратила на это ресурсы диска, по умолчанию включено)
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem] value name NtfsDisableLastAccessUpdate to DWORD значение 0 или 1

    и.е. из питона можешь периодически опрашивать время последнего доступа к каталогу и при его изменении реагировать.
    os.path.getatime(path)


    Это время меняется на любой доступ к файлу или каталогу, включая к примеру поиск или индексирование
    Ответ написан
    Комментировать
  • Как передать переменные/аргументы из python в dll? И можно ли это осуществить?

    @rPman
    Тебе нужно написать прослойку, небольшой модуль питона на с или с++ (да собственно на чем угодно компилируемом, но документация вся для си), в котором подключаешь свою libview или что тебе там надо и делаешь нужные вызовы, с предварительной конвертацией типов данных

    https://habr.com/ru/post/466499/
    Ответ написан
    4 комментария
  • Как сделать, чтобы телеграм-бот не отвечал на групповые фото?

    @rPman
    Запоминай время последнего фото, и если текущее время и предыдущее отличаются меньше чем на секунду, все пропускать и не слать сообщение
    Ответ написан
    Комментировать
  • Как писать содержимое stdout в переменную, не дожидаясь когда будет выведен символ новой строки?

    @rPman
    Потому что читаешь с помощью .readline() которая по определению ждет символ '\n'
    Хочешь другой символ, используй просто read и сам сканируй буфер на наличие \r и собирай строку

    как вариант, подмени вывод чем-нибудь, используя пайпы, например tr, а чтобы он не буферизировал вывод, добавь stdbuf -o0, обсуждалось тут
    ffmpeg -i input.mov output.webm 2>&1 | stdbuf -o0 tr '\r' '\n'
    Ответ написан
    Комментировать
  • Как скомпилировать 1 пайтон файл?

    @rPman
    Есть устаревшие компиляторы/трансляторы, и совместимость с библиотеками под вопросом.
    Наиболее близкий к получению именно бинарного кода наверное Nuitka, он транслирует код питон в си, а его уже можно скомпилировать.
    upd. он же и компилирует, только что проверил, прикольно сделали, hello world .exe - 500кб но это именно код а не завернутый архив с питоном
    Ответ написан
    Комментировать
  • Как в базе данных SQLite3 к столбцу добавить autoincrement?

    @rPman
    можно написать триггер на добавление новой записи, чтобы обновлял нужное тебе поле сделав что то типа select max+1

    p.s. для идентификаторов это плохая практика, не смешивай идентификацию и порядковый номер, особенно если данные могут удаляться, как только ты начнешь ссылаться на записи извне по идентификатору, то у тебя начнутся конфликты

    p.p.s. а если ты удаляешь 'из середины' твоей последовательности, а потом добавляешь новую, ты хочешь получить новое значение или освободившееся старое?
    Ответ написан
    Комментировать
  • Как подружить майнкрафт и python? Действия на стороне клиента? Взаимодействие с игрой напрямую?

    @rPman
    https://www.instructables.com/Python-coding-for-Mi...

    p.s. лучше написать мод к майнкрафту, пишут его на java, популярный фреймворк - minecraft forge, до него модифицировали код напрямую, подменой файлов после их декомпиляции.
    Ответ написан
    Комментировать