@ru_python

Страница 5767 из 9768
[̲̅i̲̅t̲̅j̲̅u̲̅n̲̅k̲̅y̲̅] ࢧ кибер-даос
28.06.2018
05:57:55
Тут надо подробнее кейсы рассмотреть

Alexander
28.06.2018
05:58:08
Тут надо подробнее кейсы рассмотреть
нужные кейсы вписаны в коде

[̲̅i̲̅t̲̅j̲̅u̲̅n̲̅k̲̅y̲̅] ࢧ кибер-даос
28.06.2018
05:58:09
Но регулярки и правда выглядят прямо тем что надо

Aragaer
28.06.2018
05:58:51
но почему-то если именно так пытаться делать, чот не получается. Косячу?

Google
[̲̅i̲̅t̲̅j̲̅u̲̅n̲̅k̲̅y̲̅] ࢧ кибер-даос
28.06.2018
05:58:56
Кстати, а у тебя матчит нормальнг? А то массив байт и массив чисел это не одно и тоже

Aragaer
28.06.2018
05:59:44
re.match(bytes([32]), bytes([31,32,33,34])) - тут не мачит

хм

а, я тупой

Митяй
28.06.2018
06:01:21
Вышел долгожданный Python 3.7.0. Из новинок: - встроенная функция breakpoint - Data Classes - словари теперь хранят порядок при добавлении ключей (прощай, OrderedDict) и т.д. Более подробный список изменений можно посмотреть по ссылке — https://www.python.org/downloads/release/python-370/

Aragaer
28.06.2018
06:01:37
>>> re.search(bytes([32]), bytes([31,32,33,34])) <_sre.SRE_Match object; span=(1, 2), match=b' '>

крч я привык, что в перле матч это "где угодно", а в питоне это search

ну только да, для байтов надо писать регулярки вида b'\x01{3}.\x02{3}'

>>> r = bytes(ord('.') if x is None else x for x in pattern) >>> re.search(r, packet) <_sre.SRE_Match object; span=(0, 7), match=b'\x01\x01\x01\x02\x03\x03\x03'> >>> re.search(r, packet2) <_sre.SRE_Match object; span=(0, 7), match=b'\x01\x01\x01\x05\x03\x03\x03'> >>> re.search(r, packet3) <ничего>

ну то есть надо более разумно сделать там из-за спецсимволов разных, но вот

Belegnar
28.06.2018
06:06:33
Aragaer
28.06.2018
06:09:48
Кому-нибудь попадалась адекватная imap либа с поддержкой idle? Потому что встроенная imaplib не умеет, а найденная мной imaplib2 не особо адекватная

хм. Нашел aioimaplib

Google
Иван
28.06.2018
06:14:53
aioimapllib далеко ещё не готова для промышленного использования...

Aragaer
28.06.2018
06:16:07
его надо заменять на \.

ну и всякие там квантификаторы тоже

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

поэтому вот так "генерить" регекспы не стоит, лучше пиши их руками

Pavel
28.06.2018
06:32:02
b'pattern' in b'packet' а сколько байтов может быть лишними внутри паттерна?

Aragaer
28.06.2018
06:32:42
нет, там паттерны могут быть с "пропусками" - вайлдкардами

Alexander
28.06.2018
06:32:52
b'pattern' in b'packet' а сколько байтов может быть лишними внутри паттерна?
хз. Разное количество в разных местах. Во всех случаях количество и места заданы чётко.

Pavel
28.06.2018
06:33:32
Alexander
28.06.2018
06:34:14
то есть можно из пакета тупо вырезать ненужные байты?
нельзя. Нужно определить что пакет соответствует заданному паттерну и всё

Pavel
28.06.2018
06:34:54
ты же сам говоришь, что позиции лишних байтов заведомо известны.

Aragaer
28.06.2018
06:35:04
ну на самом деле можно просто сэмулировать работу машины регулярных выражений

если требуется только два варианта - "конкретный байт" и "любой байт"

взять паттерн, разбить его на сегменты конкретный-любой-конкретный-любой

через find находится первое вхождение первого конкретного, далее последовательно проверяется полный матч

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

Pavel
28.06.2018
06:39:39
pattern = 'abc' packet = 'a_____b____c' такое должно матчиться?

Aragaer
28.06.2018
06:39:50
нет

если паттерн abc, то матчится только когда они строго подряд

Google
Pavel
28.06.2018
06:40:12
тогда я ничего не понял про пропуски байтов.

Aragaer
28.06.2018
06:41:07
потому что может быть паттерн ['a', 'b', None, 'c']

Alexander
28.06.2018
06:41:35
ты же сам говоришь, что позиции лишних байтов заведомо известны.
я сомневаюсь, что выпиливание этих лишних байтов с последующим простым сравнением частей, будет эффективней/быстрее лобового цикла

Aragaer
28.06.2018
06:41:44
которому соответствует b'abdc'

Pavel
28.06.2018
06:41:55
потому что может быть паттерн ['a', 'b', None, 'c']
опппа, оказывается я не правильно задачу прочитал. Прошу прощения.

Alexander
28.06.2018
06:55:53
по мотивам. с конвертацией в регексп https://ideone.com/iJFYqD конвертация корявенько вышла

@aragaer спасибо за наводку

Konstantin
28.06.2018
06:57:20
Скрипт питона, не подключается к прокси

В чем трабла

Khrystyna
28.06.2018
06:58:37
Все привет. Ищу ментора в изучение Python на платной основе. Кого заинтересовало предложение ображайтесь, буду очень благодарна

Aragaer
28.06.2018
07:01:15
какой бюджет и какой уровень?

собственно ^ в начале означает, что ты ищешь паттерн только в самом начале пакета и все.

но re.match тоже ищет только в начале - тебе нужен re.search и без ^

Alexander
28.06.2018
07:05:29
мне и надо только вначале

Айдар
28.06.2018
07:08:39
OSError: [Errno 101] Network is unreachable Как исправить?

Andy
28.06.2018
07:09:19
нет доступа, написано же

Aragaer
28.06.2018
07:09:38
ох, ну тогда же все значительно проще

Google
Aragaer
28.06.2018
07:13:50
если просто в начале, то действительно разумнее просто пойти циклом по блокам конкретный-none-конкретный

Aragaer
28.06.2018
07:18:59
ну... машина регекспов вполне может быть написана на си, так что ты компилируешь регексп и отдаешь в нативный код

но реально скорость зависит только от длины паттерна в этом случае

Alexander
28.06.2018
07:23:59
с регекспом болееменее понятно. Быстрее можно сделать только если самому замутить на Це под конкретные паттерны. Хочется проверить своё предположение что перебор в лоб, циклом, очень существенно медленнее. Наверное самое простое, сгенерить миллион другой пакетов и измерить время обработки ...

Aragaer
28.06.2018
07:24:48
еще раз - длина пакета не роляет, если ты ищешь только в начале пакета

я думаю, что достаточно быстро можно делать такое: >>> pattern=[1,2,3,None,4,5,6] >>> packet=bytes([1,2,3,4,5,6]) >>> all(p is None or x==p for p, x in zip(pattern, packet)) False >>> packet2=bytes([1,2,3,4,4,5,6]) >>> all(p is None or x==p for p, x in zip(pattern, packet2)) True

Vitaliy
28.06.2018
07:36:58
/me

/me

Bogdan (SirEdvin)
28.06.2018
07:40:00
/them

Vladimir
28.06.2018
07:43:33
Cоздаю пачку корутин через: loop.create_connection(lambda: ClientProtocol(loop, ip, port), потом запускаю через loop_res.run_until_complete(asyncio.gather(*coros)) , далее self.loop_res.run_forever(). Вопрос как в этот же loop добавить ещё таких коннектов? пытался так же создать и запустить run_until_complete , ругается что loop уже запущен

Aragaer
28.06.2018
07:44:47
когда луп запущен, то ensure_future (или конструктор Task) сразу же запускают

собственно твое run_until_complete(asyncio.gather) оно не особо надо, сразу можно run_forever

да, когда не запущен, то ensure_future ставит в очередь. Выполняться начнет, когда будет запущен

Nikolay
28.06.2018
07:51:42
Alexander
28.06.2018
07:54:48
а что за пакеты?
От самодельных железок.

Roman
28.06.2018
07:57:48
От самодельных железок.
и никаких фиксированных смещений там нет, искать надо по всему payload?

Aragaer
28.06.2018
07:58:17
только в начале, уже выяснили

Google
Alexander
28.06.2018
07:58:46
и никаких фиксированных смещений там нет, искать надо по всему payload?
Искать не надо, только начало надо проверять. Задача уже решена.

Даня
28.06.2018
08:05:15
Подскажите, есть ли какой-то шорткат для документирующих комментариев. (не знаю, как их правильно назвать) Которые """ stuff here """

Aragaer
28.06.2018
08:05:32
эм

любая строчка же сгодится

def my_func(): "hello, world" return 42

""" """ и ''' ''' это просто многострочные строковые литералы

Vladimir
28.06.2018
08:07:11
собственно твое run_until_complete(asyncio.gather) оно не особо надо, сразу можно run_forever
без это подключения не стартуют. Брал пример отсюда https://docs.python.org/3/library/asyncio-protocol.html#tcp-echo-client-protocol

Даня
28.06.2018
08:07:23
Ну да, я про шорткат для многостроковых

Vladimir
28.06.2018
08:07:33
Ещё проблема в том что надо добавить в луп из другого потока.

Aragaer
28.06.2018
08:07:49
а три раза нажать кавычку, набрать текст и еще три раза нажать кавычку это сильно трудно?

Страница 5767 из 9768