Заставить python запустить файл в командной строке, ввести что-то, подождать, а затем снова ввести что-то - PullRequest
5 голосов
/ 16 ноября 2011

В python я хотел сделать следующее: У меня есть программа командной строки, которая требует от пользователя вводить шаг за шагом и ждать между ними, чтобы получить результат. Теперь я хочу автоматизировать этот процесс с помощью Python.

Процесс будет примерно таким:

  • запустите myProgram.exe в командной строке
  • введите команду 1
  • дождаться запуска и завершения команды 1 (это займет ~ 5 минут)
  • введите команду 2 ...

есть ли способ симулировать этот процесс в python? Я знал, что мы можем запустить программу и передать параметры командной строки, используя os.open () или подпроцесс. Но это разовая вещь.

Спасибо

Ответы [ 2 ]

3 голосов
/ 16 ноября 2011

Вы можете использовать модуль подпроцесса и Popen.communicate() для отправки данных в процесс stdin

EDIT:

Вы правы, он должен использовать stdin.write для отправки данных, что-то вроде этого:

#!/usr/bin/env python

import subprocess
import time

print 'Launching new process...'
p = subprocess.Popen(['python', 'so1.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)

print 'Sending "something"...'
p.stdin.write('something\n')

print 'Waiting 30s...'
time.sleep(30)

print 'Sending "done"...'
p.stdin.write('done\n')

p.communicate()
print '=o='
2 голосов
/ 16 ноября 2011

В Unix или с Cygwin Python в Windows модуль pexpect может автоматизировать интерактивные программы.

См. примеры здесь . Вы захотите передать аргумент timeout длиннее, чем по умолчанию, expect() для части, которая занимает пять минут.

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