
Pavel
11.07.2016
23:05:17
только там (было по-крайней мере с год назад) всё сложно без вот такой обёртки:
def get(cls, host, community, *oids):
cmd = cmdgen.CommandGenerator()
errorIndication, errorStatus, errorIndex, varBindTable = cmd.getCmd(cmdgen.CommunityData(community),
cmdgen.UdpTransportTarget((host, 161)),
*oids)
rc = []
print(varBindTable)
for name, val in varBindTable:
if type(val) is OctetString:
rc.append(str(val))
elif type(val) is NoSuchInstance:
rc.append('n/a')
else:
rc.append(str(type(val)))
return rc

km
11.07.2016
23:11:15
спасибо

Pavel
11.07.2016
23:21:13
обработку ошибок запилить по вкусу :)

Andrey
11.07.2016
23:26:20
type(x) is X лучше на isinstance заменить

Google

Pavel
11.07.2016
23:31:31

Тёма
12.07.2016
04:14:01
есть тут кто?

Andrey
12.07.2016
04:20:09

Тёма
12.07.2016
04:20:34
ну просто не люблю писать полотна в пустоту) вдруг все спят уже

? Snyp
12.07.2016
04:20:39
2318 сообщений непрочитанных - половину спам в данном чате, заебусь читать ?

Тёма
12.07.2016
04:20:45
короче, дело такое

Andrey
12.07.2016
04:20:59

Тёма
12.07.2016
04:21:05
что-то туплю под утро
есть алгоритм

? Snyp
12.07.2016
04:21:23

Тёма
12.07.2016
04:21:27
как его в функцию вынести?
чтобы функция кушала на вход данные из stdin (как она делает сейчас) или откуда угодно, и делала всё то что делает
вот только переменные объявленные выше должны быть глобальнее того, что происходит внутри функции

Andrey
12.07.2016
04:25:18

Google

Тёма
12.07.2016
04:25:29

Andrey
12.07.2016
04:26:22
Если уж так надо, то вынеси не в функцию, а в класс, а после вызывай функцию от строки з stdin

Тёма
12.07.2016
04:26:42
спёр его с сайта ардуино
короче на вход приходит число, он добавляет его в массив из n чисел, считает сумму, делит на n, отдает результат, а при следующей итерации меняет последнее число в массиве на новое
я просто в классы не умею(

Andrey
12.07.2016
04:30:09
class Foo:
def __init__(self):
//variables...
def func(self, str/*from stdin*/):
//algorithm

Тёма
12.07.2016
04:30:28
оо, спасибо

Andrey
12.07.2016
04:30:34
Еслb тебе надо будет куда-то передать твои переменные, то перекидывай объект и читай из него.

Тёма
12.07.2016
04:42:45
чет я не понимаю

Pavel
12.07.2016
05:13:00

Zart
12.07.2016
05:59:28
вместо 0 фор ин рендж:
readings = [0] * numReadings
выкинь нахер total -= ... total+=, поставь total = sum(readings)
readIndex+1 и иф легко меняются на readIndex = (readIndex + 1) % numReadings
за except: pass нужно отрывать яйца

Тёма
12.07.2016
06:00:28

Zart
12.07.2016
06:00:35

Тёма
12.07.2016
06:05:43
я даже понял как с такой штукой работать удобнее
сделал из нее генератор
заодно впервые попробовал разобраться с геренраторами)
вообще, мб в питоне есть какие-то инструменты для обработки потока данных?

Zart
12.07.2016
06:09:44
генераторы, итертулзы

Тёма
12.07.2016
06:09:44
библиотеки мб какие-то

Google

Zart
12.07.2016
06:10:04
вопрос изначально некорректно поставлен

Тёма
12.07.2016
06:10:26
да, я это уже понял)
но всё же, может есть какие-то интересные библиотеки на эту тему?

Zart
12.07.2016
06:10:31
а то я сейчас xml.sax назову
fileinput?

Тёма
12.07.2016
06:18:09

Zart
12.07.2016
06:18:36
он очень хуев тем, что ловит что нипопадя
в частности SystemExit и KeyboardInterrupt исключения

Тёма
12.07.2016
06:18:57
ааааа

Zart
12.07.2016
06:19:27
поэтому если хочется "ловить всё", но не мешать стандартному поведению, то except Exception
но по-хорошему ловить нужно лишь минимум
в твоём коде вообще ловить достаточно лишь ValueError имхо

Тёма
12.07.2016
06:20:25
ага

Тёма
12.07.2016
06:20:29
поменял уже, спасибо

Zart
12.07.2016
06:20:31
и не вокруг всего и вся, а лишь вокруг int(reading)

Тёма
12.07.2016
06:21:32
стоп, да они ж и ща продолжат считаться

Zart
12.07.2016
06:22:03
ну

Тёма
12.07.2016
06:22:09
ну а это не круто ж
так что походу надо всё-таки вокруг всего и вся

Zart
12.07.2016
06:22:30
чтото я не понял о чем ты вообще

Google

Тёма
12.07.2016
06:22:37
ну смотри
pass он ж говорит иди дальше, а не выходит из итерации?
и вот если в текущем коде я поставлю try except вокруг этой строки одной, у меня ж получается readindex сдвинется на один всё равно потом

Admin
ERROR: S client not available

Zart
12.07.2016
06:23:57
try:
readings[readIndex] = int(line.strip())
except ValueError:
continue
finally:
readIndex = (readIndex + 1) % numReadings
...

Тёма
12.07.2016
06:25:17
воу, круто! про continue не знал)

Zart
12.07.2016
06:25:21
вопрос в том, хочешь ты сдвигать на следующую позицию для неудачных строк или нет
если хочешь - то в finally блок, если нет, то просто следом

Тёма
12.07.2016
06:25:39
не, не хочу как раз
да, я понял, спасибо)

Zart
12.07.2016
06:25:46
continue/break только внутри for

Тёма
12.07.2016
06:26:32
божеее, ненавижу jre, или как оно там называется
этот вечный баг на макоси
копируешь что-то, делаешь паст, а он пастит два раза

Zart
12.07.2016
06:26:34
break только на один цикл, поддержки брейка из нескольки циклов сразу в питоне нет. по крайней мере пока

Тёма
12.07.2016
06:28:15
может еще подскажешь как тут без глобальных переменных обойтись?)

Zart
12.07.2016
06:29:37
суть твоего кода в том, чтобы держать последние N замеров и отображать среднее по ним?

Тёма
12.07.2016
06:30:19

Темный
12.07.2016
06:32:28
если это ардуина, то что-то меряешь? люмены, напряжение?
или прочие датчики?

Тёма
12.07.2016
06:32:39
и мне надо чтобы оно получало инфу (сейчас из стдин, потом будет последовательный порт), и отдавало ее как генерато

Google

Темный
12.07.2016
06:32:40
к ним же идут либы

Тёма
12.07.2016
06:33:25
просто вот что мне нужно сделать в результате

Темный
12.07.2016
06:33:56
так что за датчик?

Тёма
12.07.2016
06:35:19
1. получить сигнал с IR-датчика расстояния
2. сгладить
3. сгладить сигмоидой (чтобы если значение улетит в потолок - оно ограничивалось на определенном моменте, причём плавно, короче лимитер с мягким коленом)
4. преобразовать в MIDI CC и отослать куда-нибудь

Zart
12.07.2016
06:42:32
def queue_avg(queue):
while 1:
size = len(queue)
value = yield sum(queue) / size if size > 0 else 0
queue.pop(0)
queue.append(value)
smoothing = queue_avg([0] * 10)
smoothing.send(None)
for line in sys.stdin:
try:
value = int(line.strip())
except ValueError:
continue
newavg = smoothing.send(value)
print(newavg)
т.е. у тебя есть список значений, натравливаешь на него генератор, который будет хавать поступающие значения, добавлять их к списку как к очереди и возвращать текущее среднее
при этом у тебя есть доступ к последним значениям и ты можешь этот буфер ресайзить на ходу

Aleksey
12.07.2016
06:47:30
Добрый день всем. Хочу что-нибудь open-source сделать и на гитхаб выложить. Что нибудь начального lvl'a на Django. Есть идеи какие-нибудь?)

Viktor
12.07.2016
06:51:02

Темный
12.07.2016
06:52:30

Zart
12.07.2016
06:53:25

Владимир
12.07.2016
07:47:45
вообще напрашивается класс с переменной для статистики, и какая-нибудь callback функция или класс, где статистика будет обрабатываться

Zart
12.07.2016
07:50:37
так тоже можно

Владимир
12.07.2016
07:52:15
ну учитывая, что тут к сигналу могут разные фильтры применяться, то вообще можно этот вопрос продумать
Эта группа больше не существует