윈도우 및 응용 프로그램 사용 시간을 추적하는 소프트웨어가 있습니까?


10

활동 시간을 유지하고 보고서를 제공하는 소프트웨어가 있습니까? 집중된 창 및 창 제목을 기반으로합니다. 보고서는 특정 창과 제목과 같은 시간을 보냈습니다.

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

1
소프트웨어 센터에는 시간 추적기가 있습니다
Mateo

1
이것은 사용 가능한 프로그램으로 매우 쉽게 수행 할 수 있습니다-동기를 부여하지 마십시오.이 프로그램을 사용하여 프로젝트에 내 시간을 기록했습니다. 이것은 확실히 "너무 광범위한"카테고리에 속하지 않습니다
Mateo

어쨌든, 나는이 질문이 왜 심하게 하향 조정되었는지 이해하지 못합니다. 정상적이고 명확한 질문입니다. 사이트의 어느 곳에서나 "아무도 대답을 모른다"라는 경고를 보지 못했습니다.
Jacob Vlijm

안녕 Ambi. 내 답변을 게시했습니다. 당신이 관리하는 경우 알려 주시기 바랍니다!
Jacob Vlijm 2016 년

예, 제 설명이 정확하지 않을 수 있습니다.-저 외에는 다른 사람을 감시하고 싶지 않습니다. 나는 내 시간을 낭비한 것에 대한 통계를 원합니다. '시간 추적 개요'와 '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윈도우, IDE 와 같은 Idle윈도우 Python) 그러나 창 제목과 사용법이 올바르게보고됩니다.

  • 비밀번호 입력이있는 잠금 화면은 "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

    1 분 후 스크립트는의 첫 번째 결과로 로그 파일을 만듭니다 ~/.usagelogs. 파일에는 생성 날짜 및 시간이 시간 표시되어 있습니다. 파일은 분당 한 번 업데이트됩니다.

    파일 맨 아래에는 최신 편집의 시작 시간과 시간 소인이 모두 표시됩니다. 이 방법으로 파일의 시간 범위를 항상 확인할 수 있습니다.

    스크립트가 다시 시작되면 새로운 (start-) 타임 스탬프가있는 새 파일이 생성됩니다.

  4. 모두 제대로 작동하면 시작 응용 프로그램에 대시 : 시작 응용 프로그램> 추가를 추가하십시오. 다음 명령을 추가하십시오 :

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

더 많은 메모

  • ~/.uselogs기본적으로 숨겨진 디렉토리입니다. (in nautilus) Ctrl+ H를 눌러 표시합니다.
  • 그대로, 스크립트는 창을 실제로 사용하고 있지 않다고 가정하면 5 초 동안 창의 활성을 반올림합니다. 값을 변경하려면 다음 줄의 스크립트 헤드에서 값을 설정하십시오.

    # -- set update/round time (seconds)
    period = 5
    # -- 
  • 대본은 매우 "주스가 적다". 시간 - 업데이트 이후 또한, 윈도우 당이 스크립트 내부에서 수행되는 로그 파일의 행 수는 사용 윈도우의 실제 수에 제한됩니다.

    그럼에도 불구하고 유지하기 위해 너무 많은 줄 (= 창 레코드)이 누적되는 것을 방지하기 위해 몇 주 동안 스크립트를 연속으로 실행하지 않습니다.


1
정확히 내가 찾고있는 것은 GUI를 갖는 것이 좋지만 직접 할 수는 있습니다. 감사합니다.
ambi

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.