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

ここでの問題は、コンポーザーがバージョン管理履歴を保持する必要があるかどうかを尋ねることです。

既存の VCS (.git、.svn..) の履歴を削除しますか? [はい、ん]?

そのため、コンソールに入力yする必要があります。nしかし、それは exec では不可能です。だから、インタラクティブモードか何かが必要です。

4

1 に答える 1

2

1 つの注意点: 「自動応答」の初期コマンドに送信できるフラグを探してください。composer.phar がどのような質問をするか、またはどのような順序で質問するかについて、実際の保証はありません。それは「ハック」と見なされるべきであり、私たちの脳の通常の反応は、すべての注意と文脈などに適用されるべきです...

とにかく、必要なのはproc_open()だと思います。これにより、プロセスを開始し、その標準入力と標準出力にアクセスできます。そのドキュメント ページの例 #1 のコードを参照してください。これは、おそらく必要なものに非常に近いものです。

プロセスの stdin/stdout リソースにアクセスできるようになると、好きなように読み書きできます。良いニュースは、これによりプロンプトを「読む」ことができ、少なくとも、要求されていると予想されることを要求していることを再確認できることです (たとえば、プロンプトを認識できない場合は例外をスローします)。

于 2013-02-17T17:39:39.580 に答える