Можно ли связаться с подпроцессом с подпроцессом. Открыть?

StackOverflow https://stackoverflow.com/questions/250700

  •  05-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь написать скрипт на python, который упаковывает наше программное обеспечение. Этот скрипт должен собрать наш продукт и упаковать его. В настоящее время у нас есть другие сценарии, которые выполняют каждый фрагмент отдельно, включая сценарии csh и perl. Один из таких скриптов запускается так:

sudo mod args

где mod - скрипт на Perl; так в Python я бы сделал

proc = Popen(['sudo', 'mod', '-p', '-c', 'noresource', '-u', 'dtt', '-Q'], stderr=PIPE, stdout=PIPE, stdin=PIPE)

Проблема в том, что этот скрипт требует ответа на несколько вопросов. Для этого я подумал, что традиционный

(stdout, stderr) = proc.communicate(input='y')

будет работать. Я не думаю, что это работает, потому что процесс, которым управляет Попен, это sudo, а не скрипт мода, который задает вопрос. Есть ли способ связаться со скриптом мода и все же запустить его через sudo?

Это было полезно?

Решение

Я бы предпочел пойти с Pexpect.

import pexpect
child = pexpect.spawn ('sudo mod -p -c noresource -u dtt -Q')
child.expect ('First question:')
child.sendline ('Y')
child.expect ('Second question:')
child.sendline ('Yup')

Другие советы

Я думаю, что вы должны удалить sudo из вашего вызова Popen и потребовать, чтобы пользователь вашего сценария набрал sudo .

Это дополнительно делает более явной необходимость повышения привилегий в вашем сценарии, вместо того, чтобы скрывать его внутри Popen .

Самое простое, что можно сделать, это запустить управляющий скрипт (скрипт Python) через sudo . Вы можете сделать это, или это не вариант?

Нам нужна дополнительная информация.

<Ол>
  • sudo спрашивает у вас пароль?
  • Какой интерфейс есть у мода-скрипта для вопросов?
  • Потому что такого рода вещи не обрабатываются как обычно по трубе.

    Решением для обоих из них может быть Pexpect , который довольно опытен в работе с забавными скрипты, которые запрашивают пароли, и различные другие проблемы ввода.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top