带有 fifo 的自定义 python REPL

带有 fifo 的自定义 python REPL

是否可以使用两个 fifo 制作自定义 REPL(例如 python)?

问题说明

假设我有两个 fifoinout。我有三个终端。

  1. 首先,我想运行将 python 代码输出到in.例如 echo "print(1+2)" > in echo "a = 3" > in echo "b = 4" > in // wait some time # usual comments break SO formatting echo "print(a*b)" > in
  2. 第二个刚刚运行cat out。结果应该是这样的 3 // wait a little time <-- of course this is not real output 12
  3. 第三个应该读取in运行这些行python并打印结果,就像out在通常的交互式 python 会话中一样。

尝试解决方案/进一步评论

  • python in >out在第三个终端中运行是行不通的。它在第一行写入后终止in,第二个终端将仅打印3.
  • in编写一个尝试从through运行行的包装器eval是行不通的,因为我需要能够解析诸如import sys、 或类似的行。
  • 总而言之,我真的想要 python 标准 REPL 的行为,只是我不想坐在键盘前一行一行地输入。我希望能够更改输入和输出通道。

答案1

你有没有看过代码模块?您可能想要子类化code.InteractiveConsole并重写其write方法以写入outFIFO,并有一个外部循环从 FIFO 读取行并为每行in调用该方法。push

我还没有对此进行测试,但即使它并不完全像我建议的那样工作,您的解决方案无疑仍然会使用该code模块。

相关内容