Ответы пользователя по тегу Python
  • Почему перестал компилироваться exeшник в Pyinstaller?

    @rPman
    3579 INFO: Appending archive to EXE C:\Users\sergey\desktop\dist\stars.exe
    3591 INFO: Building EXE from EXE-00.toc completed successfully.
    в конце оно пишет что все ок собралось, может не там ищешь exe?
    Ответ написан
  • Почему возникает ошибка при запуске файла exe Python через excel?

    @rPman
    Твой скрипт на питоне умеет запускаться с любым текущим каталогом?

    Может в коде запуска не указан текущий каталог, и используется тот, что последним использовался в excel (когда вызывается диалог открытия файла на сколько я знаю меняется текущий каталог)?

    Установи его перед вызовом с помощью WScriptShell.CurrentDirectory = "....."
    Ответ написан
    8 комментариев
  • Чтение excel файла в облаке?

    @rPman
    По твоей ссылке не выдается excel файл, а html страничка с авторизацией.

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

    p.s. ищи webdav доступ к файлам, на сколько я знаю у того же яндекс он есть
    еще лучше - используй amazon s3 или аналоги
    ну или идеальней (дешевле) всего, подними свой сервер и раздавай по своим протоколам и правилам
    Ответ написан
    Комментировать
  • Могу ли я загружать файлы на торрент с помощью Python?

    @rPman
    python биндинги для libtorrent идут в поставке почти с любой современной linux, например в ubuntu - python3-libtorrent, так же есть в pipy (для установки через pip)

    первый же пример из гугла
    Ответ написан
    Комментировать
  • Стоит отправлять запросы с ssl в Binance?

    @rPman
    Если отключаешь ssl контроль, значит допускаешь возможность атаки mitm (провайдер или публичный wifi), но так как api binance содержит дополнительное поле с цифровой подписью на основе секретного ключа, навредить тут возможности не будет (при подмене запроса binance его не примет и выдаст ошибку), максимум подсмотреть, какие операции выполняются
    Ответ написан
    Комментировать
  • Как сделать одну функцию для всех классов?

    @rPman
    Я не буду сейчас про конкретный пример говорить, и скажу в общем
    одну и туже функцию, но с небольшим отличием

    универсальное решение - метапрограммирование

    Это часто считается говнокодингом, в других языках типа c++ или c# есть препроцессор, простой язык шаблонизатор, игнорирующий частично или полностью синтаксические особенности базового языка

    Код функции разбивается на части, подобные в разных экземплярах этих функций, а различия вносятся через параметры функций препроцессора.

    В данном случае различия в имени класса, в прокси-вызове super и строки определяющей published_on, соответственно все остальное в функции можно определить в макросе препроцессора и сгенерировать код нужное количество раз, вызвав этот макрос.

    Лично я когда мне нужно в метапрограммирование, (использую не смейтесь php) добавив вызов своей утилиты в сборку , но ничто не мешает взять готовое, первый же гуглеж выдает filepp или gpp (сишный синтаксис макросов)

    недостатки подхода - исходные файлы до макро могут не поддерживаться IDE и редакторами, сломанный контроль синтаксиса и сложнопонятные сообщения об ошибках могут отпугнуть
    Ответ написан
    Комментировать
  • Как сделать что-то если наступил следующий день/неделя/месяц/год на 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
    Ответ написан
    Комментировать