我可以让 Process 不关闭 stdin 管道吗?

Can I get Process to not close the stdin pipe?

提问人:Radu C 提问时间:11/16/2023 最后编辑:Radu C 更新时间:11/16/2023 访问量:18

问:

我遇到了一个我不想执行的边缘情况(我的副本中的第 161 行,使用 Symfony 6.3) - 接下来的它很好。Processfclose($this-pipes[0])Symfony\Component\Process\Pipes\AbstractPipes::writeunset

目前,我像这样解决这个问题:

$p = new Process(...$args);
$p->setInput((function () {
    while (true) {
        yield "";
    }
})());

有没有更好的方法来达到相同的结果?

具体案例

docker compose exec --no-TTY并提前退出,即使基础命令仍在运行(并生成输出),如果 stdin 已关闭。(澄清:没有提前退出作为正常行为,所以这就是为什么我提到确实采用参数的版本)docker exec -idocker exec-i-i

symfony symfony-process

评论


答:

0赞 Radu C 11/16/2023 #1

有一个稍微好一点的方法:

use Symfony\Component\Process\InputStream;

$p->setInput(new InputStream());

如果我对流对象不执行任何操作,则它的行为与问题文本中的生成器相同。->write()