Próbuję przekierować stdin i stdout do aplikacji konsolowej, dzięki czemu mogę komunikować się z nimi za pośrednictwem F #. Jednak w zależności od aplikacji konsoli oczywisty kod wydaje się nie udać. Poniższy F # Kod działa na dir
ale nie powiedzie się (zawiesza się) na python
i fsi
:Przekierowywanie stdin i stdout do .Net
open System
open System.Diagnostics
let f = new Process()
f.StartInfo.FileName <- "python"
f.StartInfo.UseShellExecute <- false
f.StartInfo.RedirectStandardError <- true
f.StartInfo.RedirectStandardInput <- true
f.StartInfo.RedirectStandardOutput <- true
f.EnableRaisingEvents <- true
f.StartInfo.CreateNoWindow <- true
f.Start()
let line = f.StandardOutput.ReadLine()
To wisi na pytona ale pracuje dla reż.
Czy to ma zrobić z python i fsi za pomocą readline lub czy robię oczywisty błąd? Czy jest jakieś obejście, które pozwoliłoby mi na interakcję z FSI lub Pythonem REPL z F #?
To jest doskonały, z wyjątkiem jestem nadal błahy wokół próbuje dowiedzieć się, jak znaleźć to gdzie każde wyjście polecenia zaczyna i kończy. Dzielenie> nie wydaje się być bardzo solidne. Próbowałem przekazać "--fsi-server: test" jako argument i wydaje mi się, że nie otrzymuję "SERVER-PROMPT>". Jakieś pomysły? – Tristan
Niestety nie ma sposobu, aby dowiedzieć się w FSI, czy polecenie zostało wykonane, wykonując polecenie inne niż oczekiwanie na wyświetlenie ">", co oczywiście nie jest tak silne. (To staje się jeszcze bardziej skomplikowane, gdy spawnujesz asynchroniczne zadania, które przeżyją wykonanie zadania.) Do automatyzacji używamy następującej heurystyki: czekaj na "\ r \ n>" i nie zapisuj nowych wyników przez sekundę lub dłużej. –
Dzięki. fsiserver.fs wydaje się działać przez IPC, ale nie jest oczywiste, jak go używać, tak jak powłoki VS. – Tristan