Выполнение sudo с помощью pty.spawn () - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь выполнить sudo -S id в оболочке TTY, используя pty.spawn() в python 2.7.

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

Мой код основан на этом ответе: Выдача команд оболочке psuedo (pty)

Даже если пароль правильный, я получаю вышеуказанную ошибку, как исправить этот код, чтобы он выполнял sudo и выводил вывод команды id в стандартный вывод?

1 Ответ

0 голосов
/ 13 апреля 2020

Похоже, вам нужно предоставить команду в виде массива, а использование генератора записи, похоже, не работает, и вам нужна новая строка в пароле, поэтому попробуйте:

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

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

Использование os.close(0) не позволяет программе перевести стандартный ввод в режим raw.

...