Esiste un software che utilizza la finestra dei tempi e l'utilizzo delle applicazioni?


10

Esiste un software che tiene il tempo delle mie attività e fornisce un rapporto? Basato sul titolo della finestra e della finestra focalizzati. Il rapporto mostrerebbe solo il tempo trascorso per una finestra specifica e il suo titolo come:

Application   Title                             Time
Firefox       Ask Ubuntu - Mozilla Firefox      5:58

1
C'è un time tracker nel centro software che fa proprio questo
— Mateo,

1
Questo può essere fatto in modo estremamente semplice con i programmi disponibili - non permettiamo di assegnare un motivo a questo, ho usato un programma del genere per registrare il mio tempo su un progetto prima. Questo certamente non è nella categoria "troppo ampia"
— Mateo

In ogni caso, non capisco perché questa domanda sia fortemente sottovalutata. È una domanda normale e chiara. Non ho visto un avviso "fai solo una domanda a nessuno conosce la risposta" in qualsiasi parte del sito.
— Jacob Vlijm,

Ciao Ambi. Ha pubblicato la mia risposta. Per favore fatemi sapere se ci riuscite!
— Jacob Vlijm,

Sì, forse la mia descrizione non era corretta - non voglio spiare nessuno tranne me. Voglio solo avere una statistica di ciò che ho perso tempo. Ho controllato 'Panoramica del monitoraggio del tempo' e 'Tracker del tempo GTimeLog' ma lì devi inserire tutto manualmente, cosa che non voglio fare. Jacob Vlijm, grazie, è esattamente quello che stavo cercando, tranne che ho pensato che ci fosse un software come quello con la GUI
— ambi

Risposte:


8

EDIT: una versione dello script con report ordinati è disponibile qui


Sempre divertente scrivere una sceneggiatura per questo!

Lo script seguente produrrà un output (report) come:

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


..che viene aggiornato una volta al minuto.

Appunti

  • Il rapporto riporterà eventualmente finestre nella categoria: "Sconosciuto". Questo è il caso di windows pid 0( tkinterwindows, come Idlewindows, un PythonIDE). Il titolo e l'utilizzo della finestra verranno comunque riportati correttamente.

  • La schermata di blocco con l'immissione della password viene segnalata come una "finestra di immissione nux".

  • Le percentuali sono percentuali arrotondate , che a volte potrebbero portare a lievi differenze tra la percentuale dell'applicazione e la somma della percentuale della sua finestra.

    Un esempio: se un'applicazione ha due finestre utilizzate, ognuna utilizzata 0,7%del tempo totale, entrambe le finestre riporteranno 1%ciascuna ( 0.7-> arrotondato a 1), mentre i report sull'utilizzo dell'applicazione1% ( 1.4-> arrotondato a 1)

    Non c'è bisogno di dire che queste differenze sono totalmente irrilevanti in tutto il quadro.

Il copione

#!/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

Come impostare

  1. Lo script deve xdotoolottenere le informazioni sulla finestra

    sudo apt-get install xdotool
  2. Copia lo script in un file vuoto, salvalo come window_logs.py

  3. Prova- esegui lo script: acchiappa lo script con il comando (da un terminale):

    python3 /path/to/window_logs.py

    Dopo un minuto, lo script crea un file di registro con i primi risultati in ~/.usagelogs. Il file è timestamp con la data e l'ora di creazione. Il file viene aggiornato una volta al minuto.

    Nella parte inferiore del file è possibile visualizzare sia l'ora di inizio che la data e ora dell'ultima modifica. In questo modo puoi sempre vedere qual è il periodo di tempo del file.

    Se lo script viene riavviato, viene creato un nuovo file con un nuovo timestamp (inizio-).

  4. Se tutto funziona correttamente, aggiungi ad Applicazioni di avvio: Dash> Applicazioni di avvio> Aggiungi. Aggiungi il comando:

    /bin/bash -c "sleep 15 && python3 /path/to/window_logs.py"

Altre note

  • ~/.uselogsè una directory nascosta per impostazione predefinita. Premi (in nautilus) Ctrl+ Hper renderlo visibile.
  • Così com'è, lo script arrotonda l'attivita 'della finestra su 5 secondi, supponendo che meno di 5 secondi non stia realmente usando la finestra. Se desideri modificare il valore, impostalo nell'intestazione dello script nella riga:

    # -- set update/round time (seconds)
    period = 5
    # -- 
  • La sceneggiatura è estremamente "a basso contenuto di succo". Inoltre, poiché gli aggiornamenti temporali per finestra vengono eseguiti all'interno dello script, il numero di righe nel file di registro è limitato al numero effettivo di finestre utilizzate.

    Tuttavia, ad esempio, non eseguirei lo script per settimane consecutive, per evitare di accumulare troppe righe (= record della finestra) da mantenere.


1
Esattamente quello che stavo cercando, tranne che è bello avere anche una GUI, ma posso farlo da solo. Grazie.
— ambi

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.