使用 pty.spawn() 执行 sudo

Executing sudo using pty.spawn()

我正在尝试在 TTY shell 中使用 pty.spawn()python 2.7 中执行 sudo -S id

import os
import pty
command = 'id'

scmd ="sudo -S %s"%(command)

def reader(fd):
  return os.read(fd, 50)

def writer(fd):
    yield 'password'
    yield ''

pty.spawn(scmd, reader, writer)

当我执行上面的代码时,python 解释器输出以下错误:

OSError: [Errno 13] Permission denied

我的代码基于这个答案: Issuing commands to psuedo shells (pty)

即使密码正确,我也会收到上述错误,如何修复此代码以使其执行 sudo 并将 id 命令的输出打印到标准输出?

您似乎需要以数组形式提供命令,并且使用生成器编写器似乎不起作用,并且您需要在密码中换行,所以尝试:

def writer(fd):
    return 'password\n'

os.close(0)
pty.spawn(scmd.split(' '), reader, writer)

使用 os.close(0) 阻止程序将标准输入设置为原始模式。