26 июл. 2016 г.

Python и DBF

Собственно стояла задача подружить Python и dbf-файл.

#!/usr/bin/env python
# -*- coding: utf8 -*-

import dbf

table = dbf.Table("table1.dbf", codepage='cp866')
table.open('read-only')

print table

for i in table:
print i.f1, i.f3.encode('utf8')

table.close()


Получал множество сообщений вида:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 0: ordinal not in range(128)

Пробовал decode/encode и т.п., пока не залез в руководство и не нашел там фразу о codepage.

13 мая 2016 г.

Ubuntu. Уведомления. notify-send

notify-send - программа предназначенная для отправки уведомлений для пользователей системы.
В Сети куча "копипастных" примеров как реализовать, но слишком мало объяснений. Например не объясняется, что все интересующие нас иконки лежат в директории /usr/share/icons/elementary-xfce/ (у меня xubuntu). 
Соответственно, вместо стандартного notify-send "Заголовок" "Текст" -i gtk-info, который мне покажет "i" в синем круге, я могу писать notify-send "Заголовок" "Текст" -i [любая_иконка_из_указанной_выше_директории], разумеется, без расширения. Пример:
notify-send "Заголовок" "Текст" -i applications-3D
Путь до applications-3D/usr/share/icons/elementary-xfce/categories/48/applications-3D.png

Кстати, если пишем скрипт для оповещения из cron'а, то следует перед выполнением команды указать export DISPLAY=:0.0, для того, чтобы сообщение ушло на наш экран, а не в пустоту.

На Хабре говорят, что это плохой тон и надо определять его автоматом:
# get_display [USER] — Returns $DISPLAY of USER.
# If first param is omitted, then $LOGNAME will be used.
get_display () {
who \
| grep ${1:-$LOGNAME} \
| perl -ne 'if ( m!\(\:(\d+)\)$! ) {print ":$1.0\n"; $ok = 1; last} END {exit !$ok}'
}