我正在实现一个工具(java程序),该工具嵌入了一些命令解释器,例如“ bc”,“ sage”,...。该工具在线程中执行解释器,重定向其stdin和stdout,并将一些命令(随时间)写入嵌入式解释器的重定向stdin。解决了常见的缓冲问题后,“ bc”和“ sage”一切正常。
在使用python的情况下,似乎解释器没有从stdin中读取其命令(我已经通过简单的echo 1+2 | python
进行了验证)。
我没有找到如何指示python解释器从stdin中读取其命令。我读过很多类似的问题,但是所有这些问题都试图从stdin读取数据,而不是命令。
请注意,发送到python解释器的命令可以是多行(python“ for”循环,...),并且在python启动时尚不可用,它们会随时间生成并发送到解释器。 / p>
简而言之,我想使用python作为从stdin读取的repl(read-eval-print-loop)。
答案 0 :(得分:2)
python REPL模式旨在进行交互,并且仅在检测到终端时才起作用。您可以将命令传递到stdin中,但是它们不会自动打印,您必须指定该命令。 尝试运行
回显1 + 2 | python
那应该得到您的预期结果。您也可以将代码写入这样的文件
回显1 + 2> myfile
python myfile.py
也可以使用诸如fifo节点之类的缓冲区将数据传递给python的stdin,但是python在每一行之后都会退出,与仅运行“ echo print 1 + 2 | python”相比,您没有任何优势。
mkfifo a = rw MYFIFO
回声“打印1 + 2”> MYFIFO&
猫MYFIFO | python”。
按照预期的方式使用python,通过按需执行每组代码,应该比保持repl打开更好,并且会产生更一致的结果。