Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 28, 2009 15:43:15

evgenyl
От:
Зарегистрирован: 2008-07-22
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

Простой системы

dll да вы че сума сошли ??? :)

так пойдет ?

import time
from ctypes import *
class LASTINPUTINFO(Structure):
_fields_ = [("cbSize", c_uint),("dwTime", c_uint)]
lii=LASTINPUTINFO(sizeof(LASTINPUTINFO),0)

while True:
windll.user32.GetLastInputInfo(pointer(lii))
print windll.kernel32.GetTickCount()-lii.dwTime
time.sleep(1)



Отредактировано (Янв. 28, 2009 16:05:06)

Офлайн

#2 Янв. 28, 2009 18:47:23

hellslade
От:
Зарегистрирован: 2008-01-28
Сообщения: 240
Репутация: +  0  -
Профиль   Отправить e-mail  

Простой системы

evgenyl
Во! просто чумовой вариант :) большой сенкс



Офлайн

#3 Ноя. 20, 2016 14:09:30

aleko_s
От: Thessaloniki, Greece
Зарегистрирован: 2016-11-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Простой системы

Прошу прощения, что поднимаю старую тему. Под Windows решение задачи определения простоя юзера имеется… А как быть с аналогичной задачей под Mac OS?

Я нагуглил решение, связанное с использованием команды терминала ioreg -c IOHIDSystem……..
Но как-то не хочется перенаправлять вывод команды в файл с последующем открытием файла и поиском в нём нужного значения. Я попробовал в терминале выдать эту команду и ответом была немаленькая простынка текста. Понятно, что средствами той же операционки можно фильтровать вывод. Но хотелось бы знать, нет ли решения аналогичного виндовому. Может кто-то сталкивался

Отредактировано aleko_s (Ноя. 20, 2016 14:26:03)

Офлайн

#4 Ноя. 21, 2016 12:01:06

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2583
Репутация: +  60  -
Профиль   Отправить e-mail  

Простой системы

uptime - и спарсить вывод ?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#5 Ноя. 21, 2016 18:20:47

aleko_s
От: Thessaloniki, Greece
Зарегистрирован: 2016-11-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Простой системы

uptime показывает время от момента загрузки ОС, если я не ошибаюсь…. Хотелось бы получить время последнего действия юзера. Виндовая user32.GetLastInputInfo показывает время, когда юзер в последний раз что-то сделал клавой или мышью…. То есть разность текущего времени и времени , выдаваемого user32.GetLastInputInfo, даёт время простоя юзера (т.е. время, прошедшее после последнего телодвижения юзера.) Существование аналога виндовой функции user32.GetLastInputInfo в Маке облегчило бы мне задачу. Если аналога нет, придётся парсить вывод команды ioreg. Тоже не страшно, конечно, но как-то корявенько….


для ioreg нагуглил такую штуку

$ sleep 3; ioreg -c IOHIDSystem | grep HIDIdleTime|sed ‘s#.*“HID#”HID#’
“HIDIdleTime” = 2930089953
“HIDIdleTime” = 2932857364
“HIDIdleTime” = 2935033969
“HIDIdleTime” = 2936912079
“HIDIdleTime” = 2939724019
“HIDIdleTime” = 2941758207
“HIDIdleTime” = 2943638209
“HIDIdleTime” = 2952352977

Но в примере всё очень красиво округляется до трёх секунд. А если мне команда выдаст 8 существенно разных значений “HIDIdleTime”? Какие соответствуют клаве и мыши? Задачка….

Отредактировано aleko_s (Ноя. 21, 2016 18:49:58)

Офлайн

#6 Ноя. 21, 2016 23:23:23

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Простой системы

Это смотрели ? http://think.random-stuff.org/posts/mac-os-x-user-idle-time-in-python
А вот более правильно решение с ioreg https://www.dssw.co.uk/blog/2015-01-21-inactivity-and-idle-time/



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#7 Ноя. 24, 2016 11:10:34

aleko_s
От: Thessaloniki, Greece
Зарегистрирован: 2016-11-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Простой системы

Огромное спасибо! Для определённости остановился на решении с использованием ioreg, так как воочию убедился, что команда даёт искомую величину в числе прочих….

Получилась такая функция в python:

 import shlex, subprocess
def get_idle_duration():
    cmd1 = "ioreg -c IOHIDSystem"
    cmd2 = "sed -e '/HIDIdleTime/ !{ d' -e 't' -e '}' -e 's/.* = //g' -e 'q'"
    args1 = shlex.split(cmd1)
    args2 = shlex.split(cmd2)
    p1 = subprocess.Popen(args1, stdout=subprocess.PIPE)
    p2 = subprocess.Popen(args2, stdin=p1.stdout, stdout=subprocess.PIPE)
    p1.stdout.close()
    out = p2.communicate()[0]
    ret = int(out)/1000000000
    
    return (ret)

Фактически, используются две команды, соединённые через PIPE - вторая фильтрует то, что выдала первая. Будучи чайником в OS X , я даже не посмотрел документацию по команде sed, интуитивно догадавшись, что она делает. В python я тоже чайник, поэтому не уверен, что выполнил все условности (соглашения об оформлении) в наименовании переменных, в пробелах до и после открывающей скобки, перед закрывающей и т.п.

subprocess был выбран, чтобы подавить вывод в stdout и перехватить его. Не знаю, может имеются и альтернативы, но subprocess нагуглился быстрее

Обе команды затолкать в один subprocess.Popen (как в примере на perl) не получилось, так как в переменную запихивался весь вывод первой команды.

Самое значимое для меня после 2-х часов ночных экспериментов было то, что функция работает….

Отредактировано aleko_s (Ноя. 24, 2016 11:22:17)

Офлайн

#8 Ноя. 24, 2016 13:03:59

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Простой системы

aleko_s
  
cmd2 = "sed -e '/HIDIdleTime/ !{ d' -e 't' -e '}' -e 's/.* = //g' -e 'q'"
Опять к этой -e прицепились по незнанию
 sed '/HIDIdleTime/ !{ d; t }; s/.* = //g; q'
На всех форумах пишут незнайки это -e, где надо и где не надо.
Для изучения sed'а заходи на сайт http://sed.sourceforge.net/



Отредактировано py.user.next (Ноя. 24, 2016 13:09:01)

Офлайн

#9 Ноя. 24, 2016 14:40:41

aleko_s
От: Thessaloniki, Greece
Зарегистрирован: 2016-11-20
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Простой системы

Спасибо! Буду знать. Оказывается, это stream editor. Век живи - век учись

Офлайн

#10 Дек. 11, 2016 20:22:18

python335
Зарегистрирован: 2016-10-19
Сообщения: 88
Репутация: +  -8  -
Профиль   Отправить e-mail  

Простой системы

time.ctime()

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version