使用 python 作为 repl (read-eval-print-loop),从 stdin 读取命令

use python as a repl (read-eval-print-loop), reading commands from stdin

我正在实施一个嵌入一些命令解释器的工具(java 程序),如 "bc"、"sage"、...。该工具在线程中执行解释器,重定向其标准输入和标准输出,并将一些命令写入嵌入式解释器的重定向标准输入(随时间)。在解决了常见的缓冲问题后,"bc" 和 "sage" 一切正常。

在 python 的情况下,解释器似乎没有从 stdin 读取它的命令(我已经用一个简单的 echo 1+2 | python 验证了这一点)。

我没有找到如何指示python 解释器从标准输入 读取它的命令。我读过很多类似的问题,但他们都试图从标准输入中读取 data,而不是 commands.

注意发送到 python 解释器的命令可以是多行的(一个 python "for" 循环,...)并且当 python 开始,它们随时间生成并发送给解释器。

简而言之,我想使用 python 作为 repl(read-eval-print-loop),从 stdin 读取。

python REPL 模式旨在进行交互,并且仅在检测到终端时才起作用。您可以将命令传递到标准输入,但它们不会自动打印,您必须指定它。 尝试 运行

echo print 1+2 | python

这应该会得到您预期的结果。您也可以将代码写入这样的文件

echo print 1+2 > myfile
python myfile.py

也可以使用像 fifo 节点这样的缓冲区将数据传递到 python 的标准输入,但是 python 在每一行之后退出,并且与简单地 运行 "echo print 1+2 | python"。

mkfifo a=rw MYFIFO
echo "print 1+2" > MYFIFO &
cat MYFIFO | python".

使用 python 预期的方式,根据需要执行每组代码,应该比保持 repl 打开更好,并且会产生更一致的结果。