使用php exec()响应composer.phar的问题

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");

这里的问题是,最后的composer会问是否保留版本控制历史:

你想删除现有的版本控制系统(.git, .svn..)历史记录吗?[Y,n]?

因此,我需要在控制台中输入yn。但是,使用exec无法实现。所以我需要一些交互模式。


你能展示一些代码吗?我有一个想法,但我想把它放在上下文中。 - Chris Trahey
1个回答

2
一条警告:寻找可以发送到初始命令的标志以“自动回答”。您无法保证composer.phar会问什么问题或者它们的顺序。这应该被视为一种“黑客”行为,我们的大脑应该谨慎地、有上下文地做出正常反应等等。
无论如何,我认为您需要的是proc_open(),它可以让您启动一个进程并访问其stdin和stdout。请参见该文档页面上的示例#1代码,它非常接近您可能需要的内容。
一旦您可以访问进程的stdin/stdout资源,就可以按照您喜欢的方式读取/写入它们。好消息是,这将使您能够“读取”提示,并至少再次检查它是否正在询问您所期望的内容(例如,如果您不认识提示,则抛出异常)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接