Squeak.ru - шаблоны программирования

Узнайте, кто вошел в систему в Linux, используя python

У меня есть 8 серверов, которые я хотел бы контролировать. На всех серверах установлен сервер tornado python. Один из серверов является монитором, который опрашивает другие серверы и предупреждает меня по SMS, если есть проблема.

Одно из предупреждений — когда пользователь входит на один из серверов.

Как я могу использовать Python для определения того, кто вошел в систему на моем сервере Ubuntu? Мне нужно вернуть зарегистрированных пользователей на главный монитор. Надеюсь, это прояснит ситуацию..

14.01.2013

  • Повезло тебе. Что вы пробовали? 14.01.2013
  • @Inbar Вы не должны ставить ответы на вопрос. 14.01.2013
  • @это был ответ ОП.... если ты не заметил... 14.01.2013
  • @InbarRose: по-прежнему не имеет смысла ставить это в вопросе. См. здесь 14.01.2013
  • @slhck ОП также не имеет смысла ставить это как ответ вместо вопроса. 14.01.2013
  • @InbarRose: Вы читали запись в блоге, на которую я ссылаюсь? 14.01.2013
  • @DavidRobinson Я знаю об этом, но, глядя на контекст и тот факт, что ОП является новым пользователем, 1 + 1 = 2, и кажется, что ответ является частью вопроса. 14.01.2013
  • @InbarRose: я даже не знаю, что это значит. Вопрос не очень хороший (требуется гораздо больше подробностей), но это не означает, что поощрение публиковать решения, которые он нашел в качестве ответа, не относится к нему (во всяком случае, он не такой новый пользователь - он задал и ответил на пару вопросов). 14.01.2013

Ответы:


1

Лучшее, что я нашел в Интернете, это psutil. См. документацию по psutil.

Сначала установите psutil:

pip install psutil

Дальше все просто, например запускаем консоль python из терминала:

import psutil 

psutil.users()

Вывод:

[user(name='root', terminal='pts/0', host='your-local-host-from-isp.net',
started=1358152704.0)]
14.01.2013

2

Используйте модуль subprocess и выполните команду who.

In [5]: import subprocess

In [6]: subprocess.check_output("who")
Out[6]: 'monty    pts/0        2013-01-14 16:21 (:0.0)\n'

Вы можете получить количество текущих входов в систему, используя: who | wc -l:

In [42]: !who
monty    pts/2        2013-01-14 19:09 (:0.0)
monty    pts/0        2013-01-14 19:07 (:0.0)

In [43]: p=Popen(["who"],stdout=PIPE)

In [44]: Popen(["wc","-l"],stdin=p.stdout).communicate()[0]
2

Имена пользователей:

In [54]: users=check_output("who")

In [55]: set([x.split()[0] for x in users.splitlines()])
Out[55]: set(['monty'])
14.01.2013
  • Вам не кажется, что подпроцесс — это очень плохая практика? + Вам нужно разобрать вещи, чтобы получить имя пользователя или количество пользователей. 14.01.2013
  • @Avia смотрите отредактированное решение. 14.01.2013

  • 3

    И если вы не хотите устанавливать стороннее программное обеспечение. Вы всегда можете запустить unix-утилиту who

    import os
    os.popen('who').read()
    
    14.01.2013
  • я думаю, что использование os.popen сейчас не одобряется, это то, что модуль subprocess должен заменить. 14.01.2013
  • это верно, но где это на самом деле не имеет значения 14.01.2013

  • 4
  • Это кажется плохим решением, поскольку: а) я должен использовать внешний процесс. б) Если я хочу прочитать данные в своей программе, я должен их проанализировать, и любые изменения в выводе команды who сделают мое программное обеспечение неработоспособным. 14.01.2013
  • @Avia единственный способ, которым вы можете считать это плохим решением, - это заранее указать эти моменты в своем вопросе. 14.01.2013
  • @Avia, ваш вопрос был просто: Я пытаюсь использовать python, чтобы определить, кто вошел в систему на моем сервере Ubuntu., вы не определили, что хорошо, а что плохо. 14.01.2013

  • 5
  • Это напечатает только первого пользователя в списке. 21.06.2018
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...