我已经阅读了文档并尝试了几个示例,但是似乎无法获得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()
,但是在我的实际应用程序中,我正在并行启动多个实例,并且不能让一个实例先于其他实例完成。因此,我将进程添加到数组中,并在完成时取消设置它们。当数组为空时,我会跳出循环并继续执行程序。
那么,我在做什么错?我如何将预先确定的输入发送到流程,以便它可以回答连续的问题,然后让流程继续进行?
?