Огромное спасибо! Для определённости остановился на решении с использованием 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-х часов ночных экспериментов было то, что функция работает….