Вернуться   DreamBox Satellite Forum > Обсуждение > Dreambox DM 5xxx/7xxx/8xxx/9xxx > Developer board

Developer board Раздел для разработчиков софта

Ответ
 
Опции темы

Старый 29.01.2012, 14:24   #61
Специалист
 
Аватар для vlamo
 
vlamo вне форума
Регистрация: 01.11.2007
Сообщений: 2,321
Отправить сообщение для vlamo с помощью ICQ
По умолчанию

Цитата:
vlamo подскажите примером, как правильно сделать вывод информации и выводить в нужном порядке, а то на одном имидже так, на другом по другому немного, указал на картинках разницу в красном квадрате, то есть происходит смещение информации, значение used:%s становится значением free:%s
Здесь надо понять, как работает утилита df. А именно, что когда какое-либо поле превышает 22 символа (если не ошибаюсь, может 20), то идет переход на новую строку, чтоб сохранялся общий строй таблицы.
Поэтому, здесь могут быть два варианта решений: либо подстраиваться под df, либо самому писать программу, которая заменяет эту утилиту.

Но если вас беспокоит только, что есть только разница полей в том или ином случае, то отслеживайте эту разницу и действуйте соответственно:
Код:
	def getHddInfo(self):
		self.poll_interval = 2000
		self.poll_enabled = True
		try:
			fd = os.popen("df -h | grep /media/hdd")
			out_line = fd.readlines()
			fd.close()
		except:
			out_line = [ ]
		info = "No info"  
		for line in out_line:
			list = line.split()
			if len(list) == 6:
				info = ("hdd/ free:%s  used:%s  per:%s" % (list[3], list[2], list[4]))
			elif len(list) == 5:
				info = ("hdd/ free:%s  used:%s  per:%s" % (list[2], list[1], list[3]))
			if info != "No info":
				break
				
		return info
__________________
  • DM600PVR: Gemini 4.70, mgcamd_1.35/mpcs_16e, HDD 160GB
  • ET9200: Image: OpenPLi 3.0; oscam 1830; HDD 160GB
  Ответить с цитированием

Старый 29.01.2012, 15:01   #62
Эксперт
 
Аватар для Ligioner
 
Ligioner вне форума
Регистрация: 04.01.2010
Сообщений: 137
По умолчанию

Цитата:
Сообщение от vlamo Посмотреть сообщение
отслеживайте эту разницу и действуйте соответственно:
Код:
            if len(list) == 6:
                info = ("hdd/ free:%s  used:%s  per:%s" % (list[3], list[2], list[4]))
            elif len(list) == 5:
                info = ("hdd/ free:%s  used:%s  per:%s" % (list[2], list[1], list[3]))
            if info != "No info":
                break
                
        return info
Кинуло в зелёнку
Код:
  File "/usr/lib/enigma2/python/Components/Converter/ExtremeInfo2.py", line 216, in getText
    usbinfo = self.getUsbInfo()
AttributeError: 'ExtremeInfo2' object has no attribute 'getUsbInfo'
Код:
    .................................................
    elif (self.type == self.USBINFO):
            usbinfo = self.getUsbInfo()
            text = usbinfo
    elif (self.type == self.HDDINFO):
            hddinfo = self.getHddInfo()
            text = hddinfo
    ...............................................

Последний раз редактировалось Ligioner; 29.01.2012 в 16:10.
  Ответить с цитированием

Старый 29.01.2012, 15:18   #63
Специалист
 
Аватар для vlamo
 
vlamo вне форума
Регистрация: 01.11.2007
Сообщений: 2,321
Отправить сообщение для vlamo с помощью ICQ
По умолчанию

Обратите внимание:
Код:
  File "/usr/lib/enigma2/python/Components/Converter/ExtremeInfo2.py", line 216, in getText
    usbinfo = self.getUsbInfo()
AttributeError: 'ExtremeInfo2' object has no attribute 'getUsbInfo'
Что это значит? Это значит, что вы вызываете в модуле ExtremeInfo2.py (строка 216) функцию self.getUsbInfo(),
А такой функции с таким название (getUsbInfo) нет в этому модуле.
Очевидно, вы название оставили getHddInfo.
Пока вот такое только вижу.
__________________
  • DM600PVR: Gemini 4.70, mgcamd_1.35/mpcs_16e, HDD 160GB
  • ET9200: Image: OpenPLi 3.0; oscam 1830; HDD 160GB
  Ответить с цитированием

Старый 29.01.2012, 15:39   #64
Эксперт
 
Аватар для Ligioner
 
Ligioner вне форума
Регистрация: 04.01.2010
Сообщений: 137
По умолчанию

Цитата:
Сообщение от vlamo Посмотреть сообщение
название оставили getHddInfo.
Пока вот такое только вижу.
Выше выложил код с прописанными функциями

Всё разобрался, всё чудесно работает, вспомнил просто, что nikolasi однажды сказал, если не соблюдать табуляцию, то будет кидать в зелёнку и сразу не поймёшь в чём дело, даже если всё будет правильно
Поторопился не проверил в итоге зелень
Поправил и всё заработало

vlamo спасибо Вам за отличную идею с выбором 5 или 6
len(list) == 6:
len(list) == 5:

Последний раз редактировалось Ligioner; 29.01.2012 в 16:11.
  Ответить с цитированием

Старый 29.01.2012, 18:43   #65
Специалист
 
Аватар для vlamo
 
vlamo вне форума
Регистрация: 01.11.2007
Сообщений: 2,321
Отправить сообщение для vlamo с помощью ICQ
По умолчанию

Безусловно, табуляцию надо жестко соблюдать в Питоне.
Весь программный код и строится как-раз на этой табуляции.
__________________
  • DM600PVR: Gemini 4.70, mgcamd_1.35/mpcs_16e, HDD 160GB
  • ET9200: Image: OpenPLi 3.0; oscam 1830; HDD 160GB
  Ответить с цитированием

Старый 17.02.2012, 17:44   #66
Эксперт
 
Аватар для Ligioner
 
Ligioner вне форума
Регистрация: 04.01.2010
Сообщений: 137
По умолчанию

vlamo
Подскажите как правильно сделать вывод из ecm.info

Код:
caid: 0x4AE1
pid: 0x0021
prov: 0x000014
reader: tricolortv_sibir
from: 192.168.2.6
protocol: newcamd
hops: 0
ecm time: 0.117
cw0: 8A AB 54 89 03 95 E0 78 
cw1: 30 1F 65 B4 F3 51 87 CB
Вот к примеру вывел пид из екминфо, всё отлично показывает и выводит pid: 0x0021

Код:
def getPidInfo(self):
    self.poll_interval = 5000
    self.poll_enabled = True
    Pid_ecm = ""
    try:
                f = open("/tmp/ecm.info", "r")
                flines = f.readlines()
                f.close()
                pid=""
                for cell in flines:
                    if ("pid:" in cell):
                        cellmembers = cell.split()
                        for x in range(len(cellmembers)):
                            if ( "pid:" in cellmembers[x]):
                                if x<=(len(cellmembers)):
                                    pid = str(cellmembers[x+1])
                                    pid = pid.lstrip("pid:")
                        
                                    Pid_ecm = "Pid: "+ pid
                                else:
                                    Pid_ecm = "n/a"                                 
    except:       
        Pid_ecm = ""        
    return Pid_ecm
Хотел вывести cw0 подобным кодом, но неполучилось, только первые две цифры cw0: 8A
Не могу разобраться с пробелами

Str.strip() # Удаляет пробельные символы в начале и конце
Str.lstrip() # Удаляет пробельные символы в начале
Str.rstrip() # Удаляет пробельные символы в конце

Как убрать все пробелы и взять всю строчку cw0: 8A AB 54 89 03 95 E0 78

Код:
def getCw0Info(self):
    self.poll_interval = 5000
    self.poll_enabled = True
    Cw0_ecm = ""
    try:
                  f = open("/tmp/ecm.info", "r")
                  flines = f.readlines()
                  f.close()
                  cw0=""
                  for cell in flines:
                      if ("cw0:" in cell):
                          cellmembers = cell.split()
                          for x in range(len(cellmembers)):
                              if ( "cw0:" in cellmembers[x]):
                                  if x<=(len(cellmembers)):
                                      cw0 = str(cellmembers[x+1])
                                      cw0 = cw0.lstrip(":")
                        
                                      Cw0_ecm = "cw0: "+ cw0
                                  else:
                                      Cw0_ecm = "n/a"                                 
    except:       
        Cw0_ecm = ""        
    return Cw0_ecm

Последний раз редактировалось Ligioner; 17.02.2012 в 21:52.
  Ответить с цитированием

Старый 17.02.2012, 19:20   #67
Эксперт
 
Аватар для el1216
 
el1216 вне форума
Регистрация: 27.11.2008
Сообщений: 528
По умолчанию

У split , можно указать делимитер. Например split(': ') - (двоеточие пробел) всё станет гораздо проще
Код:
s='cw1: 30 1F 65 B4 F3 51 87 CB'
b=s.split(': ')
>>> print b
['cw1', '30 1F 65 B4 F3 51 87 CB']
Только это не лечт ... посмотрел свой формат -
Код:
 cat /tmp/ecm.info 
===== @Sky ECM on CaID 0x4AE1, pid 0x0023 ======
prov: 000000
cw0: 42 2D 46 B5 9E 7F 99 B6 
cw1: 2E 0D 16 51 9F BA FE 57 
Signature OK
source: net (newcamd at xx.xx.xx.xx:nnnn)
227 msec -- Fri Feb 17 18:25:23 2012
Что-бы искать и парсить что угодно, советую почитать здесь - http://docs.python.org/howto/regex
__________________
DM 800HD, HDD 2,5" SAMSUNG HM320JI, Gemini 4.40, Mgcmd 1.31
DM 500S , Nabilosat DM500 V.0.8 MAXVAR, Mgcmd 1.31,
4.8E+13E+19.2E, 36.E
"А внутри у ней неонка" (с)

Последний раз редактировалось el1216; 17.02.2012 в 19:59.
  Ответить с цитированием

Старый 17.02.2012, 23:43   #68
Эксперт
 
Аватар для Ligioner
 
Ligioner вне форума
Регистрация: 04.01.2010
Сообщений: 137
По умолчанию

Не стал заморачиваться с пробелами вывел как есть из файла

Код:
def getCw0Info(self):
    self.poll_interval = 5000
    self.poll_enabled = True
    try:
        f = open("/tmp/ecm.info", "r")
        out_line = f.readlines()
        f.close()
    except:
            out_line = [ ]
    info = "No cw0"
    for line in out_line:
        if ("cw0:" in line):
        list = line.split()
            if len(list) == 9:
                    info = (" %s %s %s %s %s %s %s %s %s" % (list[0], list[1], list[2],list[3], list[4], list[5], list[6],list[7], list[8]))
            if info != "No info":
                    break        
    return info

Последний раз редактировалось Ligioner; 17.02.2012 в 23:47.
  Ответить с цитированием

Старый 18.02.2012, 11:43   #69
Эксперт
 
Аватар для el1216
 
el1216 вне форума
Регистрация: 27.11.2008
Сообщений: 528
По умолчанию

Цитата:
Сообщение от Ligioner Посмотреть сообщение
Не стал заморачиваться с пробелами вывел как есть из файла

Код:
def getCw0Info(self):
    self.poll_interval = 5000
    self.poll_enabled = True
    try:
        f = open("/tmp/ecm.info", "r")
        out_line = f.readlines()
        f.close()
    except:
            out_line = [ ]
    info = "No cw0"
    for line in out_line:
        if ("cw0:" in line):
        list = line.split()
            if len(list) == 9:
                    info = (" %s %s %s %s %s %s %s %s %s" % (list[0], list[1], list[2],list[3], list[4], list[5], list[6],list[7], list[8]))
            if info != "No info":
                    break        
    return info
Простите за занудство, НО ! Надо запомнить раз и на всегда !
в Python отсутствуют операторные скобки begin/end, как в языке Паскаль, или фигурные скобки, как в Си.
Исполнение программы может зависеть от начальных пробелов в тексте.
Вот такой конструкции не должно быть по определению !
Код:
        if ("cw0:" in line):
        list = line.split()
Только так -
Код:
        if ("cw0:" in line):
            list = line.split()
Интересная проверка -
сначала присваиваем info = "No cw0"
А потом проверяем - if info != "No info":
Дальше ... зачем эти танцы с бубном -
Код:
        list = line.split()
            if len(list) == 9:
                    info = (" %s %s %s %s %s %s %s %s %s" % (list[0],  list[1], list[2],list[3], list[4], list[5], list[6],list[7], list[8]))
Если в результате, фактически выводится оригинальная строка ... Для обьёма кода и тормозов ?
Можно просто вывести line

Если надо удалить пробелы из строки - есть функция replace ...
Код:
>>> a="cw0: 8A AB 54 89 03 95 E0 78"
>>> b=a.split(': ')
>>> b
['cw0', '8A AB 54 89 03 95 E0 78']
>>> c=b[1].replace(' ','')
>>> c
'8AAB54890395E078'
__________________
DM 800HD, HDD 2,5" SAMSUNG HM320JI, Gemini 4.40, Mgcmd 1.31
DM 500S , Nabilosat DM500 V.0.8 MAXVAR, Mgcmd 1.31,
4.8E+13E+19.2E, 36.E
"А внутри у ней неонка" (с)

Последний раз редактировалось el1216; 18.02.2012 в 12:22.
  Ответить с цитированием

Старый 18.02.2012, 15:12   #70
Специалист
 
Аватар для vlamo
 
vlamo вне форума
Регистрация: 01.11.2007
Сообщений: 2,321
Отправить сообщение для vlamo с помощью ICQ
По умолчанию

Цитата:
Не стал заморачиваться с пробелами вывел как есть из файла

Код:
def getCw0Info(self):
    self.poll_interval = 5000
    self.poll_enabled = True
    try:
        f = open("/tmp/ecm.info", "r")
        out_line = f.readlines()
        f.close()
    except:
            out_line = [ ]
    info = "No cw0"
    for line in out_line:
        if ("cw0:" in line):
        list = line.split()
            if len(list) == 9:
                    info = (" %s %s %s %s %s %s %s %s %s" % (list[0], list[1], list[2],list[3], list[4], list[5], list[6],list[7], list[8]))
            if info != "No info":
                    break        
    return info
Действительно, не стоит усложнять, если можно проще:
Код:
def getCw0Info(self):
	self.poll_interval = 5000
	self.poll_enabled = True
	try:
		f = open("/tmp/ecm.info", "r")
		out_line = f.readlines()
		f.close()
	except:
		out_line = [ ]
	info = "No cw0"
	for line in out_line:
		line = line.strip()		# delete all the leading and trailing whitespaces, and new line symbol as well
		pos = line.find("cw0: ")	# find start position substring 'cw0: ' in line, if not found return -1
		if pos != -1:
			#info = line[pos+5:]	# info = '42 2D 46 B5 9E 7F 99 B6'
			info = line		# info = 'cw0: 42 2D 46 B5 9E 7F 99 B6'
			break
	return info
__________________
  • DM600PVR: Gemini 4.70, mgcamd_1.35/mpcs_16e, HDD 160GB
  • ET9200: Image: OpenPLi 3.0; oscam 1830; HDD 160GB
  Ответить с цитированием

Старый 18.02.2012, 16:07   #71
Эксперт
 
Аватар для Ligioner
 
Ligioner вне форума
Регистрация: 04.01.2010
Сообщений: 137
По умолчанию

Цитата:
Сообщение от el1216 Посмотреть сообщение
Простите за занудство, НО !
Да что Вы какое занудство, спасибо Вам с vlamo за уроки, в инете сложно что то понять, а тут живые примеры
Очень хочется научится азам пайтона, многое ещё нужно понять, что к чему и какие функции для чего

Сделал так , думаю теперь правильно, но и предыдущий код работал не смотря на ошибки

Код:
def getCw0Info(self):
    self.poll_interval = 5000
    self.poll_enabled = True
    try:
            f = open("/tmp/ecm.info", "r")
            out_line = f.readlines()
            f.close()
    except:
            out_line = [ ]
    info = "No cw0"
    for line in out_line:
        if ("cw0:" in line):
            cellmembers = line.split(': ')
            output = cellmembers[1].replace(' ','')
            info = "cw0: "+ output
        
    return info
И вот так

Код:
def getCw1Info(self):
    self.poll_interval = 5000
    self.poll_enabled = True
    try:
            f = open("/tmp/ecm.info", "r")
            out_line = f.readlines()
            f.close()
    except:
            out_line = [ ]
    info = "No cw1"
    for line in out_line:
        if ("cw1:" in line):
            cellmembers = line.strip()
            info = cellmembers
        
    return info
К стати на счёт этого
Код:
if ("cw0:" in line):
list = line.split()

Ресивер то ведь не ругался, обычно если табуляция не соблюдена сразу в зелёнку падал и показывал ошибку

Последний раз редактировалось Ligioner; 18.02.2012 в 16:14.
  Ответить с цитированием

Старый 18.02.2012, 22:19   #72
Эксперт
 
Аватар для el1216
 
el1216 вне форума
Регистрация: 27.11.2008
Сообщений: 528
По умолчанию

Цитата:
Сообщение от Ligioner Посмотреть сообщение
К стати на счёт этого
Код:
if ("cw0:" in line):
list = line.split()

Ресивер то ведь не ругался, обычно если табуляция не соблюдена сразу в зелёнку падал и показывал ошибку
Этого я обьяснить не могу.
Что-бы для таких функций забыть про зелёнку, звпускайте python на дриме и делайте import ...
Например, ваш код с ошибкой я записал на дрим в каталог /tmp,
cd /tmp и запустил python.
Код:
root@dm800:~# cd /tmp
root@dm800:/tmp# ls -l cw.py
-rw-r--r--    1 root     root          580 Feb 18 20:49 cw.py
root@dm800:/tmp# python
Python 2.6.7 (r267:88850, Oct 13 2011, 18:20:31) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cw
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "cw.py", line 13
    list = line.split()
       ^
IndentationError: expected an indented block
>>> quit()
root@dm800:/tmp#
Получил ошибку .... исправил её и проделал всё сначала -
Код:
root@dm800:/tmp# python
Python 2.6.7 (r267:88850, Oct 13 2011, 18:20:31) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cw
>>> quit()
root@dm800:/tmp# ls -l cw*
-rw-r--r--    1 root     root          584 Feb 18 21:04 cw.py
-rw-r--r--     1 root     root          762 Feb 18 21:08 cw.pyo
- загрузилось, по крайней мере синтаксических ошибок нет... создан байткод-компилированный файл cw.pyo

Вопрос - что значит
Код:
self.poll_interval = 5000
self.poll_enabled = True
непонятно ... У меня есть подозрение, что заклинание появилось из за копипаста откуда-то ... и в данном случае никчему ...
__________________
DM 800HD, HDD 2,5" SAMSUNG HM320JI, Gemini 4.40, Mgcmd 1.31
DM 500S , Nabilosat DM500 V.0.8 MAXVAR, Mgcmd 1.31,
4.8E+13E+19.2E, 36.E
"А внутри у ней неонка" (с)

Последний раз редактировалось el1216; 18.02.2012 в 22:44.
  Ответить с цитированием

Старый 18.02.2012, 23:13   #73
Специалист
 
Аватар для vlamo
 
vlamo вне форума
Регистрация: 01.11.2007
Сообщений: 2,321
Отправить сообщение для vlamo с помощью ICQ
По умолчанию

Цитата:
Очень хочется научится азам пайтона, многое ещё нужно понять, что к чему и какие функции для чего
Очень хорошо учится азам питона, когда за плечами есть знания какого-нибудь языка программирования.
Хотя бы базовые понятия - константы, переменные, типы данных, объекты, классы и их наследственность, поскольку питон есть объектно-ориентированный язык программирования.
Хоть авторы питона и клянутся, что они назвали его так в честь авиашоу Монти Пайтон чего-то там, но то, что Питон вобрал в себя самые лучшие фишки из других языков программирования (C, Pascal, Java, etc.), отрицать нельзя.

Вот неплохая (очень даже!) книженция с русским переводом - Язык программирования Python
Это, конечно, не та книжка, которую можно почитать на сон грядущий, но надо отдать должное автору перевода - он постарался на все двести процентов.

Ну а по функциям, так есть официальная документация. Вся она доступна в интернете.
К примеру, документация по внутренним строковым функциям - Python String Methods

И напоследок пару слов по отступам. Не помню уже точно где читал, но разработчики энигма2 убедительно просили в питоновских модулях enigma2 использовать в качестве отступов именно табуляторы, но никак не пробелы. Во-первых, размер файлов меньше; во-вторых, код более читабелен, и не приходится щуриться и курсором отсчитывать сколько там автор пробелов указал.
__________________
  • DM600PVR: Gemini 4.70, mgcamd_1.35/mpcs_16e, HDD 160GB
  • ET9200: Image: OpenPLi 3.0; oscam 1830; HDD 160GB
  Ответить с цитированием

Старый 18.02.2012, 23:31   #74
Специалист
 
Аватар для vlamo
 
vlamo вне форума
Регистрация: 01.11.2007
Сообщений: 2,321
Отправить сообщение для vlamo с помощью ICQ
По умолчанию

Цитата:
Сообщение от el1216 Посмотреть сообщение
Вопрос - что значит
Код:
self.poll_interval = 5000
self.poll_enabled = True
непонятно ... У меня есть подозрение, что заклинание появилось из за копипаста откуда-то ... и в данном случае никчему ...
Это относится к одному из родителей класса данного конвертера - классу Poll (/usr/lib/enigma2/python/Components/Converter/Poll.py).
Делают таймер активным и задают интервал, через который рендером будет запрашиваться инфа возвращаемая этой функцией.
А вот нужна она в этой функции или достаточно это задать при инициализации класса, это уже надо смотреть на класс конвертера в целом, в котором и используется эта функция, - реализации разные могут быть. Но скорей всего, думаю, здесь это лишнее. Не стоит каждый раз дергать за одно и то же место, если только где-нибудь в другом месте этот поул не отключается.
__________________
  • DM600PVR: Gemini 4.70, mgcamd_1.35/mpcs_16e, HDD 160GB
  • ET9200: Image: OpenPLi 3.0; oscam 1830; HDD 160GB
  Ответить с цитированием

Старый 20.02.2012, 01:15   #75
Эксперт
 
Аватар для SatCat
 
SatCat вне форума
Регистрация: 21.10.2008
Адрес: 141E 47N
Сообщений: 274
По умолчанию

Для справки онли:
MoreInfo2 обрабатывает /tmp/ecm.info и выводит %ECMTime, %ECMHost, %ECMProv, %ECMKey, %ECMCaid, %ECMPid
__________________
DM800HD +USB DVB-T tuner(af9035) (OE2.0 GP3.2, OSCAM ymod, HDD 160Gb) * SVEC-120: 75e-80e-85.2e-90e * Arion-1700e * TT-Budget-1400 * Manna 3910
  Ответить с цитированием
Ответ

Закладки


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход




Часовой пояс GMT +3, время: 23:31.


vBulletin skin developed by: eXtremepixels
Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot


Спутниковое телевидение, оборудование для прима. Ресиверы Dreanbox Multimedia.
Самые актуальные обзоры новейших спутниковых ресиверов.