ウィンドウとアプリケーションの使用を時間追跡するソフトウェアはありますか?


10

私の活動の時間を記録してレポートを作成するソフトウェアはありますか?フォーカスされたウィンドウとウィンドウタイトルに基づきます。レポートには、特定のウィンドウとそのタイトルに費やされた時間だけが表示されます。

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

1
ただ、これを行うソフトウェアセンターのタイムトラッカーあり
マテオ

1
これは、利用可能なプログラムで非常に簡単に行うことができます。これに動機を割り当てないでください。そのようなプログラムを使用して、以前に自分のプロジェクトの時間を記録しました。これは確かに「広すぎる」カテゴリにはありません
Mateo '31

いずれにせよ、なぜこの質問が大幅に反対票を投じられるのかわかりません。それは正常で明確な質問です。私はサイトのどこにも「誰にも答えがわからない質問をするだけ」という警告は表示されませんでした。
Jacob Vlijm 2016年

こんにちはアンビ。私の答えを投稿しました。管理できたらお知らせください!
Jacob Vlijm 2016年

はい、私の説明が正しくなかった可能性があります-私以外の誰かをスパイしたくありません。私は自分の時間を無駄にしたものについての統計が欲しいだけです。「タイムトラッキングの概要」と「GTimeLogタイムトラッカー」を確認しましたが、手動ですべてを入力する必要があります。Jacob Vlijm、ありがとう、GUIにそのようなソフトウェアがあると思ったのを除いて、まさにそれが私が探していたものです
ambi

回答:


7

編集:ソートされたレポートを含むスクリプトのバージョンは、ここで見つけることができます


そのためのスクリプトを書くのはいつも楽しいです!

以下のスクリプトは、次のような出力(レポート)を生成します。

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


..これは1分ごとに更新されます。

ノート

  • レポートは、カテゴリ「不明」の下のウィンドウをレポートする可能性があります。これは、ウィンドウにある場合ですpid 0tkinterウィンドウ、IDE などのIdleウィンドウPython)。ただし、ウィンドウのタイトルと使用法は正しく報告されます。

  • パスワード入力付きのロック画面は「nux入力ウィンドウ」として報告されます。

  • パーセンテージは四捨五入されたパーセンテージであり、アプリケーションのパーセンテージとそのウィンドウのパーセンテージの合計間にわずかな違いが生じる場合があります

    例:アプリケーションで2つのウィンドウが使用され、それぞれ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。ファイルには作成日時がタイムスタンプされます。ファイルは1分ごとに更新されます。

    ファイルの下部には、最新の編集の開始時刻とタイムスタンプの両方が表示されます。これにより、ファイルの期間を常に確認できます。

    スクリプトが再起動すると、新しい(開始)タイムスタンプが付いた新しいファイルが作成されます。

  4. すべて正常に動作する場合は、スタートアップアプリケーションに追加します。ダッシュ>スタートアップアプリケーション>追加。次のコマンドを追加します。

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

その他のメモ

  • ~/.uselogsデフォルトでは隠しディレクトリです。プレス(中nautilusCtrl+ Hそれが見えるようにします。
  • 現状では、スクリプトはウィンドウのアクティブ度を5秒で丸めます。5秒未満では実際にはウィンドウが使用されていないと想定しています。値を変更する場合は、次の行のスクリプトの先頭に設定します。

    # -- set update/round time (seconds)
    period = 5
    # -- 
  • スクリプトは非常に「ジュース不足」です。さらに、ウィンドウごとの時間更新はスクリプト内で行われるため、ログファイルの行数は実際に使用されているウィンドウの数に制限されます。

    それでも、たとえば、あまりにも多くの行(=ウィンドウレコード)が蓄積されて維持できないようにするために、スクリプトを数週間続けて実行することはありません。


1
私が探していたのは、GUIがあることもいいが、自分でできることを除いて。ありがとうございました。
アンビ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.