4

Ubuntu12.04でPythonを使用してTelnetサーバーを作成しようとしています。別のユーザーとしてコマンドを実行できるようにするには、コマンドを使用する必要がありsuます。コマンドを使用すると、パスワードの入力を求められます。これで、プロンプトがSTDERRストリームに送信されることがわかりましたが、パスワードを送信するストリームがわかりません。STDIN経由で送信しようとすると、次のエラーが発生しますsu: must be run from a terminal。どうすれば続行できますか?

4

1 に答える 1

1

本当にシステムのプログラムを使用したい場合はsu、ターミナルペアを作成する必要がありますman 7 pty。Pythonでpty.openpty、1つは自分用、もう1つはsu用のファイル記述子のペアを返す呼び出しを参照してください。次に、フォークする必要があります。子プロセスで、stdin / out/errをスレーブfdとexecsuに変更します。親プロセスでは、マスターfdとの間でデータを送受信します。Linuxカーネルはそれらを相互に接続します。

あるいは、su代わりにエミュレートすることもできますか?

于 2012-10-08T19:44:00.610 に答える