Я пытаюсь сделать скрипт, который поможет мне отслеживать, сколько времени я трачу на то, что на моем компьютере. Этот сценарий должен отслеживать, когда я начинаю, останавливаюсь и сколько времени я трачу на каждую задачу. После некоторого поиска я нашел утилиту терминала под названием xdotool
, которая вернет текущее окно в фокусе и его заголовок при запуске следующим образом: xdotool getwindowfocus getwindowna me
. Например. при фокусировке на этом окне возвращается:
linux - Monitering time spent on computer w/ Python and xorg-server - Stack Overflow — Firefox Developer Edition
это именно то, что я хочу. Моя первая идея состояла в том, чтобы определить, когда сфокусированное окно изменяется, а затем получить время, в которое это происходит, однако я не смог найти никаких результатов, поэтому я прибегнул к циклу while, который запускает эту команду каждые 5 секунд, но это довольно hack-y и оказался проблематичным, я бы настоятельно предпочел бы метод изменения фокуса, но вот мой код на данный момент:
#!/usr/bin/env python3
from subprocess import run
from time import time, sleep
log = []
prevwindow = ""
while True:
currentwindow = run(['xdotool', 'getwindowfocus', 'getwindowname'],
capture_output=True, text=True).stdout
if currentwindow != prevwindow:
for entry in log:
if currentwindow in entry:
pass # Calculate time spent
print(f"{time()}:\t{currentwindow}")
log.append((time(), currentwindow))
prevwindow = currentwindow
sleep(5)
Я на Arch Linux с dwm, если это имеет значение