¿Hay algún software que registre el tiempo de mis actividades y proporcione un informe?
Basado en la ventana enfocada y el título de la ventana.
El informe solo mostraría el tiempo dedicado a una ventana específica y su título como:
Application Title Time
Firefox Ask Ubuntu - Mozilla Firefox 5:58
Respuesta aceptada:
EDITAR:una versión del script con informes ordenados se puede encontrar aquí
¡Siempre es divertido escribir un guión para ello!
El siguiente script producirá un resultado (informe) como:
------------------------------------------------------------
nautilus
0:00:05 (3%)
------------------------------------------------------------
0:00:05 (3%) .usagelogs
------------------------------------------------------------
firefox
0:01:10 (36%)
------------------------------------------------------------
0:00:05 (3%) The Asker or the Answerer? - Ask Ubuntu Meta - Mozilla Firefox
0:00:15 (8%) scripts - Is there software which time- tracks window & application usage? - Ask Ubuntu - Mozilla Firefox
0:00:10 (5%) Ask Ubuntu - Mozilla Firefox
0:00:15 (8%) Why is a one line non-understandable answer used as review audit? - Ask Ubuntu Meta - Mozilla Firefox
0:00:20 (10%) bash - How to detect the number of opened terminals by the user - Ask Ubuntu - Mozilla Firefox
0:00:05 (3%) BlueGriffon - Mozilla Firefox
------------------------------------------------------------
gedit
0:02:00 (62%)
------------------------------------------------------------
0:02:00 (62%) 2016_06_04_10_33_29.txt (~/.usagelogs) - gedit
============================================================
started: 2016-06-04 10:33:29 updated: 2016-06-04 10:36:46
============================================================
..que se actualiza una vez por minuto.
Notas
-
El informe posiblemente informará ventanas en la categoría:"Desconocido". Este es el caso cuando Windows tiene
pid 0
(tkinter
ventanas, comoIdle
ventanas, unPython
IDE). Sin embargo, el título de la ventana y el uso se informarán correctamente. -
La pantalla de bloqueo con entrada de contraseña se informa como una "ventana de entrada nux".
-
Los porcentajes están redondeados porcentajes, lo que ocasionalmente puede dar lugar a pequeñas diferencias entre la aplicación porcentaje y la suma del porcentaje de su ventana.
Un ejemplo:si una aplicación tiene dos ventanas usadas, cada una usó
0,7%
del tiempo total, ambas ventanas reportará1%
cada uno (0.7
–> redondeado a1
), mientras que la aplicación informes de uso1%
(1.4
–> redondeado a1
)No es necesario decir que estas diferencias son totalmente irrelevantes en el panorama general.
El guión
#!/usr/bin/env python3
import subprocess
import time
import os
# -- set update/round time (seconds)
period = 5
# --
# don change anything below
home = os.environ["HOME"]
logdir = home+"/.usagelogs"
def currtime(tformat=None):
return time.strftime("%Y_%m_%d_%H_%M_%S") if tformat == "file"\
else time.strftime("%Y-%m-%d %H:%M:%S")
try:
os.mkdir(logdir)
except FileExistsError:
pass
# path to your logfile
log = logdir+"/"+currtime("file")+".txt"; startt = currtime()
def get(command):
try:
return subprocess.check_output(command).decode("utf-8").strip()
except subprocess.CalledProcessError:
pass
def time_format(s):
# convert time format from seconds to h:m:s
m, s = divmod(s, 60); h, m = divmod(m, 60)
return "%d:%02d:%02d" % (h, m, s)
def summarize():
with open(log, "wt" ) as report:
totaltime = sum([it[2] for it in winlist])
report.write("")
for app in applist:
wins = [r for r in winlist if r[0] == app]
apptime = sum([it[2] for it in winlist if it[0] == app])
appperc = round(100*apptime/totaltime)
report.write(("-"*60)+"\n"+app+"\n"+time_format(apptime)+\
" ("+str(appperc)+"%)\n"+("-"*60)+"\n")
for w in wins:
wperc = str(round(100*w[2]/totaltime))
report.write(" "+time_format(w[2])+" ("+\
wperc+"%)"+(6-len(wperc))*" "+w[1]+"\n")
report.write("\n"+"="*60+"\nstarted: "+startt+"\t"+\
"updated: "+currtime()+"\n"+"="*60)
t = 0; applist = []; winlist = []
while True:
time.sleep(period)
frpid = get(["xdotool", "getactivewindow", "getwindowpid"])
frname = get(["xdotool", "getactivewindow", "getwindowname"])
app = get(["ps", "-p", frpid, "-o", "comm="]) if frpid != None else "Unknown"
# fix a few names
if "gnome-terminal" in app:
app = "gnome-terminal"
elif app == "soffice.bin":
app = "libreoffice"
# add app to list
if not app in applist:
applist.append(app)
checklist = [item[1] for item in winlist]
if not frname in checklist:
winlist.append([app, frname, 1*period])
else:
winlist[checklist.index(frname)][
2] = winlist[checklist.index(frname)][2]+1*period
if t == 60/period:
summarize()
t = 0
else:
t += 1
Cómo configurar
-
El script necesita
xdotool
para obtener la información de la ventanasudo apt-get install xdotool
-
Copie el script en un archivo vacío, guárdelo como
window_logs.py
-
Pruebe:ejecute el script:inicie el script con el comando (desde una terminal):
python3 /path/to/window_logs.py
Después de un minuto, el script crea un archivo de registro con los primeros resultados en
~/.usagelogs
. El archivo tiene una marca de tiempo con la fecha y hora de creación. El archivo se actualiza una vez por minuto.En la parte inferior del archivo, puede ver tanto la hora de inicio como la marca de tiempo de la última edición. De esta manera, siempre puede ver cuál es el período de tiempo del archivo.
Si el script se reinicia, se crea un nuevo archivo con una nueva marca de tiempo (de inicio).
-
Si todo funciona bien, agregue a Aplicaciones de inicio:Dash> Aplicaciones de inicio> Agregar. Agregue el comando:
/bin/bash -c "sleep 15 && python3 /path/to/window_logs.py"
Más notas
~/.uselogs
es un directorio oculto por defecto. Presione (ennautilus
) Ctrl +H para hacerlo visible.-
Tal como está, la secuencia de comandos redondea la actividad de la ventana en 5 segundos, asumiendo que menos de 5 segundos realmente no usan la ventana. Si desea cambiar el valor, configúrelo en el encabezado del script en la línea:
# -- set update/round time (seconds) period = 5 # --
-
El guión es extremadamente "bajo en jugo". Además, dado que el tiempo se actualiza por ventana se realizan dentro del script, la cantidad de líneas en el archivo de registro se limita a la cantidad real de ventanas utilizadas.
Sin embargo, no ejecutaría el script durante semanas seguidas, por ejemplo, para evitar acumular demasiadas líneas (=registros de ventana) para mantener.