我正在尝试为 REPL 制作一个 .NET 包装器(特别是 Scheme,但我还没有找到重要的地方)。我寻找某种期望风格的库,但找不到,所以我一直在使用 System.Diagnostics.Process。我不认为我在正确阅读和写作方面取得了成功。
这是我的代码;它在 IronPython 中,但我在 C# 中有类似的结果:
from System.Diagnostics import *
def get_process(cmd):
psi = ProcessStartInfo()
psi.RedirectStandardOutput = True
psi.RedirectStandardInput = True
psi.RedirectStandardError = True
psi.UseShellExecute = False
psi.FileName = cmd
prc = Process()
prc.StartInfo = psi
return prc
def read_to_prompt(prc):
output = ""
while prc.StandardOutput.Peek() > 0:
output += chr(prc.StandardOutput.Read())
return output
prc = get_process("racket.exe")
prc.Start()
print read_to_prompt(prc)
prc.StandardInput.WriteLine("(+ 3 15)\n")
prc.StandardInput.Flush()
print read_to_prompt(prc)
prc.Kill()
这是输出:
Welcome to Racket v5.0.1
C:\home>
我希望它最终允许我阅读提示(类似于“>”),并且我输入的表达式的结果(“(+ 3 15)”应该返回“18”)。