【问题标题】:use python as a repl (read-eval-print-loop), reading commands from stdin使用 python 作为 repl (read-eval-print-loop),从标准输入读取命令
【发布时间】:2019-05-16 00:12:42
【问题描述】:

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

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

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

请注意,发送到 python 解释器的命令可以是多行的(python“for”循环,...),并且命令在 python 启动时还不可用,它们会随着时间生成并发送到解释器。

简而言之,我想使用 python 作为一个 repl (read-eval-print-loop),从标准输入读取。

【问题讨论】:

  • 请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您描述的问题。
  • python -c "1+1"

标签: python read-eval-print-loop


【解决方案1】:

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

回显打印 1+2 |蟒蛇

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

回显打印 1+2 > 我的文件
python myfile.py

也可以使用像fifo节点这样的缓冲区来将数据传递给python的标准输入,但是python在每一行之后都会退出,并且与简单地运行“echo print 1+2 | python”相比没有任何优势。

mkfifo a=rw MYFIFO
echo "打印 1+2" > MYFIFO &
猫 MYFIFO |蟒蛇”。

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

【讨论】:

  • 感谢您的回答,您所说的python交互模式已成为解决方案的开始:“python -i”
猜你喜欢
  • 1970-01-01
  • 2016-07-13
  • 2018-03-05
  • 2014-12-16
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
相关资源
最近更新 更多