2013-03-26 3 views
1

У меня есть программа установки. Он имеет .sh и .bat для * nix/windows os. В сценариях он что-то сделает и повесится там, ожидая некоторых других вещей, которые нужно сделать, затем нажмите Введите в этом командном окне, скрипты будут продолжены.Нажмите ввод как ввод команды

Я хочу сделать все с помощью python. я знаю subprocess.open может вызвать скрипт, но им не уверен, как это сделать «Press Enter» вещь ..

Любой вход будет appraciated ..

+0

Как именно вы вызываете установщика? –

+0

Я пытался использовать что-то вроде «subprocess.Popen (« sh abc.sh », shell = True, stdout = subprocess.PIPE)». и я не знаю, что делать дальше для нажатия Enter .. – Luke

+0

реализован pExpect .. спасибо всем вам .. – Luke

ответ

1

Вам необходимо поставить новую строку на stdin установщика.

Один из способов:

subprocess.Popen('sh abc.sh < a_file_that_you_prepared.txt', 
       shell=True, 
       stdout=subprocess.PIPE) 

Другой, примерно эквивалентно первому:

input_file = open('a_file_that_you_prepared.txt', 'r') 
subprocess.Popen('sh abc.sh', 
       shell=True, 
       stdout=subprocess.PIPE, 
       stdin=input_file) 
input_file.close() 

Другой способ - может работать, не может:

subprocess.Popen('sh abc.sh < /dev/null', 
       shell=True, 
       stdout=subprocess.PIPE) 

Третий путь - может легко вызвать взаимоблокировку между вашей программой и установщиком:

x = subprocess.Popen('sh abc.sh', 
       shell=True, 
       stdout=subprocess.PIPE, 
       stdin=subprocess.PIPE) 

... 

x.stdin.write('\n') 
3

Один из способов заключается в использовании является использование метода raw_input !

+0

спасибо за ваш ответ Aneesh. но то, что я делал, - это инструмент для автоматизации, который будет делать все автоматически. Так или иначе, что не связано с работой людей? – Luke

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