Gibt es eine Software, die die Fenster- und Anwendungsnutzung zeitlich verfolgt?

10

Gibt es eine Software, die die Zeit meiner Aktivitäten festhält und einen Bericht erstellt? Basierend auf fokussiertem Fenster und Fenstertitel. Der Bericht zeigt nur die für ein bestimmtes Fenster aufgewendete Zeit und den Titel wie folgt an:

Application   Title                             Time
Firefox       Ask Ubuntu - Mozilla Firefox      5:58
ambi
quelle
1
Es gibt einen Zeiterfasser im Software-Center, der genau dies tut
Mateo
1
Dies kann mit verfügbaren Programmen sehr einfach durchgeführt werden - lassen Sie uns dem kein Motiv zuweisen, ich habe ein solches Programm verwendet, um meine eigene Zeit für ein Projekt vorher aufzuzeichnen. Dies ist sicherlich nicht in der Kategorie "zu breit"
Mateo
Wie auch immer, ich verstehe nicht, warum diese Frage stark abgelehnt wird. Es ist eine normale und klare Frage. Ich habe nirgendwo auf der Website eine Warnung "Nur Fragen stellen, auf die niemand die Antwort kennt" gesehen.
Jacob Vlijm
Hallo Ambi. Hat meine Antwort gepostet. Bitte lassen Sie mich wissen, wenn Sie es schaffen!
Jacob Vlijm
Ja, vielleicht war meine Beschreibung nicht korrekt - ich möchte niemanden außer mir ausspionieren. Ich möchte nur eine Statistik darüber haben, was ich meine Zeit verschwendet habe. Ich habe 'Time Tracking Übersicht' und 'GTimeLog Time Tracker' aktiviert, aber dort müssen Sie alles manuell eingeben - das möchte ich nicht. Jacob Vlijm, danke, das ist genau das, wonach ich gesucht habe, außer ich dachte, dass es eine
solche

Antworten:

7

BEARBEITEN: Eine Version des Skripts mit sortierten Berichten finden Sie hier


Es macht immer Spaß, ein Skript dafür zu schreiben!

Das folgende Skript erzeugt eine Ausgabe (Bericht) wie:

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


..die einmal pro Minute aktualisiert wird.

Anmerkungen

  • Der Bericht meldet möglicherweise Fenster unter der Kategorie "Unbekannt". Dies ist der Fall, wenn Windows pid 0( tkinterFenster wie IdleWindows, eine PythonIDE) haben. Ihr Fenstertitel und ihre Verwendung werden jedoch korrekt gemeldet.

  • Der Sperrbildschirm mit Passworteingabe wird als "Nux-Eingabefenster" gemeldet.

  • Die Prozentsätze sind gerundete Prozentsätze, die gelegentlich zu geringfügigen Unterschieden zwischen dem Prozentsatz der Anwendung und der Summe des Prozentsatzes des Fensters führen können.

    Ein Beispiel: Wenn für eine Anwendung zwei Fenster verwendet werden, die jeweils 0,7%für die Gesamtzeit verwendet werden, melden beide Fenster1% jeweils ( 0.7-> gerundet auf 1), während die Nutzungsberichte der Anwendung1% ( 1.4-> gerundet auf 1).

    Man muss nicht sagen, dass diese Unterschiede im ganzen Bild völlig irrelevant sind.

Das Skript

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

Wie stellt man das ein

  1. Das Skript muss xdotooldie Informationen des Fensters abrufen

    sudo apt-get install xdotool
  2. Kopieren Sie das Skript in eine leere Datei und speichern Sie es unter window_logs.py

  3. Testen Sie das Skript: Starten Sie das Skript mit dem Befehl (von einem Terminal aus):

    python3 /path/to/window_logs.py

    Nach einer Minute erstellt das Skript eine Protokolldatei mit den ersten Ergebnissen in ~/.usagelogs. Die Datei ist mit dem Erstellungsdatum und der Erstellungszeit versehen. Die Datei wird einmal pro Minute aktualisiert.

    Am Ende der Datei sehen Sie sowohl die Startzeit als auch den Zeitstempel der letzten Bearbeitung. Auf diese Weise können Sie immer sehen, wie lange die Datei dauert.

    Wenn das Skript neu gestartet wird, wird eine neue Datei mit einem neuen (Start-) Zeitstempel erstellt.

  4. Wenn alles einwandfrei funktioniert, fügen Sie Startanwendungen hinzu: Dash> Startanwendungen> Hinzufügen. Fügen Sie den Befehl hinzu:

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

Weitere Notizen

  • ~/.uselogsist standardmäßig ein verstecktes Verzeichnis. Drücken Sie (in nautilus) Ctrl+ H, um es sichtbar zu machen.
  • Das Skript rundet die Aktivität des Fensters auf 5 Sekunden ab, vorausgesetzt, weniger als 5 Sekunden verwenden das Fenster nicht wirklich. Wenn Sie den Wert ändern möchten, setzen Sie ihn im Kopf des Skripts in der Zeile:

    # -- set update/round time (seconds)
    period = 5
    # -- 
  • Das Skript ist extrem "saftarm". Da die Zeitaktualisierungen pro Fenster im Skript durchgeführt werden, ist die Anzahl der Zeilen in der Protokolldatei auf die tatsächliche Anzahl der verwendeten Fenster begrenzt.

    Trotzdem würde ich das Skript beispielsweise nicht wochenlang hintereinander ausführen, um zu verhindern, dass sich zu viele Zeilen (= Fensterdatensätze) ansammeln, um sie zu verwalten.

Jacob Vlijm
quelle
1
Genau das, wonach ich gesucht habe, außer dass es gut ist, auch eine GUI zu haben, aber ich kann es selbst tun. Vielen Dank.
Ambi