我在嘗試重定向stdin和控制檯應用程序的stdout,以便我可以通過F#與它們交互。但是,取決於控制檯應用程序,明顯的代碼似乎失敗了。下面的F#代碼適用於dir
但python
和fsi
失敗(掛起):在.Net中重定向stdin和stdout
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()
此掛起蟒蛇,但工程目錄。
這是否與python和fsi一起使用readline還是我犯了一個明顯的錯誤?有沒有可以讓我與F#的fsi或python REPL進行交互的工作?
這是完美的,但我還在擺弄周圍試圖找出如何找到每個命令輸出的開始和結束的。分裂>看起來不太健壯。我試過傳遞「--fsi-server:test」作爲參數,我似乎沒有得到「SERVER-PROMPT>」。有任何想法嗎? – Tristan 2009-11-24 21:38:39
不幸的是,在FSI中沒有辦法知道命令是否正在執行,而不是等待顯示'>',這顯然不是很強大。 (當產生超出任務執行時間的異步任務時,這會變得更加詭異。) 對於自動化,我們使用以下啓發式:等待「\ r \ n>」&&沒有新的輸出寫入第二個或更多。 – 2009-11-24 23:01:20
謝謝。 fsiserver.fs似乎可以在IPC上運行,但是如何像VS shell一樣使用它並不明顯。 – Tristan 2009-11-24 23:23:30