2008-10-30 2 views
5

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

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') 

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

ответ

4

Я бы предпочел пойти с 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') 
+0

Я пробовал pexpect и работал как «ожидаемый». Благодаря! – darrickc

1

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

3

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

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

0

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

  1. Является ли sudo с просьбой ввести пароль?
  2. В каком интерфейсе есть сценарий мод для вопросов?

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

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

Смежные вопросы