4

だから私はプロセスを開きます$process = proc_open("my_process", $descriptors, $pipes);

次に、を使用してプロセスのstdinに書き込みますfwrite($pipes[0], "some_command");

fclose($pipes[0]);次に、を使用してパイプstdoutから読み取る前に、を使用してパイプを閉じる必要があり$output = stream_get_contents($pipes[1]);ます。パイプを閉じないと、phpスクリプトがこの呼び出しでハングします。

しかし、stdoutからの出力を受け取ったら、プロセスに別のコマンドを送信したい場合はどうなりますか... stdinパイプが閉じているため、送信する方法がありません。では、どういうわけか別のコマンドをプロセスに送信することは可能ですか?

4

1 に答える 1

2

他のプロセスが STDIN で EOL または EOF を待ってブロックしているようです。何を実行しようとしていますか?

いずれにせよ、これで問題が解決する可能性は十分にあり\nます。他のプロセスに送信するコマンドに追加するだけです。

例えば

$process = proc_open("my_process", $descriptors, $pipes);

$command = "some_command";
fwrite($pipes[0], $command."\n");

// Fetch the contents of STDOUT

さて、あなたが直面しているかもしれない問題の 1 つは、使用しているという事実に関係していることですstream_get_get_contents()。これは、返される前に EOF を待機します。$pipes[1]特定の行数または出力の終わりを示す文字列を使用fgets()して探し、からデータを取得する方法について、もう少し賢くする必要があるかもしれません。

何を実行しているか教えていただければ、より具体的な回答ができるかもしれません。

于 2012-07-24T13:55:59.733 に答える