コンソールアプリケーションのstdinとstdoutをリダイレクトしようとしているので、F#経由で対話できます。しかし、コンソールアプリケーションによっては、明白なコードが失敗するようです。以下のF#コードがdir
のために動作しますがpython
とfsi
ために(ハング)失敗:標準入力と標準出力を.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()
これは、Pythonでハングが、dirのために動作します。
これはpythonやfsiとreadlineを使っているのですか、それとも私は間違いがありますか?私はfsiやPython REPLとF#のやり取りをすることができますか?
これは、私はまだ、各コマンドの出力が開始され、終了する場所を見つける方法を把握しようと周りいじるい除き、完璧です。 Splitting on>はあまり強くないようです。私は "--fsi-server:test"を引数として渡してみましたが、 "SERVER-PROMPT>"が得られていないようです。何か案は? – Tristan
残念なことに、FSIでは、コマンドが '>'が表示されるのを待つ以外の実行が行われたかどうかを知ることはできません。明らかに堅牢ではありません。 自動化では、次のヒューリスティックを使用します。「\ r \ n>」&&を待ち、2回以上新しい出力が書き込まれません。 –
ありがとうございます。 fsiserver.fsはIPCで動作するようですが、VSシェルのように使用する方法は明白ではありません。 – Tristan