[Решено] Выхлоп скрипта в conky

Автор quark, 20 февраля 2014, 20:40:47

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

quark

Всем доброго времени суток!
Требуется ваша помощь, по conky. Ситуация такая:
Имеется скрипт (python, формируются данные для вывода и команды conky), выхлоп его в консоль - все нормально, то что и хотел. Далее, если взять этот вывод и поместить в конфиг коньков - тож все хорошо. А вот если в конфиге коньков прописать запуск скрипта:
TEXT
$hr
${execp python /home/dima/.conky/wcalendar.py}
$hr
тут начинаются проблемы: выводится четыре строки из восьми, на пятой затык: ${}g - и, соответственно, unknown variable (должно было быть ${goto 35}). Понять не могу, откуда берется это непонимание со стороны конки (наверно мало что о них знаю :( ), скрипт отрабатывает (если судить по его выводу в консоль), более того и конки берут этот вывод (если его поместить в конфиг) и нормально работают. Подскажите, в чем могут быть грабли? Скрипт могу выложить (мое произведение - скромничаю, так, вечерок скоротал  ;) да и не программист я уже.
Большое спасибо.

yura_n

Цитата: quark от 20 февраля 2014, 20:40:47Скрипт могу выложить
Без скрипта ваш вопрос - это гадание на ромашке. ;D Выкладывайте. А заодно и конфиг conky.

quark

#2

Скрипт - пока выводит календарь (текущий месяц), цель - раскрасить дни в соответствии с графиком работы смены (моей, в данном случае)
Открыть содержимое (спойлер)
#!/usr/bin/python
# -*- coding: utf-8-*-
# color1 60605f - дефолтный (серенький)
# color2 c9c9c9 - белый, почти (Сб, Вс)

import time, datetime, calendar

# Номер смены:
smena = 2
# Шаг вывода дней недели (px):
r = 35
# Выводимая строка:
outline_ = "${color1}" + "Смена " + str(smena)
monthname = [" ", "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"]
wday = ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"]
# Сегодня:
today_ = time.localtime()
outline_ += "${alignr}" + monthname[today_[1]] + ", " + str(today_[0]) + "\n" + "\n"
i = 1
for wday_ in wday:
    if (wday_ == "Сб") or (wday_ == "Вс"):
        outline_ += "${color2}" + "${goto " + str(i * r) + "}" + wday_
#        outline_ += "${color2}" + "${alignr " + str((8 - i) * r) + "}" + wday_
    else:
        outline_ += "${color1}" + "${goto " + str(i * r) + "}" + wday_
#        outline_ += "${color1}" + "${alignr " + str((8 - i) * r) + "}" + wday_
    i += 1
outline_ += "${color1}" + "\n"
# Первое число текущего месяца:
firstDayOfMonth = datetime.date(today_[0], today_[1], 1)
# Номер дня в неделе первого числа текущего месяца (1 - 7):
firstDayOfMonthNumberOfWeek = firstDayOfMonth.isoweekday()
# Количество дней в текущем месяце:
numberOfMonthDays = calendar.monthrange(today_[0], today_[1])
i = 1
j = 1
k = 0
while j <= numberOfMonthDays[1]:
    while (i <= 7) and (j <= numberOfMonthDays[1]):
        if k == 0:
       i = firstDayOfMonthNumberOfWeek
       k = 1
   outline_ += "${goto " + str(i * r) + "}" + str(j)
#        outline_ += "${alignr " + str((8 - i) * r) + "}" + str(j)
        i += 1
     j += 1
    outline_ += "\n"
    i = 1
print(outline_)
[свернуть]

конфиг
Открыть содержимое (спойлер)
background yes
use_xft yes
font Droid Sans:size=12
xftalpha 1
out_to_console no
update_interval 2
total_run_times 0
own_window yes
own_window_type normal
own_window_transparent yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
double_buffer yes
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders yes
#stippled_borders 5
#border_margin 4
#border_width 1
default_color 60605f
default_shade_color 404040
default_outline_color black
minimum_size 400 120
maximum_width 700
#alignment br
gap_x 80
gap_y 600
no_buffers no
uppercase no
cpu_avg_samples 2
net_avg_samples 2
override_utf8_locale yes
use_spacer no
short_units yes

color1 60605f
#color2 a66417
color2 c9c9c9

TEXT
$hr
${execp /usr/bin/python /home/dima/.conky/wcalendar.py}
$hr
[свернуть]

yura_n

#3
С табами у вас проблема. Еще ошибки есть. То что нашел, исправил.

#!/usr/bin/python
# -*- coding: utf-8-*-
# color1 60605f - дефолтный (серенький)
# color2 c9c9c9 - белый, почти (Сб, Вс)

import time, datetime, calendar

# Номер смены:
smena = 2
# Шаг вывода дней недели (px):
r = 35
# Выводимая строка:
outline_ = "${color1}" + "Смена " + str(smena)
monthname = [" ", "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"]
wday = ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"]
# Сегодня:
today_ = time.localtime()
outline_ += "${alignr}" + monthname[today_[1]] + ", " + str(today_[0]) + "\n" + "\n"
i = 1
for wday_ in wday:
    if wday_ == "Сб" or wday_ == "Вс":
        outline_ += "${color2}" + "${goto " + str(i * r) + "}" + wday_
#        outline_ += "${color2}" + "${alignr " + str((8 - i) * r) + "}" + wday_
    else:
        outline_ += "${color1}" + "${goto " + str(i * r) + "}" + wday_
#        outline_ += "${color1}" + "${alignr " + str((8 - i) * r) + "}" + wday_
    i += 1
outline_ += "${color1}" + "\n"
# Первое число текущего месяца:
firstDayOfMonth = datetime.date(today_[0], today_[1], 1)
# Номер дня в неделе первого числа текущего месяца (1 - 7):
firstDayOfMonthNumberOfWeek = firstDayOfMonth.isoweekday()
# Количество дней в текущем месяце:
numberOfMonthDays = calendar.monthrange(today_[0], today_[1])
i = 1
j = 1
k = 0
while j <= numberOfMonthDays[1]:
    while i <= 7 and j <= numberOfMonthDays[1]:
        if k == 0:
            i = firstDayOfMonthNumberOfWeek
            k = 1
            outline_ += "${goto " + str(i * r) + "}" + str(j)
#            print outline_
#        outline_ += "${alignr " + str((8 - i) * r) + "}" + str(j)
        i += 1
    j += 1
    outline_ += "\n"
    i = 1
#print(outline_) # Это для Python 3.x
print outline_ # Это для Python 2.x

У меня коньки отобразили "Смена 2", месяц, дни недели и число, с которого начался месяц. А больше у вас ничего и не написано.

quark

Цитата: yura_n от 20 февраля 2014, 22:33:33С табами у вас проблема. Еще ошибки есть. То что нашел, исправил.
Да не, это копи/пасте так отработал, вроде посмотрел, видимо не все. Для последней строки поправил, но это ничего не изменило. Для однозначности: снимок экрана во вложении.
Под спойлером тот самый выхлоп в консоль, затык после 2-ого февраля, это видно на снимке
Открыть содержимое (спойлер)
dima@quark:~/.conky$ python wcalendar.py
${color1}Смена 2${alignr}Февраль, 2014

${color1}${goto 35}Пн${color1}${goto 70}Вт${color1}${goto 105}Ср${color1}${goto 140}Чт${color1}${goto 175}Пт${color2}${goto 210}Сб${color2}${goto 245}Вс${color1}
${goto 210}1${goto 245}2
${goto 35}3${goto 70}4${goto 105}5${goto 140}6${goto 175}7${goto 210}8${goto 245}9
${goto 35}10${goto 70}11${goto 105}12${goto 140}13${goto 175}14${goto 210}15${goto 245}16
${goto 35}17${goto 70}18${goto 105}19${goto 140}20${goto 175}21${goto 210}22${goto 245}23
${goto 35}24${goto 70}25${goto 105}26${goto 140}27${goto 175}28
[свернуть]


[вложение удалено администратором]

yura_n

#5
Вроде нашел я причину ошибки. Дело в том, что переменная outline_ - это одна большая строка. А надо несколько строк.
P.S.
Все верно. Если вы последнюю строку "print outline_" закомментируете, а вместо нее добавите что-нибудь вроде:

print "${goto 210}1${goto 245}2"
print "${goto 35}3${goto 70}4${goto 105}5${goto 140}6${goto 175}7${goto 210}8${goto 245}9"
print "${goto 35}10${goto 70}11${goto 105}12${goto 140}13${goto 175}14${goto 210}15${goto 245}16"

То легко в этом убедитесь. То есть, вам нужно переписать скрипт таким образом, чтобы все записи выводились отдельными строками.

quark

Цитата: yura_n от 21 февраля 2014, 00:22:28То есть, вам нужно переписать скрипт таким образом, чтобы все записи выводились отдельными строками.

Попробовал. В цикле, после формирования строки, посылаю ее на вывод. Результат тот же.
Может еще какие идеи?

yura_n

#7
Цитата: quark от 21 февраля 2014, 11:40:23Может еще какие идеи?
В .conkyrc добавьте:

text_buffer_size XXXX

Где XXXX - значение в байтах. Программе, до кучи, размера текстового буфера не хватает (по умолчанию 256 байт), поэтому и ведет себя так... замысловато.

quark

Да, благодарю, именно оно и есть! Что-то в этом духе и искал, в описаниях конки, но ожидал bufferSize, ниже не посмотрел

quark

Пока допилил до такого состояния (см. вложение). Подумаю как бы облагородить/размножить (несколько месяцев)  ;D

[вложение удалено администратором]