3

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

我目前正在编写一个工具,该工具也可以从源代码执行 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");

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

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

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

4

1 回答 1

2

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

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

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

于 2013-02-17T17:39:39.580 回答