संपादित करें: सॉर्ट की गई रिपोर्ट के साथ स्क्रिप्ट का एक संस्करण यहां पाया जा सकता है
हमेशा इसके लिए स्क्रिप्ट लिखने में मज़ा आता है!
नीचे दी गई स्क्रिप्ट आउटपुट का उत्पादन करेगी (रिपोर्ट) जैसे:
------------------------------------------------------------
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
विंडोज़, एक Python
आईडीई) होती है। हालाँकि उनके विंडो का शीर्षक और उपयोग सही ढंग से बताया जाएगा।
पासवर्ड इनपुट वाली लॉक स्क्रीन को "नक्स इनपुट विंडो" बताया गया है।
प्रतिशत गोल हैं , जो कभी-कभी आवेदन के बीच मामूली अंतर पैदा कर सकता है प्रतिशत और इसकी खिड़की के प्रतिशत के ।
एक उदाहरण: यदि किसी एप्लिकेशन में दो विंडो का उपयोग किया जाता है, तो प्रत्येक का उपयोग 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
एक मिनट के बाद, स्क्रिप्ट पहले परिणामों के साथ एक लॉग फ़ाइल बनाती है ~/.usagelogs
। फ़ाइल समय-निर्माण की तारीख और समय के साथ मुहर लगी है। फ़ाइल को प्रति मिनट एक बार अपडेट किया जाता है।
फ़ाइल के निचले भाग में, आप नवीनतम संपादन की शुरुआत और समय दोनों देख सकते हैं। इस तरह आप हमेशा देख सकते हैं कि फाइल का टाइम स्पैन क्या है।
यदि स्क्रिप्ट फिर से शुरू होती है, तो एक नई (स्टार्ट-) टाइम स्टैम्प के साथ एक नई फ़ाइल बनाई जाती है।
यदि सभी ठीक काम करते हैं, तो स्टार्टअप एप्लिकेशन में जोड़ें: डैश> स्टार्टअप एप्लिकेशन> जोड़ें। कमांड जोड़ें:
/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
# --
स्क्रिप्ट बेहद "लो ऑन जूस" है। इसके अलावा, चूंकि समय- प्रति विंडो अद्यतन स्क्रिप्ट के अंदर किया जाता है, लॉग फाइल में लाइनों की संख्या उपयोग की गई खिड़कियों की वास्तविक संख्या तक सीमित है।
फिर भी, मैं उदाहरण के लिए एक पंक्ति में हफ्तों तक स्क्रिप्ट नहीं चलाऊंगा, बनाए रखने के लिए बहुत सी लाइनें (= विंडो रिकॉर्ड) संचय को रोकने के लिए।