Я прочитал документацию и попробовал несколько примеров, но, похоже, не могу получить компонент процесса Symfony, который позволял бы мне отвечать на несколько вопросов по мере их возникновения. Я знаю ответы заранее и хотел бы просто подать их в виде строки.
Команда, которую я хочу запустить в процессе, выглядит примерно так:
$ introduce
$ > What is your name?
$ Michael
$ > How old are you?
$ 36
$ > Are you having a good day?
$ Yes
$ Doing lots of stuff now.
$ Info recorded. Thank you!
Тупо простой пример. Команда задает три вопроса и ожидает ответа на каждый вопрос. Затем (моя настоящая команда) начинается процесс long .
Я пробовал варианты
$process = new Process('introduce', MY_DIR);
$process->setTimeout(null);
$inputs = "Michael\n36\nYes\n";
$process->setInput($inputs);
$process->enableOutput();
$process->start();
и
$process = new Process('introduce', MY_DIR);
$process->setTimeout(null);
$inputs = new InputStream();
$inputs->write("Michael");
$inputs->write("36");
$inputs->write("Yes");
$process->setInput($inputs);
$process->enableOutput();
$process->start();
$inputs->close()
и
$process = new Process('introduce', MY_DIR);
$process->setTimeout(null);
$inputs = new InputStream();
$process->setInput($inputs);
$process->enableOutput();
$process->start();
$inputs->write("Michael");
$inputs->write("36");
$inputs->write("Yes");
$inputs->close();
А затем, чтобы дождаться его окончания:
$running = true;
while($running) {
if (!$process->isRunning()) {
if (!$process->isSuccessful()) {
throw new Exception($process->getErrorOutput());
}
$running = false;
}
Я знаю, что могу использовать ->wait()
, но в моем реальном приложении я запускаю несколько экземпляров параллельно и не могу позволить одному блоку завершить работу других. Итак, я добавляю процессы в массив и сбрасываю их по завершении. Когда массив пуст, я вырываюсь из циклов и продолжаю работать с программой.
Итак, что я делаю не так? Как я могу отправить предопределенный ввод в процесс, чтобы он мог ответить на последовательные вопросы и затем позволить процессу продолжиться ?