【问题标题】:Interactive PHP script with composer带有作曲家的交互式 PHP 脚本
【发布时间】:2020-10-24 03:50:55
【问题描述】:

我想在composer updatecomposer install 之后自动从composer.json 文件中运行一个交互式PHP 脚本,例如:

"scripts": {
    "raven-cmd": [
        "php bin/console kolesar:boilerplate:setup"
    ],
    "auto-scripts": {
        "cache:clear": "symfony-cmd",
        "assets:install --symlink --relative %PUBLIC_DIR%": "symfony-cmd",
        "assets:install %PUBLIC_DIR%": "symfony-cmd"
    },
    "post-install-cmd": [
        "@auto-scripts",
        "@kolesar-cmd"
    ],
    "post-update-cmd": [
        "@auto-scripts",
        "@kolesar-cmd"
    ]
},

Symfony 命令php bin/console kolesar:boilerplate:setup 是交互式脚本,期望一些用户输入,但这不起作用。确切地说,交互模式不起作用。

任何提示,如何解决这个问题?或者在composer update/install 之后可能有其他想法强制设置?

【问题讨论】:

  • 请查看此问题的答案。有效,我试过了。

标签: php symfony composer-php symfony4 post-install


【解决方案1】:

您可以在脚本调用之后简单地加上“< /dev/tty”。

https://pantheon.io/blog/writing-composer-scripts:

还有一个区别可能会影响某些命令,那就是当脚本直接从 shell 运行时,标准输入将附加到 TTY,但在通过 Composer 运行时将是重定向的输入流。这可能会产生各种影响;例如,如果没有附加的 TTY,Symfony 控制台将不会调用 interact() 方法。例如,如果您尝试编写功能测试来测试交互,这可能会妨碍您,就像整合/注释命令项目所做的那样。有几个选项可以解决这种情况。第一个是在运行命令时明确指定标准输入应该来自 TTY

这有效地让 Symfony 控制台再次调用 interact() 方法;然而,这个选项的缺点是它不那么便携

我刚刚试了一下,它按预期工作。

请注意,链接的文章还提供了更便携的版本,以防万一这对您很重要。

【讨论】:

    【解决方案2】:

    在 Windows 上,在命令末尾添加 < CON

    【讨论】:

      猜你喜欢
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 2020-05-04
      • 1970-01-01
      相关资源
      最近更新 更多