0

在下面的文本中,“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 函数的东西,或者我怎样才能写来做我想做的事?

4

1 回答 1

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)

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

于 2013-11-04T22:30:33.653 回答