No puedo ejecutar un .py en Conky exDebian

No puedo ejecutar un .py en Conky

14 envíos / 0 nuevos
Último envío
#1 Mar, 28/07/2020 - 14:25
PabliNet
Imagen de PabliNet
Desconectado/a
se unió: 28/10/16

No puedo ejecutar un .py en Conky

Estado: 
[SOLUCIONADO]

Desarrollé un calendario en Python que, al ejectuarlo Bash, funciona de manera correcta. Pero no sucede lo mismo con Conky,

En Conky:

${exec python calendario.py}

El error que me tira:

Traceback (most recent call last):
File "/usr/local/bin/calendarconky.py", line 32, in
print ('{} {} {} {} {} {} {}'.format(semana[0], semana[1], semana[2], semana[3], semana[4], semana[5], semana[6]).center(get_terminal_size().columns))
OSError: [Errno 25] Inappropriate ioctl for device

Mi script en Python:

#!/usr/bin/env python3
from os import get_terminal_size
from datetime import date
from calendar import monthcalendar
import conkyutil

def eshoy (dia, hoy=(date.today().strftime('%Y-%m-%d')).split('-')[2]):
	if dia == int(hoy):
		return '[', ']'
	else:
		return ' ', ' '

def strDia (dia):
	if dia == 0:
		return ' -- '
	elif dia < 10:
		return eshoy(dia)[0] + '0' + str(dia) + eshoy(dia)[1]
	else:
		return eshoy(dia)[0] + str(dia) + eshoy(dia)[1]

dato = tuple((date.today().strftime('%Y-%m')).split('-'))

strMes = [[' Lu ', ' Ma ', ' Mi ', ' Ju ', ' Vi ', ' Sa ', ' Do ']]
for semana in monthcalendar(int(dato[0]), int(dato[1])):
	strSemana = []
	for nDia in semana:
		strSemana.append(strDia(nDia))
	strMes.append(strSemana)
del (nDia, strSemana)

for semana in strMes:
	print ('{} {} {} {} {} {} {}'.format(semana[0], semana[1], semana[2], semana[3], semana[4], semana[5], semana[6]).center(get_terminal_size().columns))

La .

Mar, 28/07/2020 - 20:49
NerveNet
Imagen de NerveNet
Desconectado/a
colaborador
se unió: 14/03/16

Un inciso, el error lo arroja sobre la línea 32, sin embargo, el código que muestras tan sólo tiene 16 líneas. Entiendo que no has publicado el código completo del script.

A un clic de distancia de ti...

Mié, 29/07/2020 - 12:07 (Responder a #2)
PabliNet
Imagen de PabliNet
Desconectado/a
se unió: 28/10/16

Ahí arreglé el primer mensaje.

Jue, 30/07/2020 - 16:34
hpmhpm
Imagen de hpmhpm
Desconectado/a
se unió: 01/09/19

Gracias por el programa fuente.
No soy programador ni estoy cerca de serlo.
Como se muy poco, lo basico, trato de escribir usando
los conocimientos minimos de Python.
Reconozco que el original es mejor, solo quiero
mostralo de otra forma, para mi mas simple.
Si por alguna razon, genero alguna molestia o
se considera un irrespeto, no es el proposito.
De manera que acepten mis disculpas y malos
modales. gracias.
Nota : si conozco las tildes pero no con este teclado
y á es demasiado trabajo

quita los espacios tabuladores.
mirar los espacio tabuladores en el original

# martes 11 de agosto 2020, 07:57:42 PM : Bogotá
from os import get_terminal_size
from datetime import date
import calendar

fecha = (date.today().strftime('%Y-%m-%d-%w')).split('-')

anno = int(fecha[0])
mes = int(fecha[1])
hoy = int(fecha[2])
ndia = int(fecha[3])

sema = ['Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado']
semana = sema + ['Domingo']
semanad = ['Domingo'] + sema

meses = ['','Enero','Febrero','Marzo','Abril','Mayo','Junio']
meses += ['Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre']

elmes = meses[mes]
elmes = "{0} {1}  [{2}: {3}]".format(elmes, anno, semanad[ndia], hoy)

my = calendar.monthcalendar(anno, mes, )

def strDia (dia):
    dia = int(dia)
    salida = dia
    if dia == 0:
    	salida = ' '*4
    elif dia == hoy:
        salida = "[{}]".format(dia)

    if 0 3} '.format(dia[:2])

print(titulo(s))

for sna in my:
    ss = ' '
    for d in sna:
        ss += '{:^4}'.format(strDia(d))
    print(titulo(ss))

del (d, ss)

# vertical
def dia(d):
    if d == 0:
        a = " " * 2
    else:
        a = d
    if d == hoy:
        a = "[{}]".format(d)
    return a

son = len(my)

print()

print(titulo(elmes) )
print(titulo("-"*27))

for k in range(7):
    bb = "{:
Jue, 30/07/2020 - 17:17
caliban
Imagen de caliban
Desconectado/a
moderador
se unió: 14/01/16

Bien gracias por tu aporte @hpmhpm , el punto en esto es ¿conky logra ejecutarlo sin problemas ??(Tu version de script )

Jue, 30/07/2020 - 17:45 (Responder a #5)
PabliNet
Imagen de PabliNet
Desconectado/a
se unió: 28/10/16

hpmhpm wrote:

Gracias por el programa fuente.
No soy programador ni estoy cerca de serlo.
Como se muy poco, lo basico, trato de escribir usando
los conomientos minimos de Python.
Reconozco que el original es mejor, solo quiero
mostralo de otra forma, para mi mas simple.
Si por alguna razon, genero alguna molestia o
se considera un irrespeto, no es el proposito.
De manera que acepten mis disculpas y malos
modales. gracias.
Nota : si conozco las tildes pero no con este teclado
y á es demasiado trabajo

quita los espacios tabuladores.
mirar los espacio tabuladores en el original

#!/usr/bin/env python3
from os import get_terminal_size
from datetime import date
from calendar import monthcalendar
#import conkyutil

def eshoy (dia, hoy=(date.today().strftime('%Y-%m-%d')).split('-')[2]):
if dia == int(hoy):
return '[', ']'
else:
return '', ''

def strDia (dia):
if dia == 0:
return ' '*4
elif dia < 10:
return eshoy(dia)[0] + ' ' + str(dia) + eshoy(dia)[1]
else:
return eshoy(dia)[0] + str(dia) + eshoy(dia)[1]

dato = (date.today().strftime('%Y-%m')).split('-')

semana = ['Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa', 'Do']
s = ''
for dia in semana:
s += '{:' '>3} '.format(dia)
print(s.center(get_terminal_size().columns))

for semana in monthcalendar(int(dato[0]), int(dato[1])):
ss = ' '
for d in semana:
ss += '{:' '^4}'.format(strDia(d))
print(ss.center(get_terminal_size().columns))

del (d, ss)


Sólo aparece la semana actual en tu versión.

Dom, 02/08/2020 - 15:56 (Responder a #6)
caliban
Imagen de caliban
Desconectado/a
moderador
se unió: 14/01/16

Vos estas obteniendo los datos en filas y columnas del terminal en donde se mostrarla la salida standard , por eso ejecutarlo en un emulador de terminal no obtenes error , conky no se ejecuta en un terminal.
¿Existe alguna razon por la cual no uses ,por ejemplo el comando "cal" en conky o utilizar el modulo "calendar" en python .?
Fijate por ejemplo el resultado de :
------------------------------------------------------------------------------------------------------------------------------------------
cal | grep --before-context 6 --after-context 6 --color -e " $(date +%e)" -e "^$(date +%e)"
-------------------------------------------------------------------------------------------------------------------

Dom, 02/08/2020 - 19:15 (Responder a #7)
PabliNet
Imagen de PabliNet
Desconectado/a
se unió: 28/10/16

Si, no me gusta cómo queda el resultado final: No lo puedo centralizar ni marcar el día actual.

Dom, 02/08/2020 - 19:21
caliban
Imagen de caliban
Desconectado/a
moderador
se unió: 14/01/16

Con la secuencia de comandos que te mostre tenes destacado en color el dia actual ( es solo un ejemplo de los muchos que podes encontrar en internet) ,( reitero leete las opciones del modulo calendar de python ,)
Por otra parte una vez que lo muestres en conky (en forma directa o rediccinando hacia un archivo ),el mismo archivo de configuracion de conky tiene opciones para posicionar el resultado en pantalla , en cualquier lugar , alineacion ,derecha izquierda, centrado , gap ,y una larga serie de opciones .

Jue, 06/08/2020 - 18:07 (Responder a #9)
PabliNet
Imagen de PabliNet
Desconectado/a
se unió: 28/10/16

caliban wrote:

------------------------------------------------------------------------------------------------------------------------------------------
cal | grep --before-context 6 --after-context 6 --color -e " $(date +%e)" -e "^$(date +%e)"
-------------------------------------------------------------------------------------------------------------------


Cuando ejecuto tu comando no me aparece nafa.

caliban wrote:

Con la secuencia de comandos que te mostre tenes destacado en color el dia actual ( es solo un ejemplo de los muchos que podes encontrar en internet) ,( reitero leete las opciones del modulo calendar de python ,)
Por otra parte una vez que lo muestres en conky (en forma directa o rediccinando hacia un archivo ),el mismo archivo de configuracion de conky tiene opciones para posicionar el resultado en pantalla , en cualquier lugar , alineacion ,derecha izquierda, centrado , gap ,y una larga serie de opciones .


Conky no acepta los colores de Bash.

Jue, 06/08/2020 - 19:19
caliban
Imagen de caliban
Desconectado/a
moderador
se unió: 14/01/16

La secuencias de comandos a mi me funciona perfecto , muestra el calendario destacando en color el dia en curso
Por otra parte , en conky para que al ejecutar un comando o un scrip bash , muestre color tenes que usar
{execp comando }
{execpi comando }
de esta forma parsea el color indicado .

Vie, 07/08/2020 - 10:50 (Responder a #11)
PabliNet
Imagen de PabliNet
Desconectado/a
se unió: 28/10/16

caliban wrote:

La secuencias de comandos a mi me funciona perfecto , muestra el calendario destacando en color el dia en curso



$ cal | grep --before-context 6 --after-context 6 --color -e " $(date +%e)" -e "^$(date +%e)"
$

caliban wrote:
Por otra parte , en conky para que al ejecutar un comando o un scrip bash , muestre color tenes que usar
{execp comando }
{execpi comando }
de esta forma parsea el color indicado .


Sí, utilizo esas variables pero no va…

Vie, 07/08/2020 - 13:22
caliban
Imagen de caliban
Desconectado/a
moderador
se unió: 14/01/16

A ver ,fijate en la siguiente pagina tenes la solucion completa

Y si queres explorar mas opciones y tu propia version


Ademas si buscas ,tenes versiones para conky hechas en lua , python , etc.

Sáb, 20/02/2021 - 20:29
PabliNet
Imagen de PabliNet
Desconectado/a
se unió: 28/10/16

Bueno, logré que Conky muestro un calendario con un script de Python desarrollado por mí ¡y quedó espectacular!

El problema: No sé porque Conky no me tomaba el método get_terminal_size del módulo os que no es compatible con Conky.

La solución: Añadir una opción para configurar la app con sys.argv,