使用 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 打开更好,并且会产生更一致的结果。
我正在实施一个嵌入一些命令解释器的工具(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 打开更好,并且会产生更一致的结果。