2015-01-19 2 views
2

Я считаю, что это очень простой вопрос, но я не нашел простой ответ.Отправить вход в командной строке из программы Python

Я запускаю программу python, которая завершает кластер AWS (используя starcluster). Я просто вызываю команду из моей программы python, используя подпроцесс, что-то вроде следующего.

subprocess.call('starcluster terminate cluster', shell=True) 

Фактическая команда в значительной степени не имеет отношения к моему вопросу, но предоставляет некоторый контекст. Эта команда начнет завершение кластера, но не будет запрашивать да/нет входа, прежде чем продолжить, например, так:

Terminate EBS cluster (y/n)? 

Как автоматизировать печатая да из моей питона программы в качестве входных данных в этой строке?

+2

http://stackoverflow.com/a/12982539 – Amit

ответ

2

Вы можете написать с помощью стандартного ввода Popen:

from subprocess import Popen, PIPE 
proc = Popen(['starcluster', 'terminate', 'cluster'], stdin=PIPE) 
proc.stdin.write("y\r") 
4

Хотя possible to do with subprocess alone in somewhat limited way, я бы с pexpect для такого взаимодействия, например .:

import pexpect 
child = pexpect.spawn('starcluster terminate cluster') 
child.expect('Terminate EBS cluster (y/n)?') 
child.sendline('y') 
+0

кто это сказал первым? :) ну, я удалил свой ответ, был менее подробный, чем ваш – mguijarr

+0

@mguijarr Вот почему потребовалось больше времени, чтобы написать :) Спасибо, сэр. – famousgarkin

0

Это может быть проще проверить документацию по целевой программе. Часто флаг может быть установлен для ответа «да» на все запросы, например, apt-get -y install.

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