私の活動の時間を記録してレポートを作成するソフトウェアはありますか?フォーカスされたウィンドウとウィンドウタイトルに基づきます。レポートには、特定のウィンドウとそのタイトルに費やされた時間だけが表示されます。
Application Title Time
Firefox Ask Ubuntu - Mozilla Firefox 5:58
私の活動の時間を記録してレポートを作成するソフトウェアはありますか?フォーカスされたウィンドウとウィンドウタイトルに基づきます。レポートには、特定のウィンドウとそのタイトルに費やされた時間だけが表示されます。
Application Title Time
Firefox Ask Ubuntu - Mozilla Firefox 5:58
回答:
編集:ソートされたレポートを含むスクリプトのバージョンは、ここで見つけることができます
そのためのスクリプトを書くのはいつも楽しいです!
以下のスクリプトは、次のような出力(レポート)を生成します。
------------------------------------------------------------
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 0
(tkinter
ウィンドウ、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
スクリプトxdotool
はウィンドウの情報を取得する必要があります
sudo apt-get install xdotool
スクリプトを空のファイルにコピーし、名前を付けて保存します window_logs.py
スクリプトのテスト実行:(ターミナルからの)コマンドでスクリプトを実行します。
python3 /path/to/window_logs.py
1分後、スクリプトは最初の結果がのログファイルを作成します~/.usagelogs
。ファイルには作成日時がタイムスタンプされます。ファイルは1分ごとに更新されます。
ファイルの下部には、最新の編集の開始時刻とタイムスタンプの両方が表示されます。これにより、ファイルの期間を常に確認できます。
スクリプトが再起動すると、新しい(開始)タイムスタンプが付いた新しいファイルが作成されます。
すべて正常に動作する場合は、スタートアップアプリケーションに追加します。ダッシュ>スタートアップアプリケーション>追加。次のコマンドを追加します。
/bin/bash -c "sleep 15 && python3 /path/to/window_logs.py"
~/.uselogs
デフォルトでは隠しディレクトリです。プレス(中nautilus
)Ctrl+ Hそれが見えるようにします。現状では、スクリプトはウィンドウのアクティブ度を5秒で丸めます。5秒未満では実際にはウィンドウが使用されていないと想定しています。値を変更する場合は、次の行のスクリプトの先頭に設定します。
# -- set update/round time (seconds)
period = 5
# --
スクリプトは非常に「ジュース不足」です。さらに、ウィンドウごとの時間更新はスクリプト内で行われるため、ログファイルの行数は実際に使用されているウィンドウの数に制限されます。
それでも、たとえば、あまりにも多くの行(=ウィンドウレコード)が蓄積されて維持できないようにするために、スクリプトを数週間続けて実行することはありません。
それはarbtt
あなたが説明したとおりに機能します:https : //www.joachim-breitner.de/blog/336-The_Automatic_Rule-Based_Time_Tracker