Я пытаюсь создать .NET-обертку для REPL (в частности, Scheme, но я не добрался туда, где это важно). Я искал какую-то библиотеку ожидающего стиля, но я не мог ее найти, поэтому я использовал System.Diagnostics.Process. Я не думаю, что мне удастся правильно читать и писать.Как поместить REPL с помощью .NET?
Это мой код; это в 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 »).