使用Composer运行交互式脚本时无法获取输入的问题排查
Symfony命令在Composer脚本中无法获取输入的问题解决
这是Composer的默认行为限制,而非不可调整的固有限制。Composer运行脚本时默认会重定向标准输入(stdin),导致Symfony Console的QuestionHelper无法读取用户输入,进而出现空密码引发的无限循环问题。
可行的解决办法
1. 执行脚本时强制开启交互模式
运行Composer脚本时添加--interactive参数,强制Composer将标准输入传递给子命令:
composer run-script your-command --interactive
2. 配置Composer默认启用输入传递
在项目的composer.json中添加config节点,设置默认启用输入传递:
{ "config": { "use-input": true } }
保存后执行composer dump-autoload使配置生效,之后直接运行composer run-script your-command即可支持交互。
3. 在Symfony命令中强制指定输入流
如果前两种方法无效,可以在命令代码中显式读取终端标准输入:
use Symfony\Component\Console\Input\StreamInput; use Symfony\Component\Console\Question\Question; // 在命令的execute方法内 $stdin = fopen('php://stdin', 'r'); $streamInput = new StreamInput($stdin); $passwordQuestion = new Question('请输入密码:'); $passwordQuestion->setHidden(true); $password = $this->getHelper('question')->ask($streamInput, $this->output, $passwordQuestion);
这种方式绕过Composer的输入重定向,直接读取终端输入。
内容的提问来源于stack exchange,提问作者Álvaro González
相关产品推荐
相关产品推荐

