0

次のテキストでは、「書き込み」という単語は、別のユーザーの tty にメッセージを書き込む UNIX 書き込みコマンドを指します。

任意のユーザーに通知する必要があるサービスを (inetd で実行していますが、それは問題ではありません) 実行しています。今までサブプロセスで書き込みコマンドを呼び出そうとしていました。しかし、それは常に機能するとは限らず、一部のマシンでは次のようなエラー メッセージが表示されます。

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

(サービスはnobodyとして実行されていることに注意してください。) 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 に答える