【问题标题】:react to composer.phar's questions with php exec()用 php exec() 对 composer.phar 的问题做出反应
【发布时间】:2013-02-17 17:26:31
【问题描述】:

标题有点含糊,我相信。但是我的英语不好,所以我缺少一个更好的。

我目前正在编写一个工具,该工具还可以从源代码执行 composer.phar。

因此,当使用 composer.phar 安装一些东西时,它有时会提出问题并需要额外的输入,例如所需的格式或简单的 Y/N 问题。

当我使用 exec() 时,似乎无法对这些问题做出反应。

所以我想知道如何使用 PHP 实现这一点。

有什么想法吗?

更新 为了展示一个简单的例子,我这​​样做:

exec("php /Users/johannesklauss/Development/web/composer.phar create-project symfony/framework-standard-edition /Users/johannesklauss/Development/web/Symfony 2.1.x-dev");

这里的问题是作曲家询问是否应该保留版本控制历史:

您要删除现有的 VCS(.git、.svn..)历史记录吗? [Y,n]?

所以我需要在控制台中输入yn。但这对于 exec 是不可能的。所以我需要一些交互模式什么的。

【问题讨论】:

  • 你能显示一些代码吗?我有一个想法,但我想把它放在上下文中。

标签: php exec command-line-interface


【解决方案1】:

请注意:寻找可以发送给初始命令以“自动应答”的标志。您无法真正保证 composer.phar 会问什么问题或它会问他们的顺序。它应该被视为“黑客”,我们大脑中的正常反应应该在谨慎和上下文等情况下适用......

无论如何,我认为您需要的是proc_open(),它可以让您启动一个进程并访问它的标准输入和标准输出。请参阅该文档页面上的示例 #1 代码,它非常接近您可能需要的内容。

一旦您可以访问该进程的标准输入/标准输出资源,您就可以随意读取/写入它们。好消息是,这将让您“阅读”提示,并至少仔细检查它是否在询问您期望它询问的内容(例如,如果您不认识提示,则抛出异常)

【讨论】:

    猜你喜欢
    • 2021-12-05
    • 2019-07-26
    • 2021-04-02
    • 2017-08-30
    • 2021-03-18
    • 2019-08-07
    • 2021-04-15
    • 1970-01-01
    • 2019-08-09
    相关资源
    最近更新 更多