2013-11-03 80 views
0

在下面的文本中,「write」一詞指的是將消息寫入另一個用戶的tty的unix寫入命令。通過python服務通知用戶

我有一個服務正在運行(在inetd中,但這應該不重要),它需要通知任意用戶。直到現在我試圖用子進程調用write命令。但是,這並不總是工作,並在某些機器導致的錯誤信息,如:(請注意,該服務正在運行作爲一個人)

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

寫權限終端已開啓,MESG。所以我研究了inetutils-talkd(GNU實現),它也是這樣做的。我看到它使用ttymsg函數,並相信這個函數做我想要的,但我認爲這個函數不可用於python。

所以主要的問題是:是否有像Python中的ttymsg函數,或者我怎麼得到寫做我想要的?

回答

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) 

這種做法我可以收集所需要的數據選擇一個終端,並寫入到該終端。