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



我正在实现一个工具(java程序(,它嵌入了一些命令解释器,如"bc"、"sage"等。该工具在线程中执行解释器,重定向其stdin和stdout,并将一些命令写入嵌入式解释器的重定向stdin(随着时间的推移(。在解决了缓冲的常见问题后,"bc"one_answers"sage"一切正常。

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

我没有找到如何指示python解释器从stdin读取其命令。我读过很多类似的问题,但他们都试图从stdin读取数据,而不是命令

请注意,发送到python解释器的命令可以是多行的(一个python"for"循环,…(,并且在python启动时命令还不可用,它们是随时间生成并发送到解释器的。

简而言之,我想使用python作为repl(读取eval打印循环(,从stdin读取。

python REPL模式是交互式的,只有在检测到终端时才有效。您可以将命令传递到stdin,但它们不会自动打印,您必须指定。尝试运行

回声打印1+2|python

这应该会得到预期的结果。你也可以把你的代码写到像这样的文件中

echo print 1+2>myfile
python myfile.py

也可以使用类似fifo节点的缓冲区将数据传递到python的stdin,但python在每行之后都会退出,与简单地运行"echo-print 1+2|python"相比,您没有任何优势。

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

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

最新更新