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

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

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

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

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

4 Solutions collect form web for “Возможно ли связываться с подпроцессом с подпроцессом. Popen?”

Я бы предпочел пойти с 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 . Можете ли вы это сделать, или это не вариант?

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

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

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

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

  • Python: вызов подпроцесса с оболочкой = False не работает
  • Как использовать подпроцесс, когда несколько аргументов содержат пробелы?
  • Как я могу узнать, ожидает ли мой подпроцесс моего ввода? (В python3)
  • Убить subprocess.call после KeyboardInterrupt
  • Ошибка в live mp3 ffmpeg encoder с использованием python
  • Почему Python не может выполнить java.exe через подпроцесс?
  • Как мне взаимодействовать с консольным приложением, как будто я пользователь набираю в него что-то?
  • Подпроцесс Python - пишите несколько stdin
  • Python - лучший язык программирования в мире.