Есть ли программное обеспечение, которое отслеживает использование окон и приложений?


10

Есть ли программное обеспечение, которое хранит время моей деятельности и дает отчет? На основе сфокусированного окна и заголовка окна. Отчет будет просто показывать время, потраченное на конкретное окно и его заголовок, например:

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

1
В центре программного обеспечения есть трекер времени, который делает именно это
— Mateo

1
Это может быть сделано очень легко с доступными программами - давайте не будем назначать мотив для этого, я использовал такую ​​программу, чтобы записать свое время в проекте раньше. Это, конечно, не в «слишком широкой» категории
— Матео

В любом случае, я не понимаю, почему этот вопрос сильно опущен. Это нормальный и понятный вопрос. Я нигде на сайте не видел предупреждения «только задать вопрос, на который никто не знает ответа».
— Джейкоб Влейм

Привет Амби. Разместил мой ответ. Пожалуйста, дайте мне знать, если вам удастся!
— Джейкоб Влейм

Да, может быть, мое описание было неверным - я не хочу шпионить за кем-либо, кроме меня. Я хочу просто получить статистику о том, что я потратил впустую свое время. Я проверил «Обзор отслеживания времени» и «Отслеживание времени GTimeLog», но там вам нужно ввести все вручную - чего я не хочу делать. Jacob Vlijm, спасибо, это именно то, что я искал, за исключением того, что я думал, что есть такое программное обеспечение с GUI
— ambi

Ответы:


8

РЕДАКТИРОВАТЬ: версию скрипта с отсортированными отчетами можно найти здесь


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

Сценарий ниже выдаст вывод (отчет), например:

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


.. который обновляется раз в минуту.

Заметки

  • Отчет, возможно, сообщит о окнах в категории: «Неизвестно». Это тот случай, когда окна есть pid 0( tkinterокна, такие как Idleокна, 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. Если все работает нормально, добавьте в Startup Applications: Dash> Startup Applications> Add. Добавьте команду:

    /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
Именно то, что я искал, за исключением того, что хорошо иметь графический интерфейс, но я могу сделать это сам. Спасибо.
— Амби

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.