Можно ли связаться с подпроцессом с подпроцессом. Открыть? - PullRequest
5 голосов
/ 30 октября 2008

Я пытаюсь написать скрипт на 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?

Ответы [ 4 ]

4 голосов
/ 31 октября 2008

Я бы решил пойти с 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')
4 голосов
/ 30 октября 2008

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

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

1 голос
/ 30 октября 2008

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

0 голосов
/ 30 октября 2008

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

  1. sudo спрашивает у вас пароль?
  2. Какой интерфейс имеет мод-скрипт для того, чтобы задавать вопросы?

Потому что такие вещи не обрабатываются как обычно по трубе.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...