使用python找出谁在linux上登录

Avi*_*via 0 python linux

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

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

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

Avi*_*via 12

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

首先安装psutil:

pip install psutil
Run Code Online (Sandbox Code Playgroud)

之后一切都很简单,例如从终端运行python控制台:

import psutil 

psutil.users()
Run Code Online (Sandbox Code Playgroud)

输出:

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


Ash*_*ary 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'
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方法获取当前登录的数量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
Run Code Online (Sandbox Code Playgroud)

用户名:

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

In [55]: set([x.split()[0] for x in users.splitlines()])
Out[55]: set(['monty'])
Run Code Online (Sandbox Code Playgroud)