2011-04-13 87 views
1

我似乎無法找到一種方法來執行此操作。基本上,我想這樣做的僞代碼:F#使用F#Interactive從另一個腳本啓動腳本

MainScript.fsx:

printfn 「啓動外部腳本」

推出Script1.fsx

printfn 「完成」

Script1.fsx:

printfn 「我SCRIPT1運行」

所以輸出窗口應該顯示(運行MainScript.fsx後):

「啓動外部腳本」

「我SCRIPT1運行「

」完成「

基本上啓動Script1.fsx是我不知道如何實現的方法。

由於提前,

鮑勃

+1

在FSI可以使用'#load「Script1.fsx」'將加載,編譯和運行SCRIPT1加載它,但它輸出像「裝script1.fsx」一些額外的信息。 – khachik 2011-04-13 19:07:50

+0

這個問題有什麼不同? http://stackoverflow.com/questions/5643120/f-programmatically-running-fsx-script-file – Laurent 2011-04-13 19:21:21

+0

上一個問題是在Visual Studio之外運行腳本,這是在IDE中運行它們進行原型設計和調試使用交互式窗口。 – Beaker 2011-04-13 19:26:58

回答

2

您可以使用ProcessStartInfo啓動一個新的進程。您需要提供fsi.exe的路徑,並將您的fsx文件用作參數。您需要將UseShellExecute設置爲false才能在交互式shell中獲得結果。

例如:

let exec fsi script = 
    let psi = new System.Diagnostics.ProcessStartInfo(fsi) 
    psi.Arguments <- script 
    psi.UseShellExecute <- false 
    let p = System.Diagnostics.Process.Start(psi) 
    p.WaitForExit() 
    p.ExitCode 

exec @"c:\Program Files\Microsoft F#\v4.0\Fsi.exe" "foo.fsx" 
+0

你能否讓我回答以前的相關問題?我會把它標記爲那個答案。我剛剛提到了一個函數,因爲我沒有意識到有一個名爲#load的關鍵字可以做我真正需要的。 Khachik的評論是我在我的場景中需要做的。 – Beaker 2011-04-13 19:42:43

+0

我認爲你可以爲這兩種情況使用相同的功能。對VS中的fsi和fsx文件中的執行使用相同的代碼通常更方便。 – Laurent 2011-04-13 19:45:17

+0

好點。但是,仍然可以免費將您的答案添加到我的相關問題中。這比我發佈的要好。 – Beaker 2011-04-13 19:48:05