24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы: https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации https://dumpz.org/ - можно постить листинги, не требует регистрации https://pastebin.com/ - для листингов, регистрация не обязательна https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
Вопросы-ответы: — А стоит ли читать Лутца, том номер N? Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х? Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать? Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом? Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4[РАСКРЫТЬ]
— А как учить джангу? Нахожу только книги по джанге 1.х У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Как можно без лишней возни ускорить программу на питоне 1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь. 2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
>>1787217 (OP) Я хер знает куда вопрос задать, бываю тут раз в год, поэтому наверное спрошу тут. Кто нибудь вообще ебался с РеКапчей? Я пишу бота на Питоне для одной веб-игрухи, и столкнулся с тем, что меня обоссала обычная Рекапча.
Про сервисы для решения капч со своим апи я знаю, но мне захотелось написать на питоне собственный ReCaptcha виджет, в котором я смогу искать автобусы, то бишь аналог JS виджета для капчи от гугла, но на питоне.
Если с /anchor ещё понятно, там находится ключ нужный для /reload, то с /reload и /userverify не понятно, что именно туда нужно слать Как я понял, в /reload передаются какие то данные о странице, что бы таким образом вычислять ботов. Что именно туда идёт? Можно ли это реализовать самому?
Так же не совсем понятно, что ещё должно идти в /userverify, так как именно он возвращается g-recaptcha-response, нужный что бы послать капчу нахуй. На пикрил мой результат исследования аргументов этого апи, что такое response и остальные аргументы помеченные '?' я так и не понял.
Буду дичайше благодарен, если скините какие нибудь статьи с разбором этой злоебучей капчи, и может ещё какого полезного материала, что бы реализовать свой рекапча v2 клиент на питоне.
>>1787259 Лучше не лезь туда без опыта, соснешь. Сама рекапча это виртуальная машина, там какая-то хуйня крутится. Точно проверяются мышковые ивенты и история айпи - если он слишком запален или много раз подряд решает - то будет усложняться и насыпать ещё, много перепроверок для одного решения и т.д. Короче, наебешься знатно, а хорошего решения не получишь. Хорошее решение рекапчи - обезьянки-решатели.
Сап програмач.Ньюфаг пайтон девелоперу нужна помощь, которой он несказано будет рад и благодарен.Суть вопроса такова: Нужно написать функцию которая будет переносить строку если та превышает лимит в 40 символов.Левая часть должна быть с разбиением. Тогда, когда это возможно, каждая следующая строка должна начинаться с начала очередного слова. То есть первоначально мы получаем длину первого слова. Если эта длина свыше лимита, значит, обрезаем всередине, следующую строку начинаем с второй части слова. Если эта длина до лимита, значит, ищем тот символ, который последний до лимита, находим начало слова, частью которого является этот символ, и обрезаем от первого символа слова. Дальше повторяем это до тех пор, пока не получим самую последнюю строчку.Собственно в данный момент у меня есть вот такая часть кода, но не понимаю как ее дописать чтоб она выполняла вышеописанное задание. def format_item(left, right): content = [] while left: current = left[:left_limit] left = left[left_limit:] if left[0] == " ": content.append(current) continue words = left.split(" ") if len(words) == 1: content.append(current) continue before_last_space = " ".join(words[:-1]) content.append(before_last_space) left = left[before_last_space:]
>>1787275 >Лучше не лезь туда без опыта, соснешь. Но опыт же где то набирать надо.
>Короче, наебешься знатно, а хорошего решения не получишь. Хорошее решение рекапчи - обезьянки-решатели. Мне надо не решать её, а просто сделать РеКапча Виджет на Питоне, что бы решать её из своего приложения, а не из браузера. Видимо придётся по красноглазить недельку другую, раз уж мне единственному такая идея в голову сбрела..
>>1787468 >Там не все помогли Вот же сволочи ленивые. Сейчас мы все исправим, братиш. Вот глянь сюда https://ideone.com/tSQeUv Это заготовочка по переносу строк. Но надо чтобы ты точнее сформулировал правила переноса и что является серединой слова, потому что из тобою написанного ни черта не понятно что где обрезаем.
>>1787380 > раз уж мне единственному такая идея в голову сбрела.. Видел такую хуйню в какой-то качалке с файлопомоек, так они сделали экстеншен для браузера под рекапчу. Наверное, как раз чтобы не ебаться с жабаскриптом.
>>1787485 Ну смотри, по логике моего препода у нас есть какая-то строка.Эта функция считает количество символов, и если оно не превышает лимита то записываем полностью всю строку.Если заканчивается пробелом, то записываем до последнего пробела, а переносим уже все что после последнего пробела.В общем обрезаем по пробелу, и такого пункта как "середина слова" нет.
>>1787591 def my_func(a = None, b = None): if isinstance(a, int) and isinstance(b, str): return ab
другого варианта проверки типа нет, это Питон. Т.е. для аннотации еще можно сделать так
def my_func(a:int = None, b:str= None) -> str: return ab
Но это чисто аннотация, подсказка. Если нужна реальная проверка типа в проде, а не при unittest assert isinstance(a*b, str) == True (мог тут объебаться)
>>1787672 Мне не тип надо. Есть функция. Если её вызвать без аргумента или с аргументом "withBackUp", то она должна выполниться, делая бекап файла перед выполнением. Если же аргумент "withoutBackUp" - бекап не делать. Хочу сделать чтобы на любые другие аргументы была ошибка.
def my_func(backup = False): if not backup: print('passing') elif backup: if isinstance(backup, bool): print('proceed to backup') else: print('Umadbruh?')
my_func('gvido') my_func(True)
Я бы оставил проверку, банально для защиты функции.
>>1787688 >else: >print('Umadbruh?') Няш, ну я не такой даун, чтобы про else/if спрашивать. Мне нужно чтобы интерпретатор слал нахуй, а не printом ругаться.
>>1787901 Ну ок, правда читал в антипаттернах проблему Uber, когда была дырка в HTML шаблонах, и можно было инъекцию сделать в бэке в базу. Приложение Vue можно на NodeJS запускать вообще отдельно.
>>1787932 >Приложение Vue можно на NodeJS запускать вообще отдельно. Ну это дополнительные проблемы добавляются, а писать хуйню тоже не хочется. Тогда такую страницу не стоит клепать для резюме?
>>1787942 >Какие проблемы? Я бы спокойно бэк прописал. Представил бы все задачи как элементы в списке либо словаре, и прописал бы отдельно функции... Но все это дрочиво с фронтом. Стоит ли это все вылизывать?
>>1787946 Фронт на клиенте все отрабатывает, а тут у тебя только бэк занят. Ну и фуллстак пихон + JS курсы все с vue/react/angular. Шаблонизаторы это не про оптимизацию.
>>1787836 С таким подходом ты выучишь очень поверхностно, будешь как шаман делать обряды, не зная как оно на самом деле работает. Любой вопрос на собесе в сторону - и тоби пизда.
Аноны, поясните тупому, недавно вкатился, хочу написать одну хуйню с помощью Python Ping. Но то ли у меня с английским хуже чем я думал, то ли в основах питона я еще не совсем разобрался. Вот часть из этой ссылки под заголовком "Working with the return values". Там сказано, что ping возвращает некий респонс лист. А как его достать, чтобы дальше в рамках проги с ним работать? Переменной просто нельзя присвоить этот респонс лист. В консоли-то оно работает, но мне нужно достать собсна сами цифры пинга и потом с ними всякую хуйню творить, считать среднее за много запросов, строить графики и т.д. В гугле все в основном просто проверяют отвечает ли сервер на пинг, т.е. им тру/фолс достаточно, либо делают как-то сложно через сабпроцессы и т.д.
Сап питонач. Подскажите, есть какое-то простой способ заставить триггериться твою прогу каждую секунду на протяжении n секунд от запуска? https://stackoverflow.com/questions/3393612/run-certain-code-every-n-seconds Видел всякие такие запросы, но тут уже всякие многопоточные вещи используются из трединга, которые для двухнедельного вкатыша выглядят страшно, может есть что-то простенькое?
>>1788027 академический паттерн декоратор оборачивает и вклинивается в доступ к оборачиваемому элементу а питоновский декоратор делает все на свете, а не только враппер над функцией
>>1788040 cron или while True:. В переменной складываешь последнее время сработает через timestamp, чекаешь время и выполняешь задачи, обновляешь переменную.
>>1788030 Какая была проблема и какое решение? Никто не будет читать твои простыни же, бро. >пример Проблема: Нужно запилить пинг для пары серваков и оформить в ХМЛ репорт
Ваши варианты оптимизациисокращения кода при сохранении текущего вывода данных.Аноним25/08/20 Втр 23:05:30#62№1788086
contact_names = [] while True: print ('Enter the name of contact ' + str (len (contact_names) + 1) + ' or nothing for result.') name = input () if name != '': contact_names = contact_names + [name] continue if contact_names == []: print ('No names!') continue else: break print ('Contact names is: ', end = '') for i in range (len (contact_names)): if len (contact_names) == 1: print (contact_names [0] + '.') break print (contact_names , end = ', ') if i == len (contact_names) - 2: print (contact_names [-1] + '.') break
>>1787217 (OP) Прошу подсказать решение: есть скрипт архивирования файлов, он считывает необходимый путь, ищет необходимые файлы, а как приходит момент АРХИВИРОВАНИЯ, то все. Архивирование выполняю через os.system 7z.exe, содержание не работающей части следующее:
os.chdir(f'{path_set}') for i in все_мои_нужные_файлы os.system(f'{command}')
В command записаны все необходимые атрибуты (7z a -t7z -ssw -mx5 -r0 'zip_name' 'file_name'). Писал скрипт для использования на работе, дома все прекрасно работает, как пришел на место - вылезают ошибки error: 7zip cannot open file ... Отказано в доступе. Попробовал запустить паковку каждого файла вручную через командную строку, оно работает только в случае запуска cmd от имени администратора. Могу ли я какой-то os командой присвоить всем моим os.system запуск от имени администратора? И очень не хотелось бы каждый раз тыкать YES на каждый ее запуск, так как нужно заархивить более 2000 циклов
>>1788087 Да, на месте пользования не стоит python, поэтому запускаю через сгенереный дома exe файл, возможности просто запустить cmd от админа и ввести python my_file.py нет
>>1788097 >>1788123 >>1788150 Кек. Да я 5 день учу питон. До этого вообще не знал, что такое программирование. Просто почувствовал, что задачка должна решаться проще.
>>1788165 Это же элементарно. На борде любой может выложить говна на всеобщее обозрение и каждый мимокрок его занюхнёт. Ты просто оказался этим мимокроком.
Блядский имгур не хочет принимать мою мобилку при регистрации. Какой хостинг посоветуете, чтобы было максимальное простое api для вкатыша? мне чисто несколько картинок в проге загрузить.
если мне нужно на другой пеке запустить скрипт, где хуй знает какой питон и вообще есть ли он, и я не собираюсь делать промышленное решение, норм тема копировать туда venv и запустить батником с указанным путем до .exe? а то почитал про всякие паковщики для винды - там ебаная муть, мне пока лень разбираться
>>1788451 Powershell не для запуска скрипта из окружения. Просто берешь и без задней мысли переписываешь скрипт на powershell. И ни питон, ни окружение не нужны.
декоратор питона не про оборачивание. Он волен делать все что угодно. И делает
немного примеров. 1 декоратор @dataclass ничего не оборачивает, а дописывает класс 2 декораторы роутеров во всяких вебфреймворках типа @router.get региструют функцию в системе роутов 3 декоратор @abstractmethod просто вешает флаг на объект метода и всё
так что питоновский декоратор не имеет ничего общего с паттерном "декоратор". Ну разве что он может создать обертку (как частный случай)
>>1788544 В общем в декоратор передается декорируемый объект и что вернет декоратор - то и попадет в пространство имен. А декоратор внутри себя может сделать что хочет и вернуть что хочет. В декоратор может уйти функция, а вернется int и будет у тебя int переменная в итоге. Бесполезно, но главное суть
Двач, помоги, есть у меня в папке файл с .мп4 расширением и я его хочу переименоать с return os.rename('.mp4', url[-10:]+'.mp4') Как мне прописать нормальное регулярное выражение в '.mp4' и не качать лишние модули. Так и не понял просто как регулярки в самом питоне работают
>>1788686 Тебе надо ренейм вызвать для всех файлов, заканчивающихся на mp4? Ренейм же вроде один файл/директорию переименовывает, нет? Мне лень смотреть. В цикле наиграй список файлов, проверь что заканчивается на mp4 через какой-нибудь endswith или регуляркой типа .*\.mp4$, потом ренейм. Либо я не понял что-то.
>>1788707 Я хочу удалять файл после переименования, просто я скачиваю его и мне нужно знать точное название из его url, поэтому я хочу просто использовать регулярнку на 1 файл, кто-нибудь может мне подсказать что мне нужно запихнуть в '.mp4', я не понимаю, ибо r'.mp4$' не работает
в реализациях Jython (java) и IronPython (С#) нет GIL потому что они созданы поверх других VM? и они уже берут потоки из их реализаций, тогда как там устроены потоки и почему GIL там нет?
>>1788901 >в реализациях Jython (java) и IronPython (С#) нет GIL потому что они созданы поверх других VM? Да, но это заброшенное говно мамонта, которое контрибьютит 2.5 компании
>>1788904 согласен, меня больше интересует краткая информация как допустим реализована многопоточность без GIL, хотя я только ща сформулировал свой вопрос который меня интересовал, пойду гуглить, хотя если кто-то бросит инфу типо таблицу сравнения мб, буду благодарен
>>1788908 >многопоточность без GIL Для начала там GC работает по иному принципу, а не по инкременту/декременту счетчика ссылок В ЖС тоже многопоточности как таковой нет, но асинхронка там тащит
>>1788956 Базовые макакские операции: работа с консолью - создание/менеджмент юзеров, обычные sql-query работа с pgadmin понимание индексов, constraints и возможно views
>>1788954 Ну немного с ванильным ЖСом знаком + на Vue с каким-нибудь Vuetify в принципе смогу сверстать сайт, просто не подумал что стоит указать к питон-скилам. >+Postgres Основное же в принципе как в MySQL кроме наворотов постгреса, но спасибо, подучу тогда еще
>>1788972 ну да. я про то что нужно указать чистое асинкиошное типа "подвержен современным веяниям", а не "люблю динозавров" потому не торнадо, но фастапи
Аноны, кто работает питон разработчиком и не фрилансит, а именно полноценно, расскажи, есть у вас техническая вышка или нет? Интересно, какой примерно % таких, насколько это требуется (можно конечно спросить в работа треде, но пограмист программисту рознь, раз уж я начал питон учить, хочется и ответ получить именно от питонистов)
>>1789076 > есть у вас техническая вышка Ну, я начал работать когда остался в компании после практики на третьем курсе. Так что тут ответить даже не знаю как, нужна не нужна вышка. По тому что я смотрел и знаю, питон самый доступный (ну, может второй после JS) для вката без вышки. Правда большинство компаний все равно страхуются, непонятно зачем, и берут только людей с вышкой. Поэтому все равно стоит внимательно следить за вакансиями, ну и потому что язык хайпует, то часто это выливается в какие-то крутые ХАКА-МАРА-ФОНО-ТОНЫ с отбором в виде череды тестовых заданий где "20 лучшим предложат работу в такой-то компании".
>>1789076 Я магистр по радиотехнике из питерского Политеха. И что? По специальности я мог лишь перекатываться в байтоебство на МК и ПЛИСинах (причем учил я по большей степени это все сам, таких пар у нас не было) Из курса универа конкретно мне помогли лишь пары товарища Синепола про сети, все остальное я учил сам
>>1789152 Ага и смотрю удаленку бэкэнда питона: flask/django. Хочешь эджи стайл - ML. Короче это как RoR, поезд ушел. Java/Go на какое-то время займет умы погонщиков. Пока не будет нормального ORM с асинхронкой остаётся только DRF и CRUD пилить. Облизнулся на GraphQL, но какая-то непонятная херня, опять же привязка только к SQLAlchemy, а там асинхронкой и не пахнет. Остаётся только надеяться и двигаться в сторону ML.
>>1789174 >SQLAlchemy, а там асинхронкой и не пахнет Ниче что в алхимии можно спокойно поставить движок вроде aiopg и будет тебе асинхронка? Ты peewee для этого не обязан накатывать
Вроде вижу, что происходит selec-запрос который вытаскивает данные из таблицы получавшейся в следствие join-a 2х таблиц: work_table и session_table, но че это за ебень с условиями and_ и or_ внутри join-a? И че за функция (array_agg) внутри select?
>>1789199 Не в обиду мейнтейнерам, но это только 1 коннектор. Если есть легаси на MySQL или просто решили использовать MariaDB/Percona, то уже все сложнее.
Суп. Я не разработчик, но появился варик послать меня нахуй на обучение питону за корпоративные бабки, но как я понимаю, всюду сейчас ебаные инфоцыгане. Подскажите, мб все-таки есть какой-то толковый онлайн-курс по питону? Мне вкатываться не надо, но освоить азы, чтобы они были структурированны - вполне помогло бы, т.к. на работе имею дело с ботом на ямле и питоне.
>>1789208 На edx бесплатные курсы же есть, знание ангельского обязательно. Тебе все равно никто про все возможные подводные камни не расскажет. Такого в принципе не может быть, сам шишки набиваешь или смотришь кто уже набил их на SO. А при чем тут yaml? Это markup language как xml/toml. Отвратительный, но его рэдхат толкает.
>>1789210 >На edx бесплатные курсы же есть, знание ангельского обязательно. Я пробовал кучу курсов уже, хуй знает, не идет без тутора. Я наверное тупой просто. >А при чем тут yaml? А вот тут не ебу, такой стек.
>>1789131 Да я собсна спрашивал не про пользу знаний из вуза, а про корку. А то я приду со своим юрфаковским бакалавриатом на собес, и меня даже спрашивать по технической части не станут, этого опасаюсь. У меня просто маленькая мухосрань, поэтому я не могу как в москве или питере ходить по миллиону собесов так сказать из спортивного интереса, и переезжать в ближайшие пару лет не варик.
Аноны, подскажите плз про модуль os, а именно про os.environ. Мой скажем так наставник посмотрел прогу, которую я по его заданию накропал и сказал, что нужно вместо вбития логина и пароля от скайпа прямо в коде (прога должна некоторые данные слать через скайп) как-то брать логин и пароль через os.environ. Чет гуглю, вроде эта хуйня вообще для другого используется, что я не понимаю?
>>1789275 upd Ну я понимаю, что можно создать переменную окружения на моем компе, и использовать ее в коде. Но тогда у других людей на компе она не запустится, и в чем тогда преимущество перед просто вбитием своих данных в код ручками? Или можно просто в отдельном файле создать словарь с логином и паролем, будет почти тот же эффект, что и от осэнвирона.
>>1789277 Преимущество в том, что пароли не сливаются при передаче исходников, в т.ч. через гитхаб и подобное. Это примерно как приватный ключ для ssh, у тебя всё работает и заебись.
>>1789314 т.е. преимуществ по сравнению с тем, что я например залью пассы в файлик, который потом на гитхаб не буду заливать и импортирую из него переменную пассворд нет?
Привет, анон. Недавно изучаю программирование, так что не пинайте. Есть такая строчка: if string == "" or string == "\n" or not string.startswith("#") and len(string.rstrip()) > 33:
Очевидно проверяет наличие пустых строк и строк длиннее 32 символов, которые не начинаются на "#". Вопрос: Как это написать не так громоздко и более читаемо?
>>1789351 Близко, но не то. Посмотри внимательнее условия: Пустая строка даёт True Строка длиннее 32 символов И не начинающаяся с # даёт True Строка длиннее 32 символов И начинающаяся с # даёт False Твоё регулярное выражение в последних двух случаях выдаст True.
Объясните еще ньюфагу, что за ебанина. Я же явно использую модуль os, почему импорт горит серым, как-будто не использую, и когда жму контрол-альт-о, которое должно пофиксить импорты по пеп 8 - он такой серый импорт просто стирает
>>1789501 >>1789478 Там должно быть {1.32}, так как больше 32 нельзя. >>1789517 Так если условие не выполняется, то будет None и if None, то уже у меня там мутится всякое. Всё работает.
>>1789574 логгинг в питоне какой то базовый "все пишут в 1 файл" если нужно в больше то нужно мудрить какие то конфиги, какие то фильтры. брррр.
мне больше нравится подход NLog из шарпов где объявляешь список таргетов которые могут быть получателями логов а потом пишешь правила какие логгеры -> таргеты->(левелы)
захотел собрать все варнинги - создал таргет файловый варн.тхт и создаешь правило
>>1789650 > Те логи, что уровня WARNING, энивей попадают в дебаг. ну так создайте наследника от нужного хендлера и перегрузите метод filter где и решайте подходят ли данные записи для этого хендлера
s = set() for i in s: ....print(False) else: ....print(True) почему выводит True? и 2 вопрос: почему некоторые щитают что конструктор в питоне это __init__, а другие __new__?
>>1789744 >почему выводит True? А что он должен по-твоему выводить, если у тебя пустой сет? >Loop statements may have an else clause; it is executed when the loop terminates through exhaustion of the iterable (with for) or when the condition becomes false (with while)
>>1789589 Не совсем понял, ты же можешь создать пул хэндлеров и просто ротировать их путем оверлоада выбирая тип лога .debug, .warning и так далее. Не вариант?
Хендлер (он же таргет) просто знает как записать лог сообщение куда он там пишет. Конечно может иметь фильтр "минлевел" но он не нужен. логгеры в системе не один логгер, а именованные логгеры. Причем иерархические имена. Например "server.core", "server.api"
логгеры генерят сообщения. таргеты знают как их записать. Нужно связать первое со вторым.
И пишутся правила где я перенаправляю "сообщения от таких то логеров такого левела пусть идут в такие то таргеты" что это дает? Это дает возможность направить все или часть куда нам нужно. Например
- собрать варн и еггог со всей системы в файл error.txt (или 2 файла). Сразу зашел и видишь файл пуст и радуешься - направить сообщения с какой то подсистемы в отдельный файл. Мне удобно когда каждая подсистема в свои файлы пишет. А потом вьюер если нужно свяжет - server.api пишет в файл и левел дебаг, но я не хочу видеть server.api.internal (он дохера мусорит) - перенаправляю server.api.internal в blackhole и лог будет чище ну или для server.api.internal писать только INFO
Nlog следит за конфигом и можно это сделать без перезагрузки приложения.
когда хендлер и его уровень гвоздями прибит к логгеру - это сильно мешает
А Microsoft Visual Studio Code с питоном работает как-то не очень, да? Постоянно какие-то ошибки всплывают, подсвечиваются и проверить питонофайл можно только запустив в итоге. Лучше поменять IDE или там надо что-то допиливать в нем?
>>1789883 можно конечно использовать хак для getLogger(name) где если server.api.internal то ему хендлер который пишет в тот же файл но фильтр INFO
но это и будет то же самое. Просто выраженное в коде, а не на уровне конфига "сообщения вот от этого логгера направь отдельно вон туда учитывая минлевел" добавить звездочку и конфиг и вот и получится то, что я описываю
>>1789970 Ты можешь указать root logger. Параметр propagate
class logging.Logger propagate If this attribute evaluates to true, events logged to this logger will be passed to the handlers of higher level (ancestor) loggers, in addition to any handlers attached to this logger. Messages are passed directly to the ancestor loggers’ handlers - neither the level nor filters of the ancestor loggers in question are considered.
If this evaluates to false, logging messages are not passed to the handlers of ancestor loggers.
The constructor sets this attribute to True.
Note If you attach a handler to a logger and one or more of its ancestors, it may emit the same record multiple times. In general, you should not need to attach a handler to more than one logger - if you just attach it to the appropriate logger which is highest in the logger hierarchy, then it will see all events logged by all descendant loggers, provided that their propagate setting is left set to True. A common scenario is to attach handlers only to the root logger, and to let propagation take care of the rest.
>>1790042 ты почему то все время смотришь на уровень сообщения
А я говорю про направление потоков сообщений основанных на "кто сказал + уровень"
образно говоря есть такие подходы 1 ты заводишь несколько настроенных логгеров (с настроенными хендлерами), а в коде выбирается нужный и используется 2 Каждая подсистема "кричит от своего имени". И есть код, который слушает и разруливает кого куда писать.
В первом случае если нужно извернутся то придется писать кастомные хендлеры с фильтрацией + еще в сам код проекта лезть чтобы в каком то месте изменить вызываемое имя логгера (а иначе как его отличить от других). А во втором такой универсальный перенаправлятор уже готов, все в конфиге, код не трогаешь
>>1790050 Все, дошло. Если это был модуль A, отрази логи в файле error.log, если ошибка в модуле B, то отрази в логе b_error.log. Тогда есть резон использовать fluentd и уже на его основе правил распределять потоки логов.
>>1790050 Где-то видел на гитхабе кастомные реализации логгера. На самом деле в Питоне пакет давно уже не менялся, и асинхронка была и сразу форматирование в JSON на лету и кастомные поля. Мне кажется крупные компании какие-то писали, я как-то просто дублировал логирование путем записи в файл и в БД. Только недавно начал натыкаться на нормальные инструменты.
>>1790042 >каждый раз делать операцию по добавлению хэндлера и его удалению да нафиг надо. проще один раз сделать такой хендлер, который на основе заданных правил и имея на руках имя логгера и левел зарулит куда его нужно правилам, нежели играть в костыли с тому, что дает модуль logging с его "родительскими хендлерами)
>>1790053 >Если это был модуль A, отрази логи в файле error.log угу. образно модуль (и подмодуль и вообще что то логически свое, вплоть до "вообще каждый класс" (в шарпе именно так предлагается) имеет свой канал куда и мусорит. А далее уже разбираются
Кстати это сходно с идеей "12 чего то там" где логи срут в stdout и дальше система парсит эти логи и распределяет.
Как по мне это 2 стороны одного яйца.
в шарпе еще есть пакет диагностик, который так и построен - каждый модуль может завести свой канал, на который можно настроить слушателей. Ну и у канала флаг "слушают ли его" для перфоманса. Ну и левела нет. чай не логинг а диагностика
>fluentd и уже на его основе правил распределять потоки логов. ну это уже тонкости. главное концепт. почему то все всегда выбирают первый вариант и приходится немного, но лепит лисапеды что позволительно в пет проектах, но не в работе же
>>1790060 >почему то все всегда выбирают первый вариант это я про логгеры в разных языках. Вроде бы простая концепция с доп уровнем правил "кого куда". но такая редкость.
>>1790060 Только шарп компилируемый и для них другие требования по предоставлению информации диагностической. Та же Java напримерм начинает более полный traceback показывать и т.п.
>в работе Зависит от того, кто потом логи читает. Так уж лучше в единое хранилище ELK запихнуть, не? Главное доказать, что оверхед если и будет, то он окупаемый за счет, того что даже макака сможет прочитать информацию и понять, где началась жопа.
>>1790073 >Только шарп компилируемый это не играет роли. просто логирование это одно. а диагностика это другое. сложно понять разницу. логироание это больше про "что делали", а диагностика больше про метрики
>Зависит от того, кто потом логи читает вообще то от того кто пишет код. вот модуль питона не дает свободы. вот выше написали бери loguru. так и там та же фигня - логгеру добавляется слушатель напрямую.
>Главное доказать, что оверхед если и будет ну я не вижу проблем с файлами. все эти внешние логеры хороши, кода нужно в одном месте собирать логи отовсюду. А просто слать данные внешне когда файлов хватает...
>>1790090 я тебя не понимаю. складывать во внешний сервис да по сети еще нужно тогда, когда в этом есть смысл. Иначе это реально оверхед на ровном месте. А файлам то чего отказывать. Хотя конечно однопоточная природа питона может влиять - у нас может быть 20 воркеров процессов и какать в 1 файл затруднительно.
Ну еще может быть смысл если утебя есть инструментарий для работы с логами где то, а для файлов нужного тебе нет, а прям вот очень надо чего то там анализировать и графики строить.
>>1790113 1. можно сделать без исключения. Мне надо достать условно говоря а, но при использовании .text, подтягивается еще и b 2. сайт выдает уебанский html, и все в таком виде, ничего с этим поделать не могу
>>1790121 один раз выучить xpath и уровень свободы в парсинге вырастет в бесконечные разы. Заодно и не выгонят "он знает xpath как его выгонишь. без него ж никто не разберется"
>а вообще json рулит) Будет, когда там будут коментарии. тогда можно будет и питон выбросить. Но пока что мир иной.
>>1790126 Откуда этот xpath вообще вылез? Я помню, что это была ископаемая технология для дрочения ископаемого хмл, а теперь дохуя мода опять, но для парсинга. Из-за селениума и его тестов?
>>1790136 он никогда не был ископаемым он всегда был самым мощным языком запросов к xml (ну и конечно html)
Просто не все его знают. Или даже про него. Народ же у нас считает как - парсинг? значит регулярки. хтмл? ну значит css запросы. А xpath это сложнааааа
кстати есть еще и jsonpath но кто о нем хотя бы слышал) Народ ничем не интересуется
>>1790146 Потому что сам хмл уже давно легаси, вот и ископаемый. Не знают, потому что он был нужен только всяким энтерпразам для дрочения этого самого хмл, у них там любая хуйня на нем была, а в каких-то жабах может и до сих пор, лол.
>>1790151 >сам хмл уже давно легаси от этого html не перестал быть "приложением языка xml" (с) вики А значит xpath на нем работает. И в реальности ничего мощнее xpath и нет. регулярки сразу нах а css селекторы не имеют нужной гибкости
>>1790156 По-моему, последние версии селекторов примерно догоняют по возможностям, но ещё массово не заимплеменчены. Так что может и закопают обратно скоро, есть ли смысл учить.
>>1790160 я про то, что возможностей css селекторов можно хватать особенно учитывая селектор + немного кода но если устроить сравнение то css не сможет охватить все случаи что может xpath
а я выучил xpath и нафиг мне эти "а как в этом вашем css замудрить"
>>1790201 >>1790190 Бля, мне нужно сварганить GUI приложуху, которая бы записывала и дёргала данные из самой простой SQL базы. Вот смотрю варианты. В молодости плотно сидел на Дельфях, возвращаться не хочу.
>>1790233 а забыл, еще tkinter на это gui tcl/tk но там типо юзается для очень легковестных гуи и сама либа tkinter не в ооп стиле, может юзаться для бека matplot, но qt ща популярный
>>1790319 а зачем не venv вообще? вот допустим я пользователь. у меня в системе по дефолту 2.7 которую не выцарапать 3.6 которую не выцарапать и 3.8 которая мне нужна для выполнения моих скриптов мне изоляция нафиг не всралась, а уже зоопарк
>>1790319 >>1790325 На кой чёрт нужны эти ваши венв, если есть докер или на худой конец piploc/pythonloc? Неужели так сложно прописать алиасы python/pip на последний питон в bashrc?
>>1790429 Докер это не замена venv, а дополнение Точно также как сидеть на бэкенде и утверждать что дрочево с деплоем приложений, nginx и линуксом "для лохов", т.к. есть docker-compose
>>1790437 В том что когда тебе таки придется залезть внутрь venv по той или иной причине, ты не упадешь на спину в припадке "сложна сложна мы такого не проходили" прям как новоявленные вкатывальщики, которые утверждают что математика и алгоритмы прогеру нинужны
>>1790484 Это тебе по работе нужно так? Или ты сам для себя так пишешь, что-то на 3.5, что-то на 2.7, что-то на 3.8? Если по работе, почему ещё не используете там докер? Вряд ли же у вас там гуй какой-нибудь. И ещё вопрос, почему не обновляете питон в проекте?
>>1790492 Ох уж эти макопроблемы. > тут у меня версия либы 1.1, а в другом венве 2.1 > меньше индексировать зависимости Ну так piploc/pythonloc это тот же самый венв, только попроще, как в жс. Разве что не из коробки. Ладно, может быть и хорошо что ты привык использовать венв.
>>1790488 суть венвов не столько в разных версиях питонов, сколько в разных версиях либ к нему ( тока не отвечай нахуйя, не поймешь зачем, просто проигнорируй)
Поясните за итераторы и генераторы плз. 3 недели уже ковыряю язык, уже пытался для себя писать что-то простое, разбирался в апи, и было норм, а тут я прям пиздец тону, внимание теряется, все плывет, не могу слушать лектора/воспринимать текст почти сразу, как пытаюсь вникнуть. Это вообще сильно нужная и постоянная используемая вещь, или это просто надо иметь в виду, чтобы понимать как работает for и для общего развития, а для работы в вебе это не особо надо?
>>1790739 Алсо, я правильно понял, что list comprehension в русском зовут генератором списка, но это не имеет отношения к тому, что в целом зовется генератором, и это косяк русского языка?
>>1790669 Крайне диванное утверждение. Главная фишка докера не изоляция и ограничение ресурсов, а охуенная воспроизводимость окружений и удобство доставки на сервера.
>>1790739 Генератор это объект, у которого есть метод «высрать новое значение». Практически то же что итератор, только нет заранее готового контейнера со значениями. List comprehension не является генератором, а вот generator comprehension является. Это тот же что и list, только скобочки круглые.
>>1790747 я не параноик. просто нет четкого понимания как заполнить этот локальный пип нужными пакетами чтобы ничего лишнего и не пропустить чего чтобы потом на целевой машине не было ай?
>>1790757 Все знают докер, докер всё делает автоматически, зачем убивать время на чтение твоих наколенных ридми и делать всё руками? Или проверять очередной мейкфайл на пиздецы.
>>1790766 >Все знают докер, докер всё делает автоматически недавно ставил пипи сервер локальный сначала докер там прописывал его строку запуска сооружал а потом как пип пакет и строку запуска
>>1790763 На продакшене я настоятельно рекомендую докер. А вот локально пиплок, как по мне, удобнее венва. Ну и как напишешь requirements так и будет же.
>>1790782 слился товарищ ))) заметь. а я даже не стал использовать аргумент "а нахера мне шарить дистр своего пиписервера товарищам по команде", им сервер нужен, а не дистр
Про докер читайте о проблеме «works for me», или «у меня локально работает». Эта хуйня съела миллионы человекочасов, не дав ничего взамен. Само собой, если ты делаешь библиотеку, которую потом выложишь на pypi, докер тебе нахуй не сдался. Но если работаешь в команде бэкендеров, без этого никуда.
>>1790791 все просто прагматизм будет нужен докер - поставлю докер стоит докер - использую докер ставить целый докер ради одного пиписервера - крайне спорное решение в итоге стоит пакет, а на той машине где стоит пипи докер нахер не нужен (только память зря жрет)
я не умаляю заслуг докера но прагматизм а не "докеееер хочу докееееер"
Работаю на Flask. Пишу файлообменник рандомный. ПРи загрузке файла он рандомит путь к файлу правильный, но при попытке скачать высирает всегда одинаковый файл. В чем трабл?
>>1790795 Докер жрет с гулькин хуй. Куда проще заменять сервера, если на них требуется только докер. Композе ап и всё работает. А тут надо целый день чета там ставить настраивать. Почитай про infrastructure as a code, люди даже ресурсы в облаке описывают текстовыми файлами в терраформе. Докер примерно об этом же, описание как поставить в виде короткого текстовика, который каждый у себя может запустить и развернуть если ты ушёл в отпуск.
>>1790802 То что докер что то упрощает - не значит, что все остальные подходы разом устарели. И про "все знают докер" это враки Да и применимость тоже преувеличена. Ты можешь быть мамкин фрилансер. Можешь писать код, который не позиционируется как продукт. Можешь кодить пакеты для пипи. Да мало ли что.
>>1790815 Ну само собой, здесь есть прекрасная статья об уровнях упаковки вплоть до зашивки в хардварь https://packaging.python.org/overview/ Если люди заводят разговор про изоляцию, венвы, несовместимость питонов, то высока вероятность что им нужен докер.
>>1790815 >>1790829 да вы зоебали, нахера вы друг другу хотите доказать абсолютность чего либо, любой инструмент выбирается под задачу, хуле тут спорить, а? А?
>>1790930 Гугли black, если хочешь раз и навсегда освободить мозг от форматирования кода. Ещё почитай про феномен bikeshedding: чем проще тема, тем больше времени и внимания ей уделяется.
>>1790829 >венвы, он полезен хотя бы тем что не нужно засирать системный питон кучей пакетов, которые нужны только для проекта и одно это необходимости докера не влечет
>>1790501 >Ну так piploc/pythonloc это тот же самый венв, только попроще, как в жс. Разве что не из коробки в этом и суть. в том же пишарме поддержка венв, а пиплока аж ничуть
только начал изучать питон, прошу, помогите мне с кодом
messages_count = 10 for i in (reversed(range(2, messages_count + 1)) print ('- Анфиса, есть ли новые письма?') print ('- Непрочитанных писем:' , str(i) , '.') print ('Я прочитал одно, и их осталось' , str(i-1) , '.') print ('- Анфиса, есть ли новые письма?') print ('- Одно непрочитанное письмо.') print ('Я прочитал его. И нет больше писем!')
выдает ошибку:
Traceback (most recent call last): File "main.py", line 3 print ('- Анфиса, есть ли новые письма?') ^ SyntaxError: invalid syntax
проблема в пробелах? если да, то, как исправить ее?
Сап двач, пишу бота для вк на питоне с MySQL. Делаю недо-текстовое рпг, но не могу разобраться как сделать привязку к айдишнику. Т.е. человек командой выбирает один регион, и он за ним закрепляется в бд.
if event.object.text.lower() == "-регион Озеро Спокойное": try: cursor = connection.cursor() cursor.execute("TRUNCATE TABLE public.region") name = "Озеро Спокойное" photo = "photo--------------" cursor.execute("INSERT INTO public.region (name, photo) VALUES (%s,%s)" , (name, photo)) cursor.execute("update public.membboss set alltimedmg = alltimedmg + %s where vk_id = %s" ,(dmg,event.object.from_id)) connection.commit() vk.method("messages.send", {"peer_id": event.object.peer_id,"message":"Вы получили земли в области Лес хуёв", "attachment": "photo---------------", "random_id" : 0}) cursor.close() except (Exception) as e : print(traceback.format_exc())
>>1791235 Или процедуры или ОРМ, не надо это говно сюда тащить, пожалуйста. Объебешься в синтаксисе и у тебя весь код в тыкву превратится. И сверку строки делай через паттерны regex.
>>1790785 То есть это верзион контрол тул по сути? Можешь объяснить, что конкретно он делает, не просто он изолирует или тп. А вот, допустим ты написал код, Вася написал код. Вы его пушаете гитом в мастер, как здесь связан Докер?
>>1790738 Спасибо. У меня собес скоро вводный по реквестам\API тестам именно. Например, почему или даже зачем нам нужны параметры в методе Гет? Тоже самое для пост, какие конкретно параметры мы должны дать для Пост метод, в чем разница в таком случае?
>>1791372 Понял, короче это изолированный сервер, среда, которая настраивается как рабочая под девов куда все и синхронятся. так? >оверхеда Что такое оверхед?
>>1791386 Нет, поднимает каждый у себя, но у всех получается идентичный. >Что такое оверхед? Накладные расходы. Например, виртуализация имеет оверхед, у докера намного меньше, потому что он работает на живой системе, но изолированно от нее.
Товарищи, пытаюсь завебскраппить каталог двача для одного персонального проекта. Нужно получить конкретно каталог /b/ раздела, но дело в том, что мой скрипт не подгружает треды в каталоге. Причиной тому может быть то, что они прогружаются немного позже, чем сама страница. Вопрос в том, как сделать так, чтобы прогрузить весь контент страницы в html.
>>1791424 >Вопрос в том, как сделать так, чтобы прогрузить весь контент страницы в html. Сделать ожидание до момента, когда нужный элемент прогрузится, Селениум предоставляет такую возможность. И убери бьютифулсоуп, он нахуй не нужен
>>1791375 У двачеров видимо с логикой туговато. Истинность частного случая не несёт за собой ложности общего. > я бы за такой ответ тебе перезвонил Синдром вахтёра на максималках.
>>1791364 Пушится в гит Dockerfile, который есть набор инструкций как собрать какой-то образ. Выбрать можно даже дистрибутив, то есть работаешь ты в федоре, а на проекте принято использовать убунту. Пожалуйста, делаете всё в образе от убунты. Там и компилятор совпадёт, и cmdline утилиты, и переменные окружения, и пути куда что ставится.
Двачеры почему-то думают что венв это железная изоляция, хотя это всего лишь хак с path/pythonpath, который сработает только есть весь проект и все его зависимости написаны на чистом питоне, и у всех жёстко одинаковая версия (включая третью цифру) самого питона. Венв хороший инструмент, но если у тебя случилось так что локально работает, а на продакшене падает, то надо потестить уже в докере.
Сап двач, пишу бота для вк на Python с MySQL. Делаю недо-текстовое рпг, но не могу разобраться как сделать привязку к айдишнику. Т.е. человек командой выбирает один регион, и он за ним закрепляется в бд.
if event.object.text.lower() == "-регион озеро спокойное": try: cursor = connection.cursor() cursor.execute("TRUNCATE TABLE public.region") name = "озеро спокойное" photo = "photo--------------" cursor.execute("INSERT INTO public.region (name, photo) VALUES (%s,%s)" , (name, photo)) cursor.execute("update public.membboss set alltimedmg = alltimedmg + %s where vk_id = %s" ,(dmg,event.object.from_id)) connection.commit() vk.method("messages.send", {"peer_id": event.object.peer_id,"message":"Вы получили земли в области Лес хуёв", "attachment": "photo---------------", "random_id" : 0}) cursor.close() except (Exception) as e : print(traceback.format_exc())
Пытаюсь авторизоваться на сайте через requests, но в адресе почты @ превращается в %40. Как фиксить?
Код для примера: import requests data = {'username': 'foo@bar'} response = requests.post('http://httpbin.org/post', data=data) print(response.request.body)
>>1791452 Это называется urlencoding, это способ сериализовать структуру в поток байт. Фиксить это не нужно, так и должно быть. print(response.request.body) — смотри тут внимательно, ты реквест принтишь, то что ты отослал, а не принял в ответ.
>>1791455 > ты реквест принтишь В этом и цель. Сервер говорит, что пользователя не существует, поэтому я принтил реквест, чтобы разобраться, что не так. Через браузер с теми же данными все работает. Единственное, что отличается - %40 вместо @.
>>1791451 > человек командой выбирает один регион Вот это выражение я не понял. Команда выбирает регион? Ну так добавь поле команде. А если нужно подтянуть в селекте для игрока используй джойн или подзапрос. Вместо кода лучше схему БД запости.
>>1791462 На пике запрос через браузер. Сервер авторизовывает и возвращает токен. При таких же заголовках и теле запроса через requests авторизация не проходит и возвращается текст в utf-16 "пользователь не найден"
>>1791473 Смотри, у тебя в браузере content-type: application/json, это другой способ кодирования. Вместо параметра data нужно использовать параметр json, иначе будет content-type: application/x-www-form-urlencoded.
Ребят, есть модель книги, есть модель главы. у каждый книги есть главы и они пронумерованы 1-9999. От глав делаю форин на книги. На главной странице отображаю весь список книг, при переходе на книгу задействую DetailView и вроде бы пока все топ, но в detailview я хочу отобразить все главы связанные с книгой и это вроде как получается, но если у книги 1 есть глава 1, у книги 2 глава 1, то при переходе на главу книги 1 появляется ошибка get() returned more than one Add_chapter -- it returned 2!. Как мне дать понять джанго, что на книге 1 мне нужна глава 1, которая с ней и связана ? Если главы с юрл 2 у книги 2 нет, то она откроется в книга 1 без проблем ,без ошибок.
>>1791492 Если что-то подгружается не сразу, то смотришь ходящие запросы, оно подгружается в основном как раз в виде жсона. А то знатоки уже налетели с селениумом. Браузер скачал готовые данные, отрендерил в хтмл, а они потом обратно руками дрочат.
>>1791494 Вообще ты мне намного облегчил задачу. Я сейчас ещё осознал, что треды можно получать тоже в виде джсона. Я об этом даже не задумывался. Огромная благодарочка, анон
В функции есть набор символов, например "abca", нужно вывести все возможные значения комбинаций этих символов, но чтобы они не повторялись типа aabc, а только abca, acab и тд. Так и не дошло до меня как делать, интеврьюер сказал, что нужно было делать луп в лупе, в лупе, но я не понял все равно. Спасибо.
>>1791570 >#A = [a,b,c] #B = [a, b, c] #A B (concurrent letters are not same) = [ab, ac, ba, bc, ca, cb] = C # C B Я насобирал такую вот хуйню, но так и не понял.
>>1791579 Охуенно! Спасибо! Именно оно. Теперь как развернуть этот лист компрохенсив в нормальный, чтобы посмотреть логику? a = ['a', 'b', 'c'] b = [i+j for i in a for j in a if i !=j] - что равно этому квадратному лупу
>>1791570 У тебя это перестановки, а не комбинации. Суть в чём, ты фиксируешь один символ, убираешь его из колоды, спускаешься в рекурсию, отпускаешь символ, берёшь следующий.
>>1791637 > чтобы они не повторялись типа aabc, а только abca, acab и тд. То есть я получившиеся перестановки ещё профильтровал и оставил те что без двух одинаковых букв рядом. Не знаю нужно ли это было.
Есть книга по алгоритмам без зауми в которой не подразумевается что я должен очень хорошо знать формальную математику ? Как минимум с объяснениями этой математики и лучше что бы с Пайтоном но не обязательно. Каков положняк по данному вопросу ?
У меня задание прочекать все папки в директории, и если в ней есть файлик с .py - выписывать название папки. Почему я стакаюсь на одной папке и не перехожу в следующую с этим кодом? Если сделать просто: a = os.walk('.) print(next(a)) print(next(a)) print(next(a)) print(next(a)) ... то он нормально обходит папочки, что в моем коде всё ломает?
>>1791366 >Например, почему или даже зачем нам нужны параметры в методе Гет? У тебя не с Питоном проблемы. А с TCP/IP и сетями в целом. Читай Танненбаума и протоколы прикладного уровня (HTTP в частности)
>>1787217 (OP) Часто приходится работать одновременно с питоновским кодом и с жс-кодом, что из IDE лучше юзать? У меня стоит pycharm, там есть что-то вроде расширенной версии, она поможет? Или лучше брать другой редактор? В пайчарме просто навигация по проекту и по Гиту довольно удобная
>>1791739 При всем Не знаешь основ HTTP но лезешь в requests? Ты серьезно? Питон это прикладной язык, "обертка" для работы с более сложными сущностями, о чем может быть речь если ты не знаешь даже примерно сути этих сущностей?
>>1791689 Тебе дело говорят -> >>1791720 Почитай про модуль os и os.getcwd в частности. Не додумывай как функции работают
>>1791748 Да ты заебал. Ты на собес идешь. Тебе простительно не знать основ работы инета и http если ты хочешь быть QA-интерном, в противном случае ты будешь как шимпанзе, которую научили нажимать на 1 конкретную кнопку на клавиатуре
Я чет немного не понял или неправильно сделал. Внутри папки с проектом есть папка, а внутри текстовый файл. И через питоноскрипт этот файл открывается если путь к нему сделать "D:/проекты/пидор/test/test.txt". Можно ли как-то сделать так чтобы надо было просто указать папку внутри проекта типа "/test/test.txt" ?
>>1791848 new Как и в любом языке. Не слушай долбоебов. Спроси лучше себя "каким образом init может быть конструктором если первый же аргумент который он получает это конкретный инстанс класса"?
>>1791876 Само понятие "конструктора" в Питона весьма извращено и часто "конструктором" называют __init__ хотя конечно это нихрена не так. Де-факто init это конечно "инициализатор" В любом нормальном языке ты создаешь инстансы следующим образом:
let a = new Array(); // JS int arr[] = new int[5]; // java int fizzbuzz [5] = { }; // c++
Чет в последнее время все чаще натыкаюсь на хуйню, типа "а на линуксе еще можешь сделать так, для винды не подходит". На всяких курсах и видосах лекторы все в основном на линуксах показывают, вроде я слышал и на работе с большим шансом будет линух. Есть ли смысл накатывать на виртуалку какую-нибудь убунту и разбираться с ней, если 20 лет сидел на винде? На работе будет надо линуксом владть скорее всего?
>>1791938 >Есть ли смысл накатывать на виртуалку какую-нибудь убунту Есть смысл поставить себе второй системой линух и работать на нем Иначе про разработку забудь
>>1791961 ну из заданной строки вычисляешь производную , а потом х в том что получилось меняешь на второй аргумент функции считаешь как обычное выражение и ретернишь результат, думаю в интеренте есть какие нить онлайн калькуляторы диференциалов, можешь поискать и потыкать чтобы лучше понять
>>1791938 > накатывать на виртуалку какую-нибудь убунту и разбираться с ней Да, но не графическую. Накати серверную. Оставь графику пердолям из /s/, а сам учи основы ОС: что такое монтирование, пермишены и владение файлами, пайпы, шелл, контейнеры, компиляторы, мейкфайлы итд.
Меня всегда интересовал вопрос: как подобные существа живут? И главное: не противно ли им каждое утро видеть свое красноглазое зашкваренное ебало в зеркале?
>>1792108 Ты асинхронный код хоть раз в жизни писал/читал? А поддерживал уже написанный на проекте? я - да, за любые выкрутасы с коллбеками вместо адекватной асинхронщины ты получил бы залупой по лбу от сеньора
>>1792106 >То, что Белый Человек пишет через async/await. Что в жс, что в питоне Я думал тебе type hints и лямбды не понравились. Насчет async/await ничего сказать не могу - я мамкин дата саентист и никогда их не использовал.
>>1791738 Спасибо. Лекции по сетям я читать вроде бы не собирался. Мне бы просто в двух словах пояснить, что к чему. Ну и я не на сетевого инженера иду.
Как правильно запустить небольшого питонобота на удаленном сервере? Я кажется делаю что-то не то и когда запускаю сразу два разных через команды
python3 test1.py & python3 test2.py &
то они как-то странно работают (то ли отключаются через некоторое время то ли еще что), когда я отключаюсь от сервера. Может ли быть проблема в том, что рядом с основной выполняющейся командой в коде я писал print('что-то там, для проверки выполнения команды') ? Но если я запускаю эти скрипты по отдельности, то они работают даже после отключения от сервера
>>1792202 убери принты и попробуй если еще так не сделал, потому что сам сталкивался с проблемами при попытке запуска в фоне скриптов которые печатают в консоль
>>1792202 Потому что надо запускать демонов Гугли unix daemon и daemon python, в принципе если тебе похуй, можешь просто прочитать главу про daemonize и скопипасть код в Python Cookbook от Бизли, она там есть
>>1792202 & должен отваливаться после отключения. Чтобы не отваливался можно запустить через nohup. Или вариант с удобствами - tmux, потом можно будет подключаться обратно.
>>1792202 Эта есть проблема, скрипты прибиваются, если им некуда вывод сохранять. Не разбирался почему, у питона есть история, а у ноды, например, нет.
Ты можешь запускать как pythom3 test.p1 1> /dev/null 2>/dev/null
Это перенаправление обычного вывода(1) и вывода ошибок (2) в никуда. Тогда всё прекрасно работает. Ну или в файл сохранять.
>>1792202 Читай маны про systemd. Stdout интерпретатора можно направить в файл или же потом в journal посмотреть. Раньше советовали обертки или circus, но они банально устарели. Systemd довольно мощный инструмент.
>>1792102 >За что мы любим Никиту Соболева — только он умеет писать на Питоне так, что хочется плакать и переходить на Джаву.
Мало того что он дрочит httpx, где майнтейнера сами советовали использовать взрослый aiohttp, так ещё и плодит всякую хуйню вместо кода. Httpx обратно совместим с requests, отсюда и проблемы. Хватит пинать хуи трупы уебищных синхронных либ. Исключение zeep, пушто вариантов больше нет. SOAP нынче не модно. А так даже pysnmp легко заменяется хуяк-хуяк либой aiosnmp. Она простая, на asyncio и конечно же без yield и callback.
Работаю питонистом уже 2 года. Вышки нет. Начинал в регионе, в маленькой аутсорс-компании. Сейчас в дс, в мыле. Но недавно восстановился на заочку, чтобы таки получить корочку(будет легче заводить трактор)
>>1791938 Если пишешь сервисы, то только линукс. Если у тебя шиндоус поставь WLS2. В продакшене будет или докер или AWS. Ты же понимаешь, что хуй ты спрячешь говнокод питоновский? Обфускация на уровне контейнера уже лучше.
>>1792701 Не работал с ним сам. Местным костылем бы не назвал, потому что его покупают(b2b) версию довольно крупные конторы. Но, насколько знаю, развитие опенсорс-версии на какое-то заглохла. И только сейчас начинают его возобновлять
>>1792688 >Оба все равно подвержены GIL Епт, а ниче что асинхронкам похуй на GIL? Мультитрединг/асинхронка это в принципе разные концепции конкурентного пограмирования
>>1792960 да, из за того, что таким образом ты имортируешь все объекты из модуля у каждого из которого свой вес, в отличии от поштучного где ты импортируешь всего один объект из модуля
при импорте всегда происходит выполнения кода в модуле который импортируется разница между этими подходами только что из этого импортируемого модуля попадет в текущее пространство имен.
>>1793076 Все верно же Анон, который не прав, пишет что есть разница в потреблении памяти.
Но ее нет.
При импорте происходит такой порядок действий 1 импортируемый модуль выполняется сверху вниз 2 по результатам его выполнения появляется загруженный в память модуль с аттрибутами (функции и т.д.). И он повисает в памяти навечно - потому второй импорт не вызывает повторного выполнения модуля. 3 что то из этого модуля добавляется в твое пространство имен как ссылка.
>>1792426 Ну чо пояснять, есть стандарт, это реализация стандарта. Валидатор сам описывается жсоном. Питонячая реализация вполне качественная и расширяемая, приспособить для сваггера можно.
Пагни, как держать себя в форме в плане алгоритмов? На работе понятное дело с ними почти не встречаюсь, для интервью подтянулся, устроился на работу, вот спустя почти два года снова начал готовиться к интервью и я просто охуел насколько просели мои знания и способности решать даже элементарные вещи.
>>1792463 Если коротко, то лучше го. В целом что на твистеде, что на торнаде, что на асинкио можно делать успешные проекты. Но асинкио в последние годы развивался куда более интенсивно, и он архитектурно правильнее, не нужно манкипатчить всю стандартную библиотеку. Вроде бы ещё он быстрее, так как там оптимизировали переключения в корутинах.
> подвержены GIL Чёт орнул. Асинхронное приложение по определению не занимается суровыми вычислениями, там только перекладывание между потоками IO.
>>1792102 Этот чел очень упорот на всяких линтерах и чекерах. Ему уже кто только не говорил что надо язык менять. Но видимо жлобность галерного погонщика не даёт просто так заплатить за другой язык больше. Хочется и дёшево и красиво.
>>1793123 Хуйня. Питонов можно несколько запустить, если уж так хочется пригрузить проц. Про GIL пишут в основном клинические перфекционисты, для которых гил это такой вселенский фатальный недостаток, хотя на практике ой как сложно в него упереться, если ты занимаешься не вычислениями или играми. Тащемта даже это решается экстеншенами на си/цитоне, там можно отпускать гил, к примеру так делает numpy.
Го советую потому что он щас модный, и асинки это его киллер фича. Что-то такое, несложное, обслуживающее вебсокеты — самое оно.
Сап Подскажите в чем может быть проблема. Приложеньку на flask упаковываю в докер-контейнер. Не накатываются миграции. Использую Flask-Migrate, sqlite3
заранее создал миграции с помощью flask db init flask db migrate
В самом Dockerfile есть следующие строчки ... ENV FLASK_APP flask_app.py RUN flask db upgrade ENTRYPOINT FLASK_ENV=development flask run --host 0.0.0.0 ...
Никаких ошибок не происходит, но при этом файл базы не создается, миграции не применяются.
>>1793133 >Го советую потому что он щас модный Курсы по 18500 продаешь или дващерам скидки?
Го вообще под другие задачи был создан, как и Rust. Вернее так: были конкретные задачи, для которых не было готового инструмента или он не отвечал требованиям бизнеса. И фишка Го нихуя не горутины, а как раз таки возможность загрузить мультипроцессорную железку. Это как сказать что фишка JS это минимальный вес кода. Lua был создан под конкретные задачи, Java пилили под задачи Сириус бизнеса, Раст пилили под задачи Mozilla, Питон же сначала изрыгнули as is, потом на пике популярность вышли талмуды PEP "бля, а чо так сделали? Теперь надо переделать, вот теперь заебись". Twisted же тоже не просто так появился. Сейчас в opensource дохуя всего, что было сделано для внутреннего использования. Но бывает "первая доза бесплатно". Это просто к слову, вспомнилось что-то.
>>1793148 Смотря что для тебя игры. Киберпанк и крузис точно не на питоне. Книги согласен, скорее вводят в заблуждение, для игор надо C++ или шарп, или жабу если фанат майнкрафта. Хотя наебенить прототип можно и на питоне.
>>1793155 а что тут необычного. это в примитивных вещах пришел запрос в базусходит и выдал а если что то нужно с данными еще делать, а то и вообще бд нет, то проц занят.
>>1793156 Что сказать-то хотел? Бизнес какой-то, доза, какие-то задачи мозилла. Это какие интересно были задачи у мозиллы? Раст же пет проектом был. > возможность загрузить мультипроцессорную железку Такое можно делать на чём угодно, даже на питоне. > фишка Го нихуя не горутины А что тогда? Или давай иначе, кому нахер всрался го без горутин?
>>1793161 >Такое можно делать на чём угодно, даже на питоне мимокрок, но будем честными - на питоне не очень удобно ядра загружать не для всех задач подходит
>>1793158 > нужно с данными еще делать, а то и вообще бд нет, то проц занят Ты каким местом читал мои посты? И второе, ну понятно масштабировать вертикально из-за гил сложно, а горизонтально пробовал?
> это в примитивных вещах Как ты легко IO-bound приложения в хелловорлды записал.
>>1793148 Изучение алгоритмов, фреймворков. Просто один из возможных подходов. Дохуя чего можно написать нативно на bash/powershell и не ебать мозги ещё одним скриптовым языком. Не знаю, каждый выбирает инструмент который ему подходит. Если ты про могильную разработку лучше сразу на Котлин, JVM из коробки. Jython мертв, в roadmap даже 3.6/3.7 не маячит. Питон как и Node для легковесных решений или же ML. У других либо цирк с реализацией, либо просто нет. Возможно ли подогнать структуру кода до уровня Энтерпрайза? Как нехуй делать. Будут ли решения зависеть от 1.5 мейнтейнера - шансы очень велики.
Тебе шашечки или ехать? Java Core - 1 год, Котлин ещё один, а в Питоне за год можно что-то уже сдавать и отрефакторить. Работать будет в любом случае.
>>1793157 Я к тому, что игр на питоне не существует. 99% из существующих - это детские поделки на готовом движке для вн - ренпи. Поэтому мне интересно, нахуя такие книги пишут inb4 чтобы заработать лавандос на дебилах. Ну ведь реально, язык для этого не подходит, у него нет ни малейшей ниши в геймдеве, нет хороших примеров, нет инструментов для этого. Про майнкрафт и джаву - это не благодаря языку, а скорее вопреки.
>>1793161 >Пет проект >Software you know and love, like Firefox, Dropbox, and Cloudflare, uses Rust. Прост чуваки в свободное время пилили, портфолио на ГитХаб забивали, ага.
>>1793167 > нет хороших примеров, нет инструментов для этого Вот здесь в точечку. Ну хотя блендер есть. Книги наверное могут быть полезны для тех кто знает питон и боится крестов.
>>1793175 >И от чего такое расхождение, от того что я знаю шарп выжав из однопотока питона все я пошел в шарп и там все приятно а в питоне как я уже говорил непонятно как параллелить такой огромный список между процессами.
>сравнение одного видео и другого не. на выходе у тебя отпечатки. это строки такие длинные и нужно ну в примитивном варианте расстояния хеминга допустим да в общем не суть важно. суть в том что выдать каждому процессу весь список нельзя. мудрить какую то общую память...
ключевое слово МУДРИТЬ. Для питониста, который знает только питон, нет выхода и он считает такую еблю вприсядку необходимым злом у меня же пукан горит от того как приходится танцевать в питоне
>>1793170 > обход на питоне занимал 5 часов > проход на шарпе 4 минуты О, это очередной феномен переписали с технологии XX на технологию YY, и сразу стало хорошо. И конечно же это заслуга технологии YY, а то что мы всё переписали и заново осознали проект, этого не было.
>>1793184 > такой огромный список между процессами Есть очереди, есть раунд робин. Можешь хоть в файл написать чё кому сравнивать. Очереди на процесспулах делаются супер изи.
> ключевое слово МУДРИТЬ. Для питониста, который знает только питон, нет выхода и он считает такую еблю вприсядку необходимым злом Кек. Во всём виноват конечно же гил. Даже в том что ты не знаешь питон. Если ты так хорошо пишешь на шарпе, зачем ты начал делать это на питоне?
Этот феномен прост В шарпе нет GIL А значит нет необходимости рождать процессы А значит нет проблемы эффективно и просто шарить дааные между ними И нет проблемы эффективной коммуникации между ними
>>1793175 >И от чего такое расхождение, на чём просадка производительности у питона? У питона нет нормальной многопоточности. Чтобы использовать несколько ядер надо создавать процессы, а у каждого процесса своя виртуальная память. На линуксе питон создает новые процессы через fork и данные для чтения копировать не нужно. На винде такого нет и данные будут копироваться всегда. Вдобавок, что на винде что на линуксе по любому придется копировать назад результат. Если результат большой (например, картинка), то копирование его назад может убить всю производительность. В таком случае единственный вариант - переписывать кусок кода на крестах.
>>1793186 >Есть очереди эффективность у них слабовата чтобы решать задачу "в лоб" >Очереди на процесспулах делаются супер изи изи. но скорость не сравнить
> Если ты так хорошо пишешь на шарпе, зачем ты начал делать это на питоне? я нормально пишу на обоих. питон мой прикладной язык на нем проще решать задачи когда нужно именно решить, а не создать софт
>Во всём виноват конечно же гил. а кто еще? кто еще заставляет вместо потоков использовать процессы? Подключение файлов == просадки по скорости. Можно минимизировать чтение запись если подумать но это уже не стыкуется с "изи".
>>1793189 Зачем тебе на лету создавать и прибивать постоянно процессы?
Ты делаешь несколько процессов-воркеров и между ними распределяешь задания, и всё.
Использовать треды там, где у тебя большие задачи, тоже не самая лучшая идея обычно. Треды всё-таки для ситуаций, когда у тебя очень много мелких быстрых задач с большим количеством транзакций по обмену данными.
На воркеры в любом случае лучше переходить, так ты делаешь архитектуру, которую элементарно масштабировать на кластер. Треды ты на кластер, само собой, масштабировать не сможешь.
Я вообще не понимаю о чем спор. Понятно же, что с настоящими потоками легко и просто параллельно обрабатывать данные (и не только параллельно, а и влияя друг на друга). А с процессами приходится городить костыли, потому что это процессы. Тут даже не нужно пробовать там и там. Это очевидно
И там и там можно жить, но степень удобства различается в разы. И чем больше задача требует коммуникации между потоками, тем хуже все в процессах.
>>1793211 >Ты делаешь несколько процессов-воркеров и между ними распределяешь задания, и всё. У каждого воркера своя память. Мне, например, нужно было декодировать с огромной скоростью картинки и использовать их в основном процессе. Каждую картинку питон копировал сначала в процесс воркера, а потом назад в основной процесс, что занимало 90% времени. При использовании потоков такой хуйни бы не было.
>>1793205 Как-то мутно это всё. Уверен что ты там что-то не так делал. Ну да, трединг позволяет не копировать ничего между процессами, но это нужно в основном игроделам каким-нибудь, у которых только ну никак неделимый стейт.
>>1793233 Почему нельзя картинку взять сразу в воркере? Зачем её прогружать в мастере? Судя по всему у тебя мастер как-то агрегировал эти картинки. Мог ли воркер сделать частичную агрегацию на своей стороне, а потом отдать только результат для финального мержа?
>>1793233 > что занимало 90% времени Может у тебя там сериализация тормозила? Или мастер тупил. Ну реально, звучит как хуета что оперативка не справляется с копированием.
>>1793117 В смысле? Я делаю запрос реквеста и потом в ручную парсю джесон и делаю валидацию. Или использую готовую библиотеку. Вот и спрашиваю, какая разница?
Привет, поможете с олимпиадной задачкой? Она не из какого-то курса, просто в будущем будет полезно знать как такое решать, да и просто интересно.
Юля любит слушать музыку через интернет сервис «Тындекс Музыка». Это очень удобно — огромное количество музыкальных композиций в прямой доступности. Но вот проблема, у Юли осталось совсем немного трафика мобильного интернета, а она обязательно хочет скачать ещё одну песню на внутреннюю память телефона.
Всего в плейлисте Юли — n песен. Какие-то уже скачаны, а какие-то — ещё нет. Каждая песня характеризуется так называемой «прЕкольностью». Так вот Юля хочет скачать одну, еще не скачанную, песню из своего плейлиста так, чтобы сумма «прЕкольностей» всех скачанных песен была максимально близка к заданному её настроением целому числу k. Входные данные
Первая строка входных данных содержит два целых числа разделенных пробелом: n и k — количество песен в плейлисте и число заданное настроением Юли соответственно (1 ≤ n ≤ 1000, - 109 ≤ k ≤ 109).
Последующие n строк содержат по два целых числа, разделённых пробелом: pi — «прЕкольность» i-й песни и di — статус закачки i-й песни: 0 — не скачана, 1 — скачана ( - 1000 ≤ pi ≤ 1000, 1 ≤ i ≤ n).
Гарантируется, что хотя бы одна песня в плейлисте не скачана. Выходные данные
В единственной строке выходных данных требуется вывести два целых числа через пробел: максимально близкую к числу k сумму «прЕкольностей» скачанных песен, если скачать еще одну песню и «прЕкольность» этой скачанной песни.
Если существует несколько правильных ответов, то среди них требуется выбрать ответ с максимальной суммой «прЕкольностей». Пример Входные данные 4 1 1 0 2 0 3 0 4 1
Выходные данные 5 1
Сам я понял только то что нужно найти ту песню, среди всех не скачанных, которая при сумме качества с остальными даст наибольшее приближенное значение это можно сделать перебором, сравнить каждую сумму с каждой нескачанной песней через цикл while и найти число, которое больше предыдущих, но <=k и поставить break чтобы прервать цикл. Заранее спасибо
Предыдущий:
Литература:
https://ln2.sync.com/dl/cf2c1d070#xq4s328t-xbbjys2z-9r6j7ss7-gf4e9dv6 <-- Книжки, новое собрание
Ещё книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
Больше книжек: https://yadi.sk/d/H-00n-UG3RSQem
Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации
https://dumpz.org/ - можно постить листинги, не требует регистрации
https://pastebin.com/ - для листингов, регистрация не обязательна
https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить
https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
#######################################
ЧаВо: https://github.com/TheKnightsWhoSayNi/info/wiki/Hat Актуальность примерно 2015 года
Вопросы-ответы:
— А стоит ли читать Лутца, том номер N?
Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х?
Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать?
Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги.
МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом?
Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4[РАСКРЫТЬ]
— А как учить джангу? Нахожу только книги по джанге 1.х
У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать
Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Можно ли на питоне делать мобильные приложения?
Да, смотри на фреймворк Kivy https://en.wikipedia.org/wiki/Kivy_(framework) https://kivy.readthedocs.io но народ на него жалуется
— Как можно без лишней возни ускорить программу на питоне
1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь.
2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём
Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
https://dumpz.org/bASGKD8cCFDf