使用python通过服务通知用户

时间:2013-11-03 18:39:07

标签: python-3.x service tty inetd

在下文中,“write”一词指的是unix write命令,它将消息写入另一个用户的tty。

我有一个服务运行(在inetd中,但这无关紧要)需要通知任意用户。到目前为止,我试图用subprocess调用write命令。但这并不总是有效,并且在某些机器上会导致错误消息,如:

write: you are uid 65534, but your login is as uid 1000

(请注意该服务作为无人运行。)使用mesg打开终端的写权限。所以我查看了inetutils-talkd(GNU实现),它也是如此。我看到它使用了ttymsg函数并相信这个函数可以实现我想要的功能,但我认为这个函数不适用于python。

所以主要的问题是:在python中是否有类似ttymsg函数的东西或者我怎样才能写出来做我想要的东西?

1 个答案:

答案 0 :(得分:0)

文件/ var / run / utmp包含有关终端上活动会话的信息。 它可以解析:

import struct

sig = 'hi32s4s32s256shhiii36x'
size = struct.calcsize(sig)
file = open('/var/run/utmp', 'rb')
chunk = file.read(size)
entrys = []
while len(chunk) == size:
    entry = struct.unpack(chunk)
    entrys.append()
    chunk = file.read(size)

通过这种方法,我可以收集所需的数据来选择终端并写入该终端。