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.