Чи є програмне забезпечення, яке відстежує використання вікна та програми?


10

Чи є програмне забезпечення, яке зберігає час моєї діяльності та дає звіт? На основі сфокусованого вікна та назви вікна. Звіт просто відображав би час, витрачений для конкретного вікна та його назву, наприклад:

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

1
У центрі програмного забезпечення є трекер часу, який робить саме це
Матео

1
Це можна зробити надзвичайно легко за допомогою доступних програм - давайте не мотивувати це, я використовував таку програму, щоб записати власний час на проект раніше. Це, звичайно, не входить у "занадто широку" категорію
Матео

У будь-якому випадку, я не розумію, чому це питання сильно підтримується. Це нормальне і чітке питання. Я не бачив попередження про "лише запитання, на який ніхто не знає відповіді".
Яків Влійм

Привіт Амбі. Опублікував мою відповідь. Будь ласка, дайте мені знати, якщо вам вдасться!
Яків Влійм

Так, моє опис був невірним - я не хочу шпигувати за будь-яким, крім мене. Я хочу просто мати статистику про те, що я витратив свій час. Я перевірив 'Огляд часу відстеження' і 'GTimeLog Time Tracker', але там потрібно ввести все вручну - що я не хочу робити. Якоб Влійм, дякую, саме це я шукав, за винятком того, що я думав, що є таке програмне забезпечення з GUI
ambi

Відповіді:


8

EDIT: тут можна знайти версію сценарію з відсортованими звітами


Завжди весело писати сценарій для цього!

Сценарій, наведений нижче, дасть результат (звіт) на зразок:

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


..що оновлюється раз на хвилину.

Примітки

  • Можливо, у звіті з'являться вікна під категорією: "Невідомо". Це той випадок, коли у Windows є pid 0( tkinterвікна, наприклад, Idlewindows, PythonIDE). Однак їх назва вікна та використання буде повідомлено правильно.

  • Екран блокування з введенням пароля повідомляється про "вікно введення Nux".

  • Відсотки є округленими відсотками, які іноді можуть призводити до незначних відмінності між додатком відсотком і сумами процентного свого вікном.

    Приклад: Якщо додаток має два вікна , що використовується, кожен з яких використовуються 0,7%в загальний час, обидва вікна будуть повідомляти про 1%кожному ( 0.7-> округляється до 1), в той час як додатки звіти про використання 1%( 1.4-> округлюються до 1)

    Не потрібно говорити, що ці відмінності абсолютно неістотні в цілій картині.

Сценарій

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

Як налаштувати

  1. Сценарій повинен xdotoolотримати інформацію про вікно

    sudo apt-get install xdotool
  2. Скопіюйте скрипт у порожній файл, збережіть його як window_logs.py

  3. Тестово запустіть скрипт: обривте скрипт командою (з терміналу):

    python3 /path/to/window_logs.py

    Через одну хвилину сценарій створює файл журналу з першими результатами в ~/.usagelogs. Файл розміщений з печаткою часу та датою створення та часом створення. Файл оновлюється раз на хвилину.

    У нижній частині файлу ви можете побачити час початку та час останнього редагування. Таким чином, ви завжди можете побачити, який часовий проміжок файлу.

    Якщо скрипт перезапуститься, створюється новий файл із новою часовою маркою (старт).

  4. Якщо все працює добре, додайте до програми запуску програми: тире> програми запуску> Додати. Додайте команду:

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

Більше приміток

  • ~/.uselogsє прихованим каталогом за замовчуванням. Натисніть (in nautilus) Ctrl+, Hщоб зробити його видимим.
  • Як і зараз, сценарій закріплює активність вікна за 5 секунд, припускаючи, що менше 5 секунд насправді не використовує вікно. Якщо ви хочете змінити значення, встановіть його в заголовку сценарію в рядку:

    # -- set update/round time (seconds)
    period = 5
    # -- 
  • Сценарій надзвичайно "мало соку". Крім того, оскільки оновлення часу на вікно робиться всередині сценарію, кількість рядків у файлі журналу обмежується фактичною кількістю використаних вікон.

    Тим не менш, я б не запускав сценарій протягом тижнів поспіль, наприклад, щоб запобігти накопиченню занадто багато рядків (= віконних записів) для підтримки.


1
Саме те, що я шукав, за винятком того, що добре мати графічний інтерфейс, але я можу це зробити і сам. Дякую.
ambi

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.