Symfony 3.4处理多个输入问题

时间:2019-05-23 21:07:41

标签: php symfony input process command-line-interface

我已经阅读了文档并尝试了几个示例,但是似乎无法获得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(),但是在我的实际应用程序中,我正在并行启动多个实例,并且不能让一个实例先于其他实例完成。因此,我将进程添加到数组中,并在完成时取消设置它们。当数组为空时,我会跳出循环并继续执行程序。

那么,我在做什么错?我如何将预先确定的输入发送到流程,以便它可以回答连续的问题,然后让流程继续进行?

0 个答案:

没有答案