J'essaye de faire un wrapper .NET pour un REPL (spécifiquement Scheme, mais je n'ai pas obtenu où cela importe). J'ai cherché une sorte de bibliothèque expect-style, mais je ne pouvais pas en trouver un, donc j'ai utilisé un System.Diagnostics.Process. Je ne pense pas réussir à lire et à écrire correctement.Comment faire pour envelopper un REPL en utilisant .NET?
Voici mon code; il est en IronPython, mais j'ai eu des résultats similaires en 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()
Et voici la sortie:
Welcome to Racket v5.0.1
C:\home>
Je pense qu'il a fini par me permettre de lire l'invite (quelque chose comme « > "), et le résultat de l'expression que j'ai entrée (" (+ 3 15) "devrait retourner" 18 ").