Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过STDIO与子进程双向通信_Php_Cmd_Exec - Fatal编程技术网

Php 通过STDIO与子进程双向通信

Php 通过STDIO与子进程双向通信,php,cmd,exec,Php,Cmd,Exec,我正试图通过PHP脚本与Stockfish国际象棋引擎通信。为此,我正在使用,因此需要逐行发送命令。例如,这是我通常在Windows命令提示符下输入的内容: Stockfish.exe position startpos go depth 16 Stockfish.exe是的64位版本 我没能用电脑做这件事。以下是我如何尝试的: exec("stockfish.exe\nposition startpos\ngo depth 16"); 引擎运行,但命令未执行,因此我得到: 我应该在哪里得到

我正试图通过PHP脚本与Stockfish国际象棋引擎通信。为此,我正在使用,因此需要逐行发送命令。例如,这是我通常在Windows命令提示符下输入的内容:

Stockfish.exe
position startpos
go depth 16
Stockfish.exe是的64位版本

我没能用电脑做这件事。以下是我如何尝试的:

exec("stockfish.exe\nposition startpos\ngo depth 16");
引擎运行,但命令未执行,因此我得到:

我应该在哪里得到这样的东西:


我读过相关问题,但找不到解决办法。有什么办法可以做到这一点吗?

只是想澄清一下。。。实际上,您不希望在PHP中运行REPL(如Windows命令提示符),而是希望通过STDIO发送和接收子进程(
stockfish.exe
)的行分隔数据,对吗?是的,但什么是REPL?谢谢。我两者都同意。对我来说,重要的是获得与使用命令提示符时相同的输出。也许这有助于在一个exec命令中执行命令,请使用&&
Stockfish 10 64 by T. Romstad, M. Costalba, J. Kiiski, G. Linscott
info depth 1 seldepth 1 multipv 1 score cp 116 nodes 20 nps 10000 tbhits 0 time 2 pv e2e4  
info depth 2 seldepth 2 multipv 1 score cp 112 nodes 54 nps 27000 tbhits 0 time 2 pv e2e4 b7b6  
info depth 3 seldepth 3 multipv 1 score cp 148 nodes 136 nps 45333 tbhits 0 time 3 pv d2d4 d7d6 e2e4  
info depth 4 seldepth 4 multipv 1 score cp 137 nodes 247 nps 61750 tbhits 0 time 4 pv d2d4 e7e6 e2e4 c7c6  
bestmove d2d4 ponder e7e6