我的linux服务器上有一个程序,每次执行时会询问同一系列的问题,然后提供几行输出。我的目标是使用php脚本自动化输入和输出。
该程序不是为了接受命令行上的输入而设计的。相反,程序询问问题1并等待键盘的答案,然后程序询问问题2并等待键盘的答案等。
我知道如何通过编写来捕获数组中的输出: $ out = array(); EXEC( “我的/路径/程序”,$出);
但是如何处理输入? 假设程序询问3个问题,有效答案是:左120 n 使用php将该输入传递给程序的最简单方法是什么? 我能以某种方式在exec线上做到吗?
我不是一个PHP菜鸟,但以前从未需要这样做。 唉,我的谷歌搜索正在进行。
答案 0 :(得分:4)
首先,只是为了让你知道你正在尝试重新发明轮子。您真正需要的是expect(1),它是一个命令行实用程序,旨在完全按照您的意愿执行,而不涉及PHP。
但是,如果您真的想编写自己的PHP代码,则需要使用proc_open
。以下是从STDOUT读取并使用proc_open
写入子进程的STDIN的一些很好的代码示例:
最后,PHP还有一个Expect PECL module。
希望这有帮助。
答案 1 :(得分:0)
只需将参数添加到exec行。
exec("/path/to/programname $arg1 $arg2 $arg3");
...但不要忘记在每个论点上都应用escapeshellarg()
!否则,您很容易被注入恶意代码。
答案 2 :(得分:0)
$out = array();
//add elements/parameters/input to array
string $execpath = "my/path/program ";
foreach($out as $parameter) {
$execpath += $parameter;
//$execpath += "-"+$execpath; use this if you need to add a '-' in front of your parameters.
}
exec($execpath);