使用python找出谁在linux上登录

时间:2013-01-14 13:10:30

标签: python linux

我想要监控8台服务器。所有服务器都安装了tornado python服务器。其中一台服务器是一台监控器,可以轮询其他服务器,并在出现问题时通过短信提醒我。

其中一个警报是用户登录其中一个服务器。

如何使用Python检测谁在我的Ubuntu服务器上登录? 我需要将登录用户返回主监视器。 我希望这能使事情变得清晰。

5 个答案:

答案 0 :(得分:11)

我在网上找到的最好的东西是psutil。 请参阅文档psutil on Google Code

首先安装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)]

答案 1 :(得分:6)

使用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'])

答案 2 :(得分:2)

from subprocess import Popen, PIPE, STDOUT

who = Popen(['who'],stdin=PIPE, stdout=PIPE, stderr=STDOUT)
print who.stdout.read()

# Output 
>>> sudo_O  :0           2013-01-14 11:48 (:0)
>>> sudo_O  pts/0        2013-01-14 11:48 (:0)
>>> sudo_O  pts/1        2013-01-14 12:41 (:0)
>>> sudo_O  pts/2        2013-01-14 12:42 (:0)

答案 3 :(得分:0)

如果你不想安装第三方软件。您始终可以运行unix who 实用程序

import os
os.popen('who').read()

答案 4 :(得分:-1)

In [1]: import subprocess
In [2]: print subprocess.check_output("who").split()[0]
Out[3]: 'rikatee'