У меня есть простой тестовый скрипт "askforname":
#/bin/bash
echo "please enter your name"
read varname
echo "Hello $varname"
Я могу использовать php proc_open (), чтобы использовать эту команду:
$descriptors = array(
0 => array("pipe", "r"), // STDIN
1 => array("pipe", "w"), // STDOUT
2 => array("pipe", "w") // STDERR
);
$proc = proc_open("askforname", $descriptors, $pipes);
fwrite($pipes[0], "Anna");
fclose($pipes[0]);
$stdout = stream_get_contents($pipes[1]);
$stderr = stream_get_contents($pipes[2]);
fclose($pipes[1]);
fclose($pipes[2]);
$exitCode = proc_close($proc);
echo nl2br($stdout);
Но если я могу только прочитайте подсказку («введите ваше имя») после того, как канал уже закрыт через fclose ().
Но я хотел бы прочитать вывод, затем проанализировать его и записать ввод, например:
$proc = proc_open("askforname", $descriptors, $pipes);
if (stream_get_contents($pipes[1]) == "please enter your name")
fwrite($pipes[0], "Anna");
else
//dowhatever else
fclose($pipes[0]);
Разве это невозможно с помощью proc_open () или любой другой команды в php