#!/usr/bin/env python
# via http://lost-theory.org/python/dynamicimg.html
import Image,ImageDraw
import re
import os
filename = "/media/mmc1/battery.log"
imagename = "/media/mmc1/graph.png"
log = file(r"%s" % filename)
line = len(log.readlines())
X = line+60
Y = 130 #image width and height
log.close()
def graph(filename):
img = Image.new("RGB", (X,Y), "#FFFFFF")
draw = ImageDraw.Draw(img)
#draw some axes and markers
#for i in range(X/6):
#if i % 5 == 0:
#draw.text((i*10+15, Y-15), `i*10`, fill="#000")
for j in range(1,Y/10-2):
draw.text((0,Y-15-j*10), `j*10`, fill="#000")
draw.line((20,Y-19,X,Y-19), fill="#000")
draw.line((19,20,19,Y-18), fill="#000")
#read in file and graph it
ots4et=0
log = file(r"%s" % filename)
for (i, value) in enumerate(log):
proc = value[22:26]
chas = value[15:17]
min = value[18:20]
data = value[1:13]
if i==1:
draw.text((i+25, Y-120), data, fill="#000")
if re.search("Charging", value):
if ots4et == 0:
#draw.line((i+20, Y-15, i+20, 20), fill="#DDD")
draw.line((i+20,Y-20,i+20,Y-30), fill="#33CC33")
else:
hours,minutes = divmod(ots4et, 60)
worktime="%s:%s" % (hours, minutes)
draw.line((i+20,Y-20,i+20,Y-30), fill="#33CC33")
draw.text((i+15, Y-15), worktime, fill="#000")
ots4et = 0
else:
if re.search("---", value):
draw.line((i+20, Y-15, i+20, 20), fill="#000")
else:
chas = int(chas)
min = int(min)
ots4et=ots4et+10
proc = eval(proc)
if min == 0:
draw.line((i+20, Y-15, i+20, 20), fill="#DDD")
draw.line((i+20,Y-20,i+20,Y-10-proc), fill="#fff")
#if chas % 2 == 0:
#draw.text((i+15, Y-15), `ots4et`, fill="#000")
else:
draw.line((i+20,Y-20,i+20,Y-10-proc), fill="#55d")
if i==line-1:
hours,minutes = divmod(ots4et, 60)
worktime="%s:%s" % (hours, minutes)
draw.text((i+15, Y-15), worktime, fill="#000")
img.save(imagename)
log.close()
graph(filename)
image="/usr/bin/browser --url file://%s" % (imagename)
os.system(image)Пример запуска :
$python Mydoc/.documents/image.py
По умолчанию лог лежит /media/mmc1/battery.log
Скачать скрипт
.
Отредактированно dik (31-05-2008 18:24:13)
Неактивен
А можно еще и лог куда-нибудь выложить?
Неактивен
Выложил в файлы. - http://n8xx.com/uploads.php?file=battery.log 
При запуске он первой строкой пишет что то типа ------------------------------
А так как у меня запускаетс и пишет лог так : >> battery.log
то этих строк может быть несколько - то есть при каждом запуске таблетки...
Неактивен
Посмотрел на код. К сожалению в вашем посте скорее всего выравнивание 'поехало', так что понять что там происходит трудно.
Что бы я сделал и почему:
1. Вынес бы в отдельное место то, что происходит в основной программе, чтобы это было читабельно
2. Убрал бы использование глобальных переменных X, Y, filename и imagename из функции graph, потому, что глобальные переменные - зло. и еще потому, что эту функцию можно будет импортировать из другого места и использовать не разбираясь что для ее работы нужно установить 4 глобальные переменные.
3. Сделал бы основной код выполняющимся только, когда позвали скрипт, а не всегда. Это позволит при желании просто импортировать graph,что в текущей реализации невозможно без выполнения основного кода.
4. Сделал бы возможность передавать путь к логу как параметр скрипта и автоматически формировал бы из него путь к результату, поменяв расширение.
Вот код за исключением функции graph:
#!/usr/bin/env python
import sys
import os
import re
import Image, ImageDraw
DEF_FNAME = "/media/mmc1/battery.log"
DEF_IMGNAME = "/media/mmc1/graph.png"
def graph(filename, x, y):
....
return img
if __name__ == "__main__":
if len(sys.argv) == 2:
filename = sys.argv[1]
imagename = os.path.splitext(filename)[0] + '.png'
else:
filename = DEF_FNAME
imagename = DEF_IMGNAME
log = file(filename)
lines = len(log.readlines())
x = lines + 60
y = 130 #image width and height
log.close()
image = graph(filename, x, y)
image.save(imagename)
sys.exit(os.system("/usr/bin/browser --url file://%s" % imagename))Почитать о питоновом стиле можно здесь: http://www.python.org/dev/peps/pep-0008/ 
PS: Естественно, это не все, что я бы сделал и я тоже только учусь. Так что воспринимайте это все с нужной долей критицизма.
Удачи!
Неактивен
Спасибо.
Неактивен