No puedo ejecutar un .py en Conky

9 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

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))
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

#!/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 "{0}{1:>2}{2}".format(eshoy(dia)[0],dia,eshoy(dia)[1])
    else:
        return "{0}{1}{2}".format(eshoy(dia)[0],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)
Jue, 30/07/2020 - 17:17
caliban
Imagen de caliban
Conectado
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
Conectado
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
Conectado
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 .