是否可以使用两个 fifo 制作自定义 REPL(例如 python)?
问题说明
假设我有两个 fifoin
和out
。我有三个终端。
- 首先,我想运行将 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
- 第二个刚刚运行
cat out
。结果应该是这样的3 // wait a little time <-- of course this is not real output 12
- 第三个应该读取
in
运行这些行python
并打印结果,就像out
在通常的交互式 python 会话中一样。
尝试解决方案/进一步评论
- 仅
python in >out
在第三个终端中运行是行不通的。它在第一行写入后终止in
,第二个终端将仅打印3
. in
编写一个尝试从through运行行的包装器eval
是行不通的,因为我需要能够解析诸如import sys
、 或类似的行。- 总而言之,我真的想要 python 标准 REPL 的行为,只是我不想坐在键盘前一行一行地输入。我希望能够更改输入和输出通道。
答案1
你有没有看过代码模块?您可能想要子类化code.InteractiveConsole
并重写其write
方法以写入out
FIFO,并有一个外部循环从 FIFO 读取行并为每行in
调用该方法。push
我还没有对此进行测试,但即使它并不完全像我建议的那样工作,您的解决方案无疑仍然会使用该code
模块。