在下文中,“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函数的东西或者我怎样才能写出来做我想要的东西?
答案 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)
通过这种方法,我可以收集所需的数据来选择终端并写入该终端。