4

我正在尝试在 Ubuntu 12.04 上使用 Python 创建 Telnet 服务器。为了能够以不同的用户身份执行命令,我需要使用su命令,然后提示输入密码。现在,我知道提示已发送到 STDERR 流,但我不知道应该将密码发送到哪个流。如果我尝试通过 STDIN 发送它,我会收到错误:su: must be run from a terminal. 我该如何进行?

4

1 回答 1

1

如果你真的想使用系统的su程序,你需要创建一个终端对,看man 7 pty,在 python 中,这个pty.openpty调用会返回一对文件描述符,一个给你,一个给 su。然后你必须fork,在子进程中将stdin/out/err更改为slave fd并执行su。在父进程中,您向主 fd 发送数据并从主 fd 接收数据。Linux内核将它们连接在一起。

或者,您也许可以效仿su

于 2012-10-08T19:44:00.610 回答