มีซอฟต์แวร์ที่ใช้ติดตามหน้าต่างและแอปพลิเคชั่นหรือไม่


10

มีซอฟต์แวร์ที่ช่วยให้เวลาในกิจกรรมของฉันและให้รายงานหรือไม่ ขึ้นอยู่กับหน้าต่างที่เน้นและชื่อหน้าต่าง รายงานจะแสดงเวลาที่ใช้สำหรับหน้าต่างเฉพาะและชื่อเช่น:

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

1
มีตัวติดตามเวลาในศูนย์ซอฟต์แวร์ที่ทำสิ่งนี้
Mateo

1
สิ่งนี้สามารถทำได้อย่างง่ายดายด้วยโปรแกรมที่มีให้ - ไม่ให้แรงจูงใจกับสิ่งนี้ฉันใช้โปรแกรมดังกล่าวเพื่อบันทึกเวลาของตัวเองในโครงการก่อนหน้านี้ นี้อย่างแน่นอนไม่ได้อยู่ในหมวดหมู่ "กว้างเกินไป"
Mateo

ไม่ว่าด้วยวิธีใดฉันไม่เข้าใจว่าทำไมคำถามนี้จึงลดลงอย่างมาก เป็นคำถามปกติและชัดเจน ฉันไม่เห็นคำเตือน "ถามเฉพาะคำถามที่ไม่มีใครรู้คำตอบ" ที่ใดก็ได้บนไซต์
Jacob Vlijm

สวัสดี Ambi โพสต์คำตอบของฉัน โปรดแจ้งให้เราทราบหากคุณจัดการ!
Jacob Vlijm

ใช่อาจเป็นเพราะคำอธิบายของฉันไม่ถูกต้อง - ฉันไม่ต้องการสอดแนมใครนอกจากฉัน ฉันต้องการเพียงแค่สถิติในสิ่งที่ฉันเสียเวลาของฉัน ฉันได้ตรวจสอบ 'ภาพรวมการติดตามเวลา' และ 'GTimeLog Time Tracker' แต่คุณจำเป็นต้องป้อนทุกอย่างด้วยตนเอง - ซึ่งฉันไม่ต้องการทำ จาค็อบ 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
============================================================


.. ซึ่งอัปเดตหนึ่งครั้งต่อนาที

หมายเหตุ

  • รายงานอาจจะรายงานหน้าต่างภายใต้หมวดหมู่: "ไม่ทราบ" นี่เป็นกรณีที่ windows มีpid 0( tkinterwindows เช่น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หลังจากหนึ่งนาทีสคริปต์สร้างแฟ้มบันทึกที่มีผลครั้งแรกใน ไฟล์ถูกประทับเวลาด้วยวันที่และเวลาที่สร้าง ไฟล์จะถูกอัพเดตหนึ่งครั้งต่อนาที

    ที่ด้านล่างของไฟล์คุณสามารถเห็นทั้งเวลาเริ่มต้นและเวลาประทับของการแก้ไขล่าสุด วิธีนี้คุณสามารถดูได้ว่าช่วงเวลาใดของไฟล์

    หากสคริปต์รีสตาร์ทไฟล์ใหม่ที่มีการประทับเวลาใหม่ (start-) จะถูกสร้างขึ้น

  4. หากทำงานได้ดีให้เพิ่มในแอปพลิเคชันเริ่มต้น: Dash> แอปพลิเคชันเริ่มต้น> เพิ่ม เพิ่มคำสั่ง:

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

หมายเหตุเพิ่มเติม

  • ~/.uselogsเป็นไดเรกทอรีที่ซ่อนอยู่ตามค่าเริ่มต้น กด (ในnautilus) Ctrl+ Hเพื่อให้มองเห็นได้
  • สคริปต์จะปัดเศษกิจกรรมของหน้าต่างใน 5 วินาทีโดยถือว่าน้อยกว่า 5 วินาทีนั้นไม่ได้ใช้หน้าต่างจริงๆ หากคุณต้องการเปลี่ยนค่าให้ตั้งค่าไว้ในส่วนหัวของสคริปต์ในบรรทัด:

    # -- set update/round time (seconds)
    period = 5
    # -- 
  • สคริปต์นี้มี "น้ำผลไม้ต่ำมาก" นอกจากนี้เนื่องจากมีการอัพเดตเวลาต่อหน้าต่างภายในสคริปต์จำนวนบรรทัดในล็อกไฟล์จะถูก จำกัด ตามจำนวนหน้าต่างที่ใช้จริง

    อย่างไรก็ตามฉันจะไม่เรียกใช้สคริปต์เป็นเวลาหลายสัปดาห์ติดต่อกันเพื่อป้องกันการสะสมบรรทัดมากเกินไป (= บันทึกหน้าต่าง) เพื่อรักษา


1
สิ่งที่ฉันกำลังมองหายกเว้นเป็นการดีที่มี GUI เช่นกัน แต่ฉันสามารถทำได้ด้วยตัวเอง ขอบคุณ.
ambi

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.